Variable single dans inputbox et virgule du pavé numérique
refcemad
Messages postés
43
Statut
Membre
-
pijaku Messages postés 13513 Statut Modérateur -
pijaku Messages postés 13513 Statut Modérateur -
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
- Télévision numérique - Guide
- Pavé numérique bloqué - 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.