Besoin de tester si une valeur en VBA représente un nombre ? La fonction IsNumeric est là pour ça. Simple et efficace, elle permet de sécuriser vos macros et d'éviter les erreurs quand l'utilisateur saisit du texte ou un format inattendu.
Sommaire
Pourquoi vérifier les données en VBA ?
Contrôler les données en amont est une bonne habitude. Cela évite des bugs du type "Type mismatch" (incompatibilité de type) quand vous tentez d'utiliser un texte dans un calcul. Par exemple : une saisie via un InputBox ou un champ de formulaire peut contenir n'importe quoi. IsNumeric vous permet de filtrer immédiatement.
La fonction VBA IsNumeric
Cette fonction renvoie True
(Vrai) si l'expression peut être interprétée comme un nombre, et False
sinon. Elle est souple :
- les espaces autour du nombre (
" 125 "
) sont tolérés ; - les zéros de tête (
"00015"
) ne posent pas de souci ; - les formats régionaux (français
1 499,99
/ anglais1,499.99
) sont pris en compte automatiquement.
Attention : une chaîne vide (""
) renverra False
. Et les dates sont aussi considérées comme numériques en VBA, ce qui peut surprendre.
Exemples des résultats pour différentes vérifications des expressions potentiellement numériques
Et voici quelques exemples pour voir ce que la fonction IsNumeric peut faire pour vous en pratique…
- "123" =>
x = IsNumeric("123")
=> x = True - "-123" =>
x = IsNumeric("-123")
=> x = True - "- 123" =>
x = IsNumeric("- 123")
=> x = True - "1 2" =>
x = IsNumeric("1 2")
=> x = False - " 123 " =>
x = IsNumeric(" 123 ")
=> x = True - "00015" =>
x = IsNumeric("00015")
=> x = True - "1,99" =>
x = IsNumeric("1,99")
=> x = True - "1.99" =>
x = IsNumeric("1.99")
=> x = True - "1.000,99" =>
x = IsNumeric("1.000,99")
=> x = True - "1,000,99" =>
x = IsNumeric("1,000,99")
=> x = False - "1,000.99" =>
x = IsNumeric("1,000.99")
=> x = True - "A19" =>
x = IsNumeric("A19")
=> x = False - "test" =>
x = IsNumeric("test")
=> x = False - "" =>
x = IsNumeric("")
=> x = False
Code VBA : utilisation pratique
Un petit exemple d’utilisation dans une macro :
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub VerifierNombres() ' par Excel-Malin.com - https://excel-malin.com Dim MonNombre As Variant MonNombre = InputBox("Entrez une valeur à tester :") If IsNumeric(MonNombre) Then MsgBox "C'est un nombre valide !" Else MsgBox "Ce n'est PAS un nombre." End If End Sub |
Attention : IsNumeric vs. ESTNUM (Excel)
Ne confondez pas la fonction VBA IsNumeric avec la fonction Excel ESTNUM. Elles n’ont pas le même comportement. Exemple : dans Excel installé en français, =ESTNUM("1000.9")
renvoie Faux
, alors que IsNumeric("1000.9")
en VBA renvoie Vrai
.
Pour aller plus loin en VBA…
Et pour terminer, voici quelques autres articles qui pourraient vous être utiles lors de votre programmation en VBA…
- Liste complète des fonctions VBA
- Utiliser RECHERCHEV en VBA
- Envoyer un email avec VBA
- Somme d'une plage de cellules en VBA
- Cours VBA gratuit en ligne : "VBA droit au but !"
- Codes sources VBA en français, prêts à l'emploi
- Les informations sur IsNumeric sur le site de Microsoft
2 commentaires sur “Vérifier si une valeur est numérique en VBA (fonction IsNumeric)”
"1 2" => x = IsNumeric("1 2") => x = False
Pas chez moi.
J'ai office 2010 et c'est mon problème car Isnumeric considère que c'est un nombre (il ignore les espaces) !
Même avec "1 20 30", VBA interprête comme un nombre et il convertit en 12030 quand on le met dans un Integer
Bonjour Jean-Marie,
en effet c'est très étonnant! Je viens de ré-vérifier chez moi et peu importe la version de l'Office (2010, 2013, 2016), je n'ai pas ce comportement.
Sur Internet, j'ai trouvé plusieurs commentaires disant qu'en effet, cette fonction n'est pas toujours fiable.
Il faudrait alors songer à une solution de secours mais cela dépend de vos besoins. Si ce sont seulement les "espaces" qui vous posent problème, vous pourriez essayer quelque chose comme:
x = IsNumeric(Replace("1 20 30", " ", "x"))
Ainsi, cela ne change pas le fonctionnement de la procèdure et cela donnera le résultat correct…
J'espère que cela vous aide.
Bien à vous, Martin