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 : utilisezLongpour tout nombre entier (Integerdéborde à 32 767, et une feuille compte 1 048 576 lignes), et utilisezDoublepour les calculs,Currencyou l'arrondi pour l'argent (Doublene peut pas contenir0.1 + 0.2exactement). Tout le reste —String,Boolean,Date— vous le choisissez pour coller à la valeur, et vous gardezVariantpour 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
Integerest un piège etLongdevrait ê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
Doublecorrompt 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.Boolean—True/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 Long —
i 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
