VBA : Obliger une saisie numérique dans une TextBox - Approche d'une résolution de besoin en VBA niveau débutant
Par Ormonth
Le 2010-03-18 14:19:57, par Didier Gonard, Expert éminent
Bonjour,
Ci-dessous, le lien vers un nouveau tutoriel :
« Approche d'une résolution de besoin en VBA - niveau débutant - Obliger une saisie numérique dans une TextBox »
Le but de ce tutoriel est :
Lien vers ce tutoriel
Vos commentaires et remarques seront les bienvenus dans l'esprit de nos forums.
cordialement,
Didier
Ci-dessous, le lien vers un nouveau tutoriel :
« Approche d'une résolution de besoin en VBA - niveau débutant - Obliger une saisie numérique dans une TextBox »
Le but de ce tutoriel est :
- De présenter une bonne approche de la résolution d’un problème simple en VBA.
- D’expliciter en détail la démarche employée pour arriver à la solution voulue.
- D’expliciter les instructions VBA retenues à cette fin.
- De proposer un fichier téléchargeable qui présente une solution à un problème qui est source de fils de questions récurrentes.
Lien vers ce tutoriel
Vos commentaires et remarques seront les bienvenus dans l'esprit de nos forums.
cordialement,
Didier
-
Didier GonardExpert éminent
Envoyé par davido84
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 MPle 27/07/2013 à 11:18 -
Bonjour
Ayant eut la chance de lire ce tuto, j'ai adoré l'approche qui est faite pour résoudre un problème
Philippele 18/03/2010 à 20:31 -
edelweissericMembre éclairéBonjour à tous
Bonjour Ormonth
Il m'est toujours agréable de lire les tutos de ce site, mais, surtout, à chaque fois je découvre et j'apprends encore et encore.
Merci pour ce travail
Ericle 18/03/2010 à 18:29 -
GOLDINGMAROCMembre à l'essaiBonjour DIDIER,
J'ai lu votre tutoriel il est très intéressant c'est un travail de Pro.
Mais qu'on est il pour une VSFlexGrid. Comment peut on exploiter le tutoriel pour une VSFlexGrid en cellule courante du tableur?
J'ai essayé de l'appliquer mais je me suis bloqué sur l'instruction en rouge (voir code ci aprés) :
Code : 1
2
3
4
5Private Sub VSFlexGrid_KeyPressEdit(ByVal Row As Long, ByVal Col As Long, KeyAscii As Integer) If InStr("1234567890.", Chr(KeyAscii)) = 0 Or (InStr(VSFlexGrid.????, ".") <> 0 And Chr(KeyAscii = ".")) Then KeyAscii = 0: Beep End If End Sub
Cordialementle 07/12/2012 à 10:53 -
Didier GonardExpert éminentBonjour,
Je n'ai pas ce contrôle et ne l'ai jamais utilisé, à première vue, il est sous licence payante et je n'ai pas ce projet d'acquisition.
Bref, je ne peux donc pas tester quelque-chose....
désolé,
Didierle 10/12/2012 à 12:26 -
GOLDINGMAROCMembre à l'essaiBonjour,
Ce Control n'est pas sous licence payante, au moins dans mon poste.
J'ai résolut le problème à mon niveau. Consulté ce lien :
http://www.developpez.net/forums/d1286407/logiciels/microsoft-office/excel/macros-vba-excel/obliger-saisie-numerique-vsflexgrid/#post7020796le 10/12/2012 à 16:39 -
levchaCandidat au ClubBonjour,
Merci pour ce tutoriel, qui répond parfaitement à mon besoin (obliger la saisie de chiffres pour des infos clients ex: numéro de téléphone, numéro SIRET,etc.)
Je rencontre un problème sur un champ où l'utilisateur renseigne le chiffre d'affaires prévus pour le nouveau client, les lettres / symboles renvoient bien un message d'erreur;
En revanche le symbole € donne le message d'erreur suivant : "Erreur d'exécution '5': Argument ou appel de procédure incorrect".
J'ai repris votre code presque tel quel en ajoutant une msgbox en cas d'erreur :Code : 1
2
3
4Private Sub CTR3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If InStr("1234567890", Chr(KeyAscii)) = 0 Then KeyAscii = 0: MsgBox "Saisie non valide", vbCritical End Sub
Avez vous une idée de l'origine du bug ?
Merci beaucouple 04/05/2017 à 13:33 -
OrestieFutur Membre du ClubBonjour!
J'ai beaucoup apprécié votre tutorielJe suis de niveau débutant en VBA. J'aimerais svp savoir s'il est possible d'affecter votre code à plus d'une TextBox? Par exemple, j'ai 34 textbox. J'ai tenté d'inscrire Textbox(1,2,3, etc.)_KeyPress, mais ça ne fonctionne pas... Le message d'erreur est Erreur de compilation : Attendu : identificateur. Code : 1
2
3Private Sub textbox2_KeyPress(ByVal KeyAscii As MSFORMS.ReturnInteger) If InStr("1234567890,-", Chr(KeyAscii)) = 0 Then KeyAscii = 0: Beep end sub
Bonne journée!le 09/04/2018 à 2:33 -
Fabien_peNouveau Candidat au ClubBonjour,
Votre tutoriel est très intéressant.
En testant ce dernier je me suis rendu compte que lorsque l'on rentre un nombre avec virgule qui se termine par 0 (exemple: 1,10), la saisie ressort en non valide.
Ce problème de validation proviendrait, dans la Fonction ChainePasOk, de If Len(CStr(Val(strpass))) <> Len(strpass) Then ChainePasOK = True.
Je ne parviens pas à voir ce que je peux faire pour qu'une saisie avec un chiffre à virgule se terminant par 0 ne renvoie pas une erreur.
Quelqu'un peut il me fairte par de ces lumières.
Merci
Fabienle 23/04/2019 à 9:22 -
BackDev1Membre à l'essaiBonjour, et merci pour ce tutoriel, très agréable à lire et facile à comprendre.
Depuis sa publication, je pense qu'il y a eu des mises à jour office qui ont impactés au moins une chose.
En effet, la procédure "xxx_BeforeUpdate" ne prend pas en compte le coller, il faut désormais passer par la procédure "xxx_BeforeDropOrPaste"
Et du coup, utiliser "Data.GetText" à la place de "txtEcritFeuille.Value"
Ce qui donne pour l'intégralité de cette procédure modifiée :
Code : 1
2
3
4
5
6Private Sub txtEcritFeuille_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean, ByVal Action As MSForms.fmAction, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer) Dim strpass As String strpass = Data.GetText If ChainePasOK(strpass) = True Then Cancel = True: txtEcritFeuille.Value = "": Beep: MsgBox "Saisie non valide !" End Sub
le 25/11/2022 à 13:51