🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA Data Types dans Excel — String, Long, Double, Variant (et la bonne boîte pour chaque valeur)

|

VBA Data Types dans Excel — String, Long, Double, Variant (et la bonne boîte pour chaque valeur)

TL;DR — Un type de données, c'est la forme et la taille de la boîte d'une variable. Choisissez-la trop petite et la valeur déborde ; optez pour la boîte fourre-tout paresseuse (Variant) et vous le payez en vitesse et en bugs cachés. Deux règles couvrent 90 % du code réel : utilisez Long pour tout nombre entier (Integer déborde à 32 767, et une feuille compte 1 048 576 lignes), et utilisez Double pour les calculs, Currency ou l'arrondi pour l'argent (Double ne peut pas contenir 0.1 + 0.2 exactement). Tout le reste — String, Boolean, Date — vous le choisissez pour coller à la valeur, et vous gardez Variant pour les rares cas qui en ont vraiment besoin.

Dim rowCount As Long      ' nombres entiers — TOUJOURS Long, jamais Integer
Dim price    As Double    ' mesures et calculs
Dim total    As Currency  ' argent — exact à 4 décimales
Dim name     As String    ' texte
Dim isPaid   As Boolean   ' True / False
Dim dueDate  As Date      ' une date/heure

Choisir un type ressemble à une formalité, mais c'est en réalité une décision sur les modes de défaillance auxquels vous vous exposez. Le mauvais type ne provoque pas toujours d'erreur — parfois il donne juste, en silence, un mauvais nombre. Ce guide s'organise autour des pièges, car c'est ce qui détermine vraiment quelle boîte choisir.

Ce que vous allez apprendre

  • Pourquoi Integer est un piège et Long devrait être votre choix par défaut pour les nombres entiers
  • Ce qu'est vraiment Variant, et les rares cas où c'est le bon choix
  • Pourquoi Double corrompt l'argent et par quoi le remplacer
  • Comment lire les deux erreurs de type : Dépassement de capacité (6) et Incompatibilité de type (13)
  • Une règle en une ligne pour choisir un type en cas de doute

Le modèle mental : le type est la forme de la boîte

Si une variable est une boîte, le type en est la forme et la capacité. Long est une boîte conçue pour les nombres entiers jusqu'à environ deux milliards. String s'étire pour épouser le texte. Boolean est une boîte avec exactement deux états possibles. Double contient des nombres fractionnaires, mais sous forme d'approximation binaire. Variant est une boîte caméléon qui se moule à tout ce que vous y déposez.

Chaque type est un compromis. Un type précis et serré attrape les erreurs tôt et s'exécute vite ; un type lâche (Variant) accepte tout et reporte l'erreur à plus tard, quelque part de plus difficile à trouver. Ainsi, « quel type ? » est la même question que « qu'est-ce que j'accepte de voir mal tourner ? ».

La règle qui évite le Dépassement de capacité : utilisez Long, jamais Integer

VBA possède deux types de nombres entiers, et l'un d'eux est une relique. Integer est en 16 bits : son plafond est 32 767. Long est en 32 bits : il dépasse deux milliards. Dès qu'on demande à un Integer de contenir 32 768, VBA lève l'erreur « Dépassement de capacité » (erreur 6) et s'arrête.

La victime classique, c'est un compteur de lignes :

' FRAGILE — déborde dès que la feuille dépasse 32,767 lignes
Dim r As Integer
For r = 1 To lastRow          ' erreur 6 à la ligne 32,768
    ' ...
Next r

' CORRECT — Long gère les 1,048,576 lignes
Dim r As Long
For r = 1 To lastRow
    ' ...
Next r

Une feuille moderne compte 1 048 576 lignes — trente-deux fois la limite d'Integer. Toute variable qui compte des lignes, contient un numéro .Row ou accumule une grande somme doit être un Long. Et voici le clou : sur le matériel d'aujourd'hui, Integer n'apporte aucun gain de vitesse — VBA le convertit de toute façon en valeur 32 bits en interne. La règle est donc sans inconvénient : utilisez Long pour tout nombre entier et oubliez qu'Integer existe.

La règle sur Variant : un choix délibéré, jamais un défaut

Toute variable que vous déclarez sans type — Dim x — est un Variant, tout comme chaque variable non déclarée. Un Variant accueille n'importe quoi : un nombre maintenant, du texte plus tard, un tableau, un objet. Cela paraît pratique, et c'est pourquoi les débutants s'y appuient. C'est aussi pourquoi leurs bugs se cachent.

Les coûts sont réels. Un Variant consomme plus de mémoire, s'exécute plus lentement et — surtout — n'attrape pas les erreurs de type. Un nombre qui arrive sous forme de texte reste du texte à l'intérieur d'un Variant et fait échouer en silence un calcul ultérieur, là où un Long aurait provoqué une erreur immédiate, à l'endroit même de la faute.

Mais Variant a un usage vraiment excellent, et il vaut la peine d'être connu parce qu'il est rapide : charger un Range entier en mémoire en un seul coup.

' LE seul usage génial de Variant : charger une plage dans un tableau 2D d'un coup
Dim data As Variant
data = ThisWorkbook.Worksheets("Data").Range("A1:C1000").Value

Dim i As Long
For i = 1 To UBound(data, 1)
    data(i, 2) = data(i, 2) * 1.1     ' on travaille en mémoire — aucun aller-retour par cellule
Next i

Range("A1:C1000").Value = data        ' on réécrit tout d'un seul coup

