TL;DR —
source.AutoFill Destination, Typeprolonge un motif ; ce n'est pas une copie. Deux règles vous sauvent : laDestinationdoit inclure la source —Range("A1").AutoFill Destination:=Range("A1:A10")(A1 est à l'intérieur de A1:A10) ; exclure l'amorce déclenche l'erreur d'exécution 1004. Et leTypedécide si vous obtenez une série (xlFillSeries→ 1, 2, 3) ou une copie (xlFillCopy→ 1, 1, 1) ; le défautxlFillDefaultdevine. Si vous voulez seulement copier une cellule vers le bas d'une colonne,Range("B2:B1000").FillDownest plus simple que de lutter contre AutoFill.
' Serie : amorcez la ou les premieres valeurs, puis prolongez
Range("A1").Value = 1
Range("A1").AutoFill Destination:=Range("A1:A10"), Type:=xlFillSeries ' 1..10
' Formule vers le bas d'une colonne : les refs relatives s'ajustent par ligne
Range("B2").Formula = "=A2*1.2"
Range("B2").AutoFill Destination:=Range("B2:B1000")
' Copie simplement la cellule du haut vers le bas - sans gymnastique de Destination
Range("B2:B1000").FillDown
AutoFill est la version code du glissement de la poignée de recopie, et on s'attend à ce qu'il se
comporte comme une copie — d'où la surprise quand il transforme 1 en 1, 2, 3, 4, et le désarroi quand
un extrait déclenche 1004 sans raison apparente. Les deux prennent sens dès qu'on tient l'idée centrale :
AutoFill prolonge un motif à partir d'une amorce sur une destination qui doit contenir cette amorce.
La copie répète ; AutoFill génère. Réglez correctement la destination et le type, et c'est la façon la
plus propre de poser une série ou de pousser une formule vers le bas d'une colonne.
Ce que vous allez apprendre
- Le modèle mental — AutoFill prolonge un motif, il ne copie pas
- La règle de destination — la source doit être à l'intérieur de la destination, sinon 1004
Type— série contre copie, et pourquoi la supposition par défaut n'est pas fiable- Remplir une formule vers le bas pour que ses références s'ajustent ligne par ligne
- Quand
FillDown/FillRight(ou un tableau) l'emportent sur AutoFill
Le modèle mental : AutoFill prolonge un motif
La copie prend une valeur et la répète. AutoFill prend une amorce — la première cellule ou les deux
premières — et prolonge le motif qu'il détecte : un nombre devient une suite, 1, 2 devient une série
arithmétique, Jan devient les mois, une date devient des jours consécutifs. C'est pourquoi il existe
indépendamment de Copy :
Range("A1").Value = 5
Range("A1").AutoFill Destination:=Range("A1:A5"), Type:=xlFillCopy ' 5, 5, 5, 5, 5
Range("C1").Value = 5
Range("C1").AutoFill Destination:=Range("C1:C5"), Type:=xlFillSeries ' 5, 6, 7, 8, 9
Même amorce, même destination — un Type différent, un résultat complètement différent. Dès que vous
voyez AutoFill comme un générateur qui lit une amorce et produit un motif, les deux règles ci-dessous
cessent d'être arbitraires : l'amorce doit faire partie de ce que vous remplissez, et vous devez lui dire
quel motif vous voulez.
La règle de destination : la source doit être à l'intérieur de la destination
Voici le bug d'AutoFill qui bloque tout débutant : la plage Destination doit contenir la plage
source. La source est l'amorce, et l'amorce est la première partie du remplissage.
' FAUX - la destination exclut l'amorce -> erreur d'execution 1004
Range("A1").AutoFill Destination:=Range("A2:A10")
' JUSTE - la destination inclut A1, l'amorce
Range("A1").AutoFill Destination:=Range("A1:A10")
Voyez-le comme « remplir A1 jusqu'à A10 », et non « remplir A1 dans A2:A10 ». La ligne d'amorce est là
où le motif commence, elle vit donc en haut de la destination. Les amorces multi-cellules fonctionnent
pareil — amorcez A1:A2 avec 1 et 2, puis AutoFill Destination:=Range("A1:A100") et Excel lit le
pas à partir des deux cellules d'amorce. Presque toutes les questions du genre « AutoFill déclenche
1004 » sont une destination qui a oublié d'inclure la source.
Type : série contre copie, et le défaut peu fiable
Omettez Type et vous obtenez xlFillDefault, qui laisse Excel deviner à partir de l'amorce — un
nombre seul se copie, 1, 2 fait une série, Mon fait des jours de semaine. Pratique dans l'interface,
risqué dans le code, car votre intention n'est pas écrite et la supposition peut basculer. Nommez le
type :
| Ce que vous voulez | Type |
|---|---|
| 1, 2, 3, … | xlFillSeries |
| 1, 1, 1, … | xlFillCopy |
| Mon, Tue, Wed (sauter les week-ends) | xlFillWeekdays |
| Jours / mois / années consécutifs | xlFillDays / xlFillMonths / xlFillYears |
| Mise en forme uniquement | xlFillFormats |
| Valeurs sans mise en forme | xlFillValues |
Range("A1").Value = Date
Range("A1").AutoFill Destination:=Range("A1:A31"), Type:=xlFillMonths ' mois par mois
La règle est simple : si le motif compte, énoncez-le. Vous fier à xlFillDefault, c'est ainsi qu'on
obtient un 1, 1, 1 copié là où on voulait 1, 2, 3, ou une série incrémentée là où on voulait une
répétition.
Remplir une formule vers le bas d'une colonne
L'AutoFill le plus utile au quotidien, c'est pousser une formule vers le bas d'une colonne. Remplissez une formule et ses références relatives s'ajustent ligne par ligne, exactement comme un glissement de la poignée de recopie :
Range("B2").Formula = "=A2*C2"
Range("B2").AutoFill Destination:=Range("B2:B1000") ' B3 devient =A3*C3, B4 =A4*C4, ...
xlFillDefault gère cela correctement pour les formules, vous avez donc rarement besoin de préciser
Type ici. C'est l'idiome « appliquer cette formule à toute la colonne », et c'est pourquoi AutoFill
mérite sa place même si FillDown existe — AutoFill peut amorcer et prolonger une vraie série, ce
qu'une simple copie ne peut pas. Si vous préférez écrire la formule une fois et la laisser s'ajuster sans
le modèle de la poignée de recopie, .FormulaR1C1 fait le même travail ; voir
VBA Formula.
Quand FillDown, FillRight ou un tableau l'emportent sur AutoFill
AutoFill est un moteur de motifs. Quand vous ne générez pas de motif — vous voulez juste répéter la cellule du haut vers le bas ou en travers — les outils plus simples sont plus clairs et évitent le cérémonial de la destination-qui-inclut-la-source :
Range("B2:B1000").FillDown ' copie B2 vers le bas sur toute la plage
Range("B2:Z2").FillRight ' copie B2 en travers sur toute la ligne
FillDown et FillRight ne prennent ni Type ni Destination séparée — la plage sur laquelle vous les
appelez est le remplissage, la cellule du haut servant d'amorce. Pour une série purement numérique sans
formules, écrire un tableau Variant dans la plage en une seule affectation est
encore plus rapide et évite complètement l'opération sur la feuille. Ma règle : recourez à AutoFill
uniquement quand vous avez besoin du moteur de motifs d'Excel — une vraie série, des jours de semaine,
des listes personnalisées — et utilisez FillDown / FillRight ou un tableau pour une copie ordinaire.
Pour les gros remplissages, désactivez d'abord le recalcul et le rafraîchissement de l'écran ; voir
VBA Calculation et VBA ScreenUpdating.
Comment ExcelMaster aide
Les erreurs d'AutoFill qui font perdre du temps sont prévisibles : la destination qui exclut l'amorce et
déclenche 1004, le Type manquant qui a copié quand vous vouliez une série, et la lutte avec AutoFill
pour un travail qui n'était qu'un FillDown d'une ligne. Aucune n'est difficile une fois qu'on la
connaît — elles sont juste faciles à rater de mémoire.
ExcelMaster choisit le bon outil
selon la forme du travail. Demandez-lui de « numéroter ces lignes de 1 à 500 » et il amorce et prolonge
une série avec la destination incluant l'amorce ; demandez-lui de « copier cette formule vers le bas
jusqu'à la dernière ligne » et il utilise FillDown sur la used range plutôt qu'une hauteur codée en dur
et fragile. Il énonce le Type pour que l'intention soit sur la page, et il bascule vers une simple
écriture de tableau quand vous n'avez besoin que des valeurs. Vous décrivez le motif ; il le pose sans le
1004.
Questions fréquentes
Comment utiliser AutoFill en VBA ?
Appelez AutoFill sur la plage d'amorce et passez une Destination qui inclut l'amorce :
Range("A1").AutoFill Destination:=Range("A1:A10"), Type:=xlFillSeries. L'amorce est la première valeur
ou les deux premières, la Destination est toute la plage à remplir (amorce incluse), et Type indique
s'il faut prolonger une série ou copier. Définissez d'abord la cellule d'amorce, puis appelez AutoFill.
Pourquoi ai-je l'erreur d'exécution 1004 avec AutoFill ?
Presque toujours parce que la Destination ne contient pas la source.
Range("A1").AutoFill Destination:=Range("A2:A10") exclut l'amorce A1 et déclenche 1004 ; utilisez plutôt
Range("A1:A10") pour que l'amorce se place en haut de la destination. Lisez-le comme « remplir A1
jusqu'à A10 », et non « remplir A1 dans A2:A10 ».
Quelle est la différence entre AutoFill et FillDown en VBA ?
FillDown copie la cellule du haut d'une plage vers le bas sur toute la plage — pas de Type, pas de
Destination séparée, juste Range("B2:B1000").FillDown. AutoFill prolonge un motif à partir d'une
amorce et a besoin d'une Destination qui inclut l'amorce. Utilisez FillDown (ou FillRight) pour une
copie ordinaire, et AutoFill quand vous avez besoin d'une vraie série comme 1, 2, 3 ou les mois.
Comment faire un AutoFill d'une formule vers le bas d'une colonne en VBA ?
Écrivez la formule dans la cellule d'amorce, puis faites un AutoFill vers le bas :
Range("B2").Formula = "=A2*C2" suivi de Range("B2").AutoFill Destination:=Range("B2:B1000"). Les
références relatives s'ajustent ligne par ligne, donc B3 devient =A3*C3. Vous pouvez omettre Type pour
les formules. Range("B2:B1000").FillDown fait la même chose plus simplement.
Comment remplir une série de dates ou de mois avec AutoFill ?
Amorcez la première date et passez un Type de date : Range("A1").Value = Date puis
Range("A1").AutoFill Destination:=Range("A1:A31"), Type:=xlFillDays pour des jours consécutifs, ou
xlFillMonths / xlFillWeekdays / xlFillYears pour ces pas. Nommer le type évite de compter sur
xlFillDefault pour deviner le motif à partir de l'amorce.
Testé dans
Testé dans : Excel 365 (Windows 11), VBA 7.1 — vérifié le 01/09/2026.
Guides connexes : VBA Cell Value · VBA Formula · VBA Copy Paste · VBA Range · VBA ScreenUpdating
