VBA : convertir une chaîne en nombre (sans mauvaises surprises)

VBA: convertir une chaîne en nombre

Vous avez une valeur saisie par l'utilisateur (ou importée) et vous devez la convertir en nombre en VBA ? Très bien. Mais entre CInt, CLng, CDbl, CSng et Val, on s'y perd vite… Voici mon mémo pratique, avec exemples concrets et les pièges à éviter.

Avant tout : vérifier que la valeur est bien numérique

Première étape, toute simple : testez la valeur avec IsNumeric. Ça évite l'erreur "Type mismatch" au moment de la conversion.

Les fonctions de conversion en VBA (et quand les utiliser)

  • CIntInteger (entier court, de -32 768 à 32 767). Arrondit à l'entier le plus proche.
  • CLngLong (entier long). Arrondit aussi.
  • CDblDouble (virgule flottante double précision). Conserve les décimales.
  • CSngSingle (moins de précision que Double).
  • Val → lit le nombre au début de la chaîne, ignore le reste (s’arrête au premier caractère "non numérique").

Rappel important : CInt et CLng arrondissent (0,5 → 1). Si vous voulez simplement "couper" les décimales, regardez Fix (tronque vers 0) ou Int (plancher).

Exemples rapides (à copier-coller)

Paramètres régionaux : virgule, point & co.

Sur un Excel FR, CDbl comprendra naturellement "1 234,56". Val, lui, est plus "brut" : il s'attend plutôt à un . comme séparateur décimal, et s'arrête à la ,. C’est pour ça que l'on voit souvent :

Mon conseil : si vous travaillez avec une version locale (Excel FR) et que vos données viennent d'un formulaire Excel, utilisez CDbl après IsNumeric. Si les données viennent de sources mixtes (CSV, Web, copier/coller), normalisez la chaîne puis convertissez la.

Dépassements et erreurs : les vrais cas qui fâchent

  • Overflow : CInt/CLng renvoient une erreur si la valeur dépasse le type. Passez en Double (CDbl) si vous n’êtes pas sûr.
  • Chaîne vide : traitez "" à part (voir le test plus haut).
  • Espaces, symboles : CDbl ne pardonne pas "1 234 €" (donc résultat = FAUX). Val lira "1234" (et s'arrêtera donc à la virgule).

Exemple de code : conversion « sûre »

Fix, Int : couper au lieu d'arrondir

FAQ - Conversions en VBA

Je convertis “1,23” en Val → j’obtiens 1, pas 1,23. Est-ce normal ?
Oui. Val attend un point comme séparateur décimal et s’arrête à la virgule. Remplacez la virgule par un point avant l’appel, ou utilisez CDbl si vos paramètres régionaux sont FR.

Je perds les décimales avec CInt/CLng, pourquoi ?
Parce que ces fonctions arrondissent à l’entier. Pour garder les décimales, utilisez CDbl (ou CSng).

Que faire si la valeur dépasse la capacité d’un Integer/Long ?
Utilisez CLng plutôt que CInt, et à défaut passez en CDbl. En cas de doute, contrôlez avec IsNumeric et capturez l’erreur avec On Error.

Pour aller plus loin en VBA

Avant de se quitter, voici quelques articles qui pourraient encore vous être utiles:

ript"> jQuery(document).ready(function($) { $.post('https://excel-malin.com/wp-admin/admin-ajax.php', {action: 'wpt_view_count', id: '12054'}); });

Laissez un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *