Variable single dans inputbox et virgule du pavé numérique
refcemad
Messages postés
39
Date d'inscription
Statut
Membre
Dernière intervention
-
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je tourne en rond... Je vais essayer d'être claire.
Ma macro fait apparaître une inputbox dans laquelle l'utilisateur doit rentrer une masse (avec une virgule).
Je souhaite rendre obligatoire le remplissage de ce champ et que, donc, il soit impossible de cliquer sur le bouton "annuler".
Je souhaite interdire qu'on rentre une masse genre "23.7g". Il faut impérativement que ce soit une valeur numérique.
Voici ce que j'ai comme base :
Avec ce code, je ne peux pas utiliser la virgule du pavé numérique.
Si je ne déclare pas ma variable en Single, je peux utiliser cette virgule mais à ce moment-là, je peux aussi rentrer n'importe quoi. J'ai donc essayé avec application.inputbox :
Mais dans ce cas, si je ne rentre rien et appuie sur "ok", j'ai une erreur "la formule que vous avez tapé contient une erreur [...]" qui n'est pas bien belle et risque d'en perturber certains (après tout, ce n'est pas une formule qu'on doit inscrire...)
Donc, ma question : comment, si c'est possible, utiliser une inputbox simple, entrer une valeur numérique et avec la virgule du pavé numérique.
Je précise que j'en suis arrivée là après des heures de recherches (j'ai essayé des tas de variantes sans plus de succès) et que si la réponse m'est passée sous le nez, je ne suis pas encore assez fortiche pour le voir.
Merci à tous ceux qui auront la patience de me lire et de me répondre.
A bientôt
Mado.
Je tourne en rond... Je vais essayer d'être claire.
Ma macro fait apparaître une inputbox dans laquelle l'utilisateur doit rentrer une masse (avec une virgule).
Je souhaite rendre obligatoire le remplissage de ce champ et que, donc, il soit impossible de cliquer sur le bouton "annuler".
Je souhaite interdire qu'on rentre une masse genre "23.7g". Il faut impérativement que ce soit une valeur numérique.
Voici ce que j'ai comme base :
Sub TestMasse_()
Dim Masse As Single
On Error Resume Next
Do While Masse < 10
Masse = InputBox("Ici la Masse :")
Loop
msgbox "masse = " & Masse
End Sub
Avec ce code, je ne peux pas utiliser la virgule du pavé numérique.
Si je ne déclare pas ma variable en Single, je peux utiliser cette virgule mais à ce moment-là, je peux aussi rentrer n'importe quoi. J'ai donc essayé avec application.inputbox :
Masse = Application.InputBox("Ici la Masse :", , , , , , , 1)
Mais dans ce cas, si je ne rentre rien et appuie sur "ok", j'ai une erreur "la formule que vous avez tapé contient une erreur [...]" qui n'est pas bien belle et risque d'en perturber certains (après tout, ce n'est pas une formule qu'on doit inscrire...)
Donc, ma question : comment, si c'est possible, utiliser une inputbox simple, entrer une valeur numérique et avec la virgule du pavé numérique.
Je précise que j'en suis arrivée là après des heures de recherches (j'ai essayé des tas de variantes sans plus de succès) et que si la réponse m'est passée sous le nez, je ne suis pas encore assez fortiche pour le voir.
Merci à tous ceux qui auront la patience de me lire et de me répondre.
A bientôt
Mado.
A voir également:
- Variable single dans inputbox et virgule du pavé numérique
- Pavé numérique bloqué - Guide
- Télévision numérique - Guide
- Verrouillage numérique PC portable : débloquer le clavier - Guide
- Télévision numérique terrestre - Accueil - TV & Vidéo
- Caractère numérique - Guide
4 réponses
Bonjour,
Tu pourrais utiliser les expressions régulières (les regex) pour vérifier que la valeur entrée est bien un nombre
Par exemple, la regex suivante fonctionne uniquement avec des valeurs du style :
4646
456,878
.5646
0,4564
887.56545
Regex:
Voici des explications et des exemples pour la mise en pratique des regex dans Excel
https://www.commentcamarche.net/faq/41005-vba-initiation-aux-expressions-rationnelles
Ou encore :
https://stackoverflow.com/questions/22542834/how-to-use-regular-expressions-regex-in-microsoft-excel-both-in-cell-and-loops
Tu pourrais utiliser les expressions régulières (les regex) pour vérifier que la valeur entrée est bien un nombre
Par exemple, la regex suivante fonctionne uniquement avec des valeurs du style :
4646
456,878
.5646
0,4564
887.56545
Regex:
^(([0-9]+(\.|,)([0-9]+\b)?|\.[0-9]))|^([0-9]*)$
Voici des explications et des exemples pour la mise en pratique des regex dans Excel
https://www.commentcamarche.net/faq/41005-vba-initiation-aux-expressions-rationnelles
Ou encore :
https://stackoverflow.com/questions/22542834/how-to-use-regular-expressions-regex-in-microsoft-excel-both-in-cell-and-loops
Bonjour et merci de l'intérêt porté à ma question.
Mais... Ouh là ! Ca va faire mal. J'avoue, je n'ai pas encore tout lu mais j'ai quand même été jusqu'à :
"Dans votre éditeur VBA, dans le menu outils, allez dans références. Parcourez les différentes références et cochez : "Microsoft vbscript regular expression 5.5" "
Ca, c'est fait.
Je n'ai pas l'habitude que tout me tombe tout cuit dans le bec mais pour une fois, si je pouvais avoir un tuyau... J'en fait quoi du Regex
^(([0-9]+(\.|,)([0-9]+\b)?|\.[0-9]))|^([0-9]*)$ ?
En tout cas, merci beaucoup pour votre sollicitude. A vous lire (mais demain, maintenant).
Mais... Ouh là ! Ca va faire mal. J'avoue, je n'ai pas encore tout lu mais j'ai quand même été jusqu'à :
"Dans votre éditeur VBA, dans le menu outils, allez dans références. Parcourez les différentes références et cochez : "Microsoft vbscript regular expression 5.5" "
Ca, c'est fait.
Je n'ai pas l'habitude que tout me tombe tout cuit dans le bec mais pour une fois, si je pouvais avoir un tuyau... J'en fait quoi du Regex
^(([0-9]+(\.|,)([0-9]+\b)?|\.[0-9]))|^([0-9]*)$ ?
En tout cas, merci beaucoup pour votre sollicitude. A vous lire (mais demain, maintenant).
Voici un exemple :
Et la fonction qui va avec (celle qui contient la regex)
Sub exemple() Dim unevaleur As String unevaleur = "13565,45" If test_si_nombre(unevaleur) Then MsgBox "C'est un nombre" Else MsgBox "Ce n'est pas un nombre" End If End Sub
Et la fonction qui va avec (celle qui contient la regex)
Private Function test_si_nombre(ByVal valeuratester) As Boolean 'Dans votre éditeur VBA, dans le menu outils, allez dans références. et cochez : ' ' "Microsoft vbscript regular expression 5.5"" Dim reg As Object Set reg = CreateObject("vbscript.regexp") 'La regex : reg.Pattern = "^(([0-9]+(,)([0-9]+\b)?|\.[0-9]))|^([0-9]*)$" 'Renvoie True ou False en fonction du test test_si_nombre = reg.test(valeuratester) End Function
Bonjour refcemad,
Salutations à Jordane45,
Une autre possibilité avec une fonction de test et un peu de récursivité :
EDIT : oups!!!
Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
Salutations à Jordane45,
Une autre possibilité avec une fonction de test et un peu de récursivité :
Sub TestMasse_() Dim Masse As Single Do While Masse < 10 Masse = F_Masse() Loop MsgBox "masse = " & Masse End Sub Function F_Masse() As Single Dim masseTest 'remplace le . par , masseTest = Replace(InputBox("Ici la Masse :"), ".", ",") If Not IsNumeric(masseTest) Then masseTest = F_Masse() F_Masse = masseTest End Function
EDIT : oups!!!
Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
Si tu ne veux que la virgule, il suffit de retirer le "\.|" qui se trouve au "presque" début de la regex.