Si vous avez besoin de vérifier en VBA si une expression (notamment une chaîne de caractères – String
) représente un nombre, vous pouvez utiliser la fonction IsNumeric.
Vérification des données en amont: Indispensable pour éviter des problèmes
Utiliser cette vérification est une bonne idée surtout si vous devez travailler avec le résultat d'une saisie manuelle par l'utilisateur (par exemple via les formulaires ou via un InputBox). Elle sert également à vérifier les valeurs avant leur utilisation dans un calcul – cela prévient les blocages de vos macros causés par les types de données incompatibles (par exemple l'utilisation d'un texte dans un calcul mathématique).
De cette manière, vous pouvez gérer efficacement le problème avant même qu'il ne se produise.
Fonction VBA: IsNumeric
Cette fonction retourne la valeur Vrai
ou Faux
(True
ou False
) selon si l'expression peut être interprétée comme un nombre.
L'avantage de cette fonction VBA est que d'éventuels espaces (par ex. " 125 " ) ou des zéros de tête (par ex. "00015") ne sont pas pris en compte. Vous ne devez donc pas nécessairement "nettoyer" vos données au préalable.
L'autre avantage est que cette fonction gère automatiquement les formats régionaux. Un chiffre en format "européen" ("10,15" ou "1.499,99") sera reconnu tout comme un chiffre en format "anglo-saxon" ("10.15" ou "1,499.99"). Et cela peut grandement faciliter la vie!
Attention, une expression vide (expression = ""
) ne sera pas considérée comme un nombre et va retourner la valeur False
.
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: Comment utiliser la fonction IsNumeric
Et maintenant un exemple pratique de l'utilisation de la fonction IsNumeric dans une macro…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Sub VerifierNombres() ' par Excel-Malin.com - https://excel-malin.com On Error GoTo Erreur Dim MonNombre As Variant 'choisir l'expression à tester MonNombre = "123.45" 'MonNombre = "007" 'MonNombre = "1A45" 'procéder au test et indiquer des actions à effectuer If IsNumeric(MonNombre) = True Then 'votre code si expression est numérique MsgBox "L'expression est un nombre" Else 'votre code si expression n'est pas numérique MsgBox "L'expression n'est pas un nombre" End If Exit Sub Erreur: MsgBox "Une erreur s'est produite..." End Sub |
REMARQUE IMPORTANTE:
Cette fonction IsNumeric (en VBA) ne doit pas être confondue avec la fonction Excel ESTNUM (utilisée directement dans les Classeurs/Feuilles) – par ex. =ESTNUM(B12)
– car celle-ci se comporte différemment. Notamment elle tient compte des paramètres régionaux.
Pour illustration, dans un Excel installé en français, pour l'expression "1000.9", la fonction VBA IsNumeric retournera Vrai
, tandis que la fonction Excel ESTNUM retournera Faux
!
Pour aller plus loin en VBA…
Voici quelques autres articles qui pourraient vous être utiles lors de votre programmation en VBA…
- Excel-Malin.com met à votre disposition la liste complète des fonctions VBA
- Comment facilement utiliser RECHECHEV en VBA
- Envoyer un email avec VBA à partir d'Excel
- Comment calculer facilement la 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 à être utilisés
2 commentaires sur “VBA: Comment vérifier si une chaîne de caractères représente un nombre?”
"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