Ce schéma est radicalement plus rapide que de toucher les cellules une par une, et il exige un Variant parce qu'Excel vous remet un tableau de type Variant. Utilisez Variant ici, et pour des valeurs réellement hétérogènes. Partout ailleurs, déclarez le vrai type.

La règle sur l'argent : Double ment sur le dernier centime

Double est un nombre à virgule flottante binaire : il ne peut donc pas représenter exactement chaque décimale — le résultat célèbre, c'est que 0.1 + 0.2 ne fait pas exactement 0.3. Pour un graphique ou un calcul de physique, c'est invisible. Pour de l'argent, ces minuscules erreurs s'accumulent et vos totaux dérivent d'un centime — précisément le genre de chose qu'un auditeur remarque.

Dim a As Double
a = 0.1 + 0.2
Debug.Print (a = 0.3)         ' -> False   (a vaut 0.30000000000000004)

Dim m As Currency
m = 0.1 + 0.2
Debug.Print (m = 0.3)         ' -> True    (Currency est exact à 4 décimales)

Utilisez Currency pour l'argent — c'est un type à virgule fixe, exact à quatre décimales, et conçu exactement pour cela. Si vous devez employer Double (par exemple si vous avez besoin de plus de quatre décimales), arrondissez délibérément avec Round() ou Format() avant de comparer ou de stocker. Ne testez jamais l'égalité exacte de deux valeurs Double ; comparez plutôt à une tolérance près.

Petit tour des types du quotidien

  • String — du texte. De longueur variable par défaut ; vous avez rarement besoin d'une longueur fixe.
  • BooleanTrue / False. Parfait pour les drapeaux (isPaid, found).
  • Date — une date et/ou une heure. En coulisses, c'est un nombre (le même numéro de série qu'utilise Excel), et c'est pourquoi vous pouvez faire de l'arithmétique de dates.
  • Long — votre nombre entier par défaut, comme vu plus haut.
  • Double — votre nombre fractionnaire par défaut pour les calculs et les mesures.
  • Currency — l'argent.
  • Variant — usage délibéré uniquement.

Un dernier piège a sa place ici : Dim i, j As Long ne fait de j qu'un Longi est un Variant. Chaque variable a besoin de son propre As Type. Cette mécanique de déclaration est traitée en détail dans VBA Dim.

Comment ExcelMaster aide

Les erreurs de type — un dépassement de capacité sur une grande feuille, un Double qui dérive d'un centime, un Variant qui masque un bug texte-contre- nombre — sont du genre à combustion lente : la macro tourne, et la mauvaise réponse surgit plus loin dans la chaîne. Bien choisir ses types relève d'une vraie discipline d'ingénierie, et c'est une discipline à répéter sur chaque macro.

ExcelMaster prend la tâche en langage courant — « totalise la colonne D en monétaire, compte les lignes, signale tout ce qui dépasse le budget » — et gère les choix de type à votre place : Long pour les comptages, arithmétique exacte pour l'argent, aucun dépassement silencieux sur une feuille d'un million de lignes. Vous continuez d'écrire des macros typées là où vous voulez un contrôle fin ; pour le travail quotidien, vous décrivez le résultat et évitez la catégorie de bugs que les types sont censés prévenir.

Questions fréquentes

Quelle est la différence entre Integer et Long en VBA ?

Integer est un nombre entier 16 bits plafonné à 32 767 ; Long est en 32 bits et dépasse deux milliards. Comme une feuille compte 1 048 576 lignes et qu'Integer n'offre aucun avantage de vitesse sur Excel moderne, vous devriez utiliser Long pour tout nombre entier et éviter complètement Integer. Dépasser la limite d'Integer déclenche « Dépassement de capacité » (erreur 6).

Faut-il utiliser Variant en VBA ?

Seulement de manière délibérée. Variant accueille n'importe quelle valeur, mais il consomme plus de mémoire, s'exécute plus lentement et cache les bugs de type (un nombre stocké comme texte ne provoquera d'erreur que plus tard). Son unique usage excellent, c'est de charger un Range entier dans un tableau 2D (data = Range("A1:C1000").Value), ce qui est très rapide. Partout ailleurs, déclarez le type précis.

Quel type de données utiliser pour l'argent en VBA ?

Utilisez Currency. C'est un type à virgule fixe, exact à quatre décimales, qui évite ainsi la dérive d'arrondi de Double (incapable de stocker 0.1 + 0.2 exactement). Si vous employez Double pour l'argent, arrondissez explicitement avec Round() avant de comparer ou de stocker, et ne testez jamais l'égalité exacte de deux valeurs Double.

Quel est le type de données par défaut en VBA ?

Variant. Toute variable déclarée sans As Type — ou utilisée sans être déclarée du tout — est un Variant. C'est pratique mais source de bugs, et c'est pourquoi Option Explicit associé à des types explicites est la discipline recommandée.

Pourquoi ai-je une « Incompatibilité de type » (erreur 13) ?

Vous avez affecté une valeur qui n'entre pas dans le type de la variable — par exemple mettre le texte "abc" dans un Long, ou une cellule contenant une valeur d'erreur dans un Double. Vérifiez ce que contient réellement la cellule ou la variable (le texte d'apparence numérique est un coupable fréquent) et convertissez-le explicitement avec CLng, CDbl ou CStr avant l'affectation.

Testé dans

Testé dans : Excel 365 (Windows 11), VBA 7.1 — dernière vérification le 31/07/2026.

Guides associés : VBA Dim · VBA Const · VBA CStr · VBA Array · VBA For Loop