Envoyé par
davido84
Bonjour,
après être tombé sur votre tutoriel, l'avoir étudié et adapté à mes besoins, je me permets de vous contacter afin de vous remercier pour ce travail et vous signaler les 2 points suivants :
1) le code proposé dans le Private Sub txtEcritFeuille_KeyPress permet de saisir une virgule avant tout chiffre, ce qui fait qu'une saisie telle que ",123" est acceptée. Même si une telle saisie dans une feuille de calcul est acceptée et automatiquement modifiée en "0,123", la Sub txtEcritFeuille_BeforeUpdate la rejette puisque la fonction ChainePasOK ne l'accepte pas.
J'ai personnellement modifié l'événement KeyPress comme suit afin d'empêcher ce type de saisie :
1 2 3 4 5
|
If InStr("1234567890,-", Chr(KeyAscii)) = 0 Or txtEcritFeuille.SelStart > 0 And Chr(KeyAscii) = "-" _
Or (InStr(txtEcritFeuille.Value, ",") <> 0 Or txtEcritFeuille.SelStart = 0) And Chr(KeyAscii) = "," Then
KeyAscii = 0: Beep
End If |
2) l'ayant adapté pour des saisies de latitude et de longitude je me suis aperçu que la fonction ChainePasOK rejetait des données numériques dont le nombre de chiffres après la virgule dépassait 13, ce qui était problématique dans certains cas (la partie "If Len(CStr(Val(strpass))) <> Len(strpass)" fait barrage).
J'ai personnellement résolu le problème en utilisant une expression rationnelle à la place de cette fonction.
Comme ceci dépasse peut-être le cadre de votre tutoriel puisqu’il s'adresse aux débutants, je ne vous détaille pas l'expression utilisée mais si cela vous intéresse je pourrai vous la communiquer.
Ce type de travail étant à encourager, je me suis donc permis ce petit retour.
Merci encore !
Cordialement
Bonjour,
Je vous remercie de ce retour, effectivement comme annoncé dans le titre
« Approche d'une résolution de besoin en VBA niveau débutant Obliger une saisie numérique dans une TextBox », ce Tuto est orienté débutant et sur l'approche de résolution de problème, il vise à dire que pour arriver à ses fins, on ne se jette pas sur le code, mais on construit d’abord ce qu’on pourrait appeler un cahier des charges.
Donc, comme vous l’avez si bien fait, si le besoin est proche du sujet traité, il convient d’en réécrire certaines parties au niveau liste des besoins et d’adapter ensuite les code aux besoins.
Sinon,
Pour ce qui est de l’entrée d’un nombre à virgule sans chiffre devant, c’est le fonctionnement de la fonction VAL (comme ci-dessous) qui en est responsable comme vous le montrerait l’ajour d’une ligne du genre Mavar = Val(strpass) et la visualisation de MaVAr dans la fenêtre variable locale.Le rajout du zéro fait que les longueurs de chaînes sont différentes.
Pour ce qui des 13 décimales, en fait 14 passent aussi genre « 1,23456789123456 », la limite n’est pas sur les décimales, mais, en simplifiant, sur le nombre de chiffres significatifs liés au Double retourné par la fonction Val qui est de 15. De toutes façons, c’est aussi la limite des chiffres significatifs dans une cellule Excel, au-delà on passe dans la gestion des grands nombres (cf articles y afférents). En VBA en utilisant le type Decimal, on peut monter à 28 chiffres et faire des pirouettes après.
Comme vous le dites cela dépasse le cadre de ce tutoriel, mais votre approche peut intéresser des lecteurs et faire l’objet d’un post dans le forum contribuez, sur les grands nombres, si ceci n’a pas déjà été traité.
cordialement,
Didier
PS : merci de ne pas traiter de sujets techniques par MP
3 |
0 |