Je pense que tout le monde connais la "poignée de recopie" donnant à l'utilisateur la possibilité de recopier une valeur ou d'incrémenter-décrémenter celle-ci et permettant ainsi la génération rapide de listes de nombres, de dates ou de textes.
Je vous propose un petit topo sur les différents outils qu'Excel nous propose pour réaliser ce type d'actions et une petite macro permettant de dépasser une limitation des valeurs générées par ces outils.
La poignée de recopie : Le classique
La méthode la plus connue et intuitive. Il s'agit du petit carré noir visible dans le coin inférieur droit de la cellule active.
En faisant un cliqué glissé à partir d'elle, dans une des 4 directions (Haut/Bas/Droite/Gauche), on génère de nouvelles valeurs dans les cellules balayées selon un modèle logique.

Principe de fonctionnement
En cas d'un glissé de la poignée :
- Vers les bas ou la droite, la valeur est augmentée de 1 ou passe à l'élément suivant de la liste.
- Vers le haut ou la gauche, la valeur est diminuée de 1 ou passe à l'élément précédent de la liste.
Remarques :
- On peut faire le rapprochement avec les n° de ligne ou de colonne qui varient de manière identique.
- Une cellule d'une ligne ou d'une colonne masquée sera pris en compte et complétés.

La logique par défaut d'Excel entre copie et incrémentation-décrémentation
Chiffres, nombres, textes ne se terminant pas par un chiffre => COPIE

Remarque : Les raccourcis CTRL+ B (vers le Bas) et CTRL+ D (vers la Droite) permettent de recopier la 1ere cellule de la sélection sur les autres cellules de la sélection (mais pas de générer des séries).
Dates, horaires, textes se terminant par un chiffre => INCRÉMENTATION-DÉCRÉMENTATION

Remarques :
- Les horaires s'incrémente par heure.
Jour de la semaine, mois de l'années (en entier ou en abrégé) => INCRÉMENTATION-DÉCRÉMENTATION

Remarques :
- Ces listes incrémentées sont générées à partir de celle mémorisées dans Options>Options avancées>Générales> bouton Modifier les listes personnalisées.

- Il est possible d'apprendre à Excel de nouvelles listes pour générer d'autres séries de valeurs :
(Par exemple : Ain, Aisne, Allier, Alpes-de-Haute-Provence, Hautes-Alpes, Ardèche...)- Via la sélection de Nouvelle liste (1), on peut saisir en zone (2) une liste de valeurs puis la valider par le bouton Ajouter (3).
- Via la zone (4), on sélectionne une plage de cellules d'une colonne ou d'une ligne contenant les valeurs à récupérer puis on les importe avec le bouton Importer (5).
- Ces listes sont liées à Excel et non au classeur (elles seront disponibles pour tous les classeurs sur cet ordinateur mais pas sur un autre ordinateur même en ouvrant le fichier ou elles ont été créées).
- Elles pourront aussi être utilisées pour générer un ordre de tri spécifique dans Excel (comme les noms des départements Français).
Trimestre (en entier ou en abrégé) => INCRÉMENTATION/DÉCRÉMENTATION

Remarque : Ne fonctionne pas pour les semestres et les quadrimestres.
Valeurs ordinales

Intervertir la logique par défaut entre copie et incrémentation-décrémentation
Si Excel copie les valeurs et que l'on veut qu'il en incrémente les valeurs (ou inversement), il est possible d'intervertir son fonctionnement (exemples : on veut 10, 11, 12... ou que des Mars, Mars...).
En agissant proactivement (avant terminer la manipulation de copie/incrémentation-décrémentation)
- Commencer le glisser avec de la poignée de recopie > NE RELACHER PAS LE BOUTON DE LA SOURIS.
- Remarquer la valeur s'affichant dans la bulle d'information nous indiquant le futur résultat.
- Si la valeur affichée dans la bulle ne convient pas, maintenir la touche CTRL du clavier enfoncé et continuer le glisser de la souris > la bulle se met à jour et montre qu'Excel a bien inversé sa logique par défaut.
- Relâcher d'abord le bouton de la souris puis la touche CTRL.
En agissant postérieurement (après la copie/incrémentation-décrémentation)
Il faut le faire juste après avoir fait le glisser en utilisant la balise active apparaissant en bas à droite de la zone glissée (si l'on fait d'autres actions dans Excel, la balise active ne sera plus disponible).
Les balises actives servent à corriger ou ajuster le comportement par défaut d'Excel s'il n’a pas interprété correctement notre intention.
Il suffit de choisir "Copier les cellules" ou "Incrémenter une série" selon le besoin.

En agissant proactivement postérieurement via le menu contextuel 🤪
Solution hybride des 2 précédentes, existante avant l'apparition de l'outil balise active.
- Faire le glisser de la poignée de recopie avec le bouton DROIT de la souris !
- En relâchant le bouton de la souris un menu contextuel apparaît.
- Choisir "Copier les cellules" ou "Incrémenter une série" selon le besoin.

Réalisation de séries plus complexes
Pour les dates
Au lieu de décaler les dates d'un jour, Excel peut faire le décalage sur le mois, l'année ou sur les jours en enlevant les samedis et dimanches.
Pour cela utiliser la balise active ou le menu contextuel.

Pour les Heures : Minutes : Seconde, Excel ne propose que d'incrémenter-décrémenter les heures.
Incrémentation-décrémentation avec un pas différent de 1
Dans ce cas on va sélectionner plusieurs cellules donnant ainsi à Excel un modèle à dupliquer. Utilisable sur les chiffres, nombres, dates et les éléments de liste.
Valeur de 2 en 2

On retire les mercredis

Remarque : Ainsi on va pouvoir utiliser un pas en minutes ou secondes pour un valeur horaire.
L'outil Remplissage instantané : Le petit "nouveau"
Microsoft a intégré cette fonctionnalité dans Excel depuis la version 2016 (Flash Fill en anglais).
Cet outil permet à Excel de reconnaître automatiquement des motifs dans les données de la colonne à gauche et de compléter les cellules en vis à vis (ne fonctionne pas en orientation ligne).
Pratique pour nettoyer, séparer ou combiner des données rapidement sans formule (donc sans mise à jour automatique en cas de modifications des données de départs) !
Principe d'utilisation
Lors de la saisie du modèle permettant à Excel de reconnaitre le motif, Excel parfois, déclenche directement cet outil et propose des valeurs de remplissage que l'on acceptera par la touche ENTRER du clavier, sinon il faudra faire un glisser avec la poignée de recopie puis passer par la balise active ou sélectionner la plage puis chercher l'outil dans le ruban (Accueil>Recopier) ou utiliser le raccourcis clavier CTRL + E (sélectionner la cellule saisie avant).
Exemples
Extraire une partie des caractères
Assembler de parties
Extraire et assembler
Astuce : Il suffit de saisir un exemple (pas forcement la 1ere ligne), sélectionner cette cellule puis utiliser le raccourcis clavier CTRL+E 😮.
L'outil Série : L'ancien outil
Accessible via le ruban Accueil>Recopier (groupe Édition) >Série...

On retrouve ici les possibilités offertes par la poignée de recopie (hors Remplissage instantané) avec quelques options en plus.
Série en :
- Si la série génère une ligne ou une colonne de valeurs.
Type :
- Linéaire : Progression arithmétique. Le fonctionnement classique. On précise la valeur du pas en bas (la raison) de la fenêtre (par exemple +2 à chaque nouvelle valeur).
- Géométrique : Progression géométrique. Solution non disponible avec la poignée de recopie. On précise la valeur du pas (la raison) en bas de la fenêtre (par exemple : x2 à chaque nouvelle valeur comme illustré par l'image).
- Chronologique : Incrémentation selon jours, mois, années ou jours ouvrés selon l'option choisie dans Unité de temps.
- Remplissage auto : Série correspondante à celle généré par la poignée de recopie (Option Valeurs du pas, Unité de temps ignorées).
Valeur du pas : La raison à utiliser.
Dernière valeur : Valeur d’arrêt de la série. Quand la valeur générée par Excel dépasse cette limite, Excel arrête de générer de nouvelles valeurs. On peut ne pas utiliser cette valeur (si on ne connait pas cette limite) mais il faudra alors sélectionner préalablement la plage où sera générer les valeurs (leur nombre dépendra de la taille de la plage).
Tendance : Permet de renvoyer les valeurs correspondantes à celles qui seraient générées par les fonctions.
- TENDANCE : si Type Linéaire (correspondant aux points d'une courbe de type y = mx+b). Même résultat en faisant une recopie à partir de la sélection de 3 cellules contenant des valeurs numériques.
- CROISSANCE : si Type Géométrique (correspondant aux points d'une courbe de type y = bmx).
Une limite infranchissable ?
L'incrémentation-décrémentation des valeurs numériques est limitée en valeurs par la limite d'Excel à manipuler des nombres ayant au maximum 15 chiffres significatifs. Ainsi on plafonne à 1 000 000 000 000 000 et à -1 000 000 000 000 000.
Pour écrire de plus grand nombre, on pourrait penser utiliser l'astuce de les saisir en tant que texte. Cela semble une bonne idée 😰.
Mais là, on est encore plus limité qu'avec les valeurs numériques !
On bute sur la valeur 4 294 967 295 correspondante à 232-1.
Je vous propose donc d'utiliser une macro pour aller au-delà de ces valeurs limites.
Private Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Sub IncrementeValeurs()
' Objectif : Générer une recopie incrémentée-décrémentée pouvant aller au-delà de :
' > ± 1E+15 ( ± 1 000 000 000 000 000) pour les valeurs numériques.
' > 4 294 967 295 pour les valeurs alphanumériques.
' Utilisation : Sélectionner une plage dont la 1ère ligne/colonne contient les valeurs de départ.
' Important : Commencer la sélection à partir des cellules ayant les valeurs de départ.
' Pour une recopie horizontale, maintenir la touche du clavier AltGr (à droite
' de la barre d'espace) enfoncée lors de l'appel de la macro.
' Retour : Valeurs suivant la même logique que la poignée de recopie sauf pour le cas du
' passage en valeur négative pour les valeurs alphanumériques.
' Ex : En faisant un glissé vers le haut out la gauche, on obtient
' A2>A1>A0>A-1>A-2 et non A2>A1>A0>A1>A2.
' Auteur : Arnaud (www.1forme.fr).
' Licence : CC-BY-NC-SA (Vous pouvez diffuser/partager/modifier cette macro dans les
' même conditions, seulement à titre personnel et citant l'auteur/site d'origine.
' MAJ : Conservation des 0 non significatifs de la partie numérique (01/2026)
Dim rgnPlage As Range
Dim rgn As Range
Dim objRegEx As Object
Dim rngCellule As Range
Dim boKeyPressed As Boolean
Dim intPas As Integer
Dim intSigne As Integer
Dim rgDerCell As Range
On Error GoTo erreur
If TypeName(Selection) <> "Range" Then _
MsgBox "Sélectionner une plage avant d'exécuter la macro.", vbExclamation: Exit Sub
Set rgnPlage = Selection
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Pattern = "^(.*?)(\d+)$"
objRegEx.IgnoreCase = True
objRegEx.Global = False
Set rgDerCell = Selection.Cells(Selection.Cells.Count)
'boKeyPressed = CBool(GetAsyncKeyState(vbKeyControl) And &H8000) ' Détecte si Ctrl est enfoncée
boKeyPressed = CBool((GetAsyncKeyState(vbKeyControl) And &H8000) _
And (GetAsyncKeyState(&HA5) And &H8000)) ' Détecte si AltGr est enfoncée
If boKeyPressed Then ' Recopie horizontal
intPas = IIf(rgDerCell.Column > ActiveCell.Column, 1, -1)
For Each rgn In rgnPlage.Rows
Set rngCellule = IIf(intPas = 1, rgn.Cells(1, 1), rgn.Cells(1, rgn.Cells.Count))
intSigne = IIf(rngCellule > 0, 1, -1)
Call IncrementeVecteur(rgn, objRegEx, rngCellule, False, intPas, intSigne)
Next
Else ' Recopie vertical
intPas = IIf(rgDerCell.Row > ActiveCell.Row, 1, -1)
For Each rgn In rgnPlage.Columns
Set rngCellule = IIf(intPas = 1, rgn.Cells(1, 1), rgn.Cells(rgn.Cells.Count, 1))
intSigne = IIf(rngCellule > 0, 1, -1)
Call IncrementeVecteur(rgn, objRegEx, rngCellule, True, intPas, intSigne)
Next
End If
suite:
Set rngCellule = Nothing
Set rgDerCell = Nothing
Set objRegEx = Nothing
Set rgnPlage = Nothing
Exit Sub
erreur:
MsgBox Err.Description & "(" & Err.Number & ")", vbCritical, "Erreur procédure IncrementeValeurs"
End
End Sub
Sub IncrementeVecteur(rgn As Range, objRegEx As Object, rngCellule As Range, _
boVertical, intPas As Integer, intSigne As Integer)
' Objectif : Faire l'incrémentation-décrementation sur une colonne/ligne unique
' Appelée par : IncrementeValeurs
Dim objMatches As Object
Dim strPrefix As String
Dim strSuffixNombre As String
Dim intLenSuffix As Integer ' Longeur de la partie décimale pour conserver les 0 non significatifs
Dim nbCells As Long
Dim i As Long
Dim decValeur As Variant
Dim lgLigCol As Long
On Error GoTo erreur
If Not IsEmpty(rngCellule.Value) Then
If objRegEx.Test(rngCellule.Value) Then
Set objMatches = objRegEx.Execute(rngCellule.Value)
strPrefix = objMatches(0).SubMatches(0)
strPrefix = IIf(strPrefix = "-", "", strPrefix)
strSuffixNombre = objMatches(0).SubMatches(1)
intLenSuffix = Len(strSuffixNombre)
nbCells = rgn.Cells.Count
If boVertical Then
For i = 1 To nbCells - 1
lgLigCol = IIf(intPas = 1, i + 1, nbCells - i)
decValeur = CDec(strSuffixNombre) + i * intPas * intSigne
rgn.Cells(lgLigCol, 1).Value = FormatValue(decValeur * intSigne, strPrefix, intLenSuffix)
Next
Else
For i = 1 To nbCells - 1
lgLigCol = IIf(intPas = 1, i + 1, nbCells - i)
decValeur = CDec(strSuffixNombre) + i * intPas * intSigne
rgn.Cells(1, lgLigCol).Value = FormatValue(decValeur * intSigne, strPrefix, intLenSuffix)
Next
End If
End If
End If
suite:
Set objMatches = Nothing
Exit Sub
erreur:
MsgBox Err.Description & "(" & Err.Number & ")", vbCritical, "Erreur procédure IncrementeVecteur"
End
End Sub
Private Function FormatValue(decValeur As Variant, strPrefix As String, intLenSuffix As Integer) As String
' Objectif : Conversion en texte des nombres dépassant ± 1E+15 dans le cas des
' valeurs numériques (sans préfixe)
' Appelée par : IncrementeVecteur
Dim strValeur As String
strValeur = CStr(decValeur)
strValeur = Right(String(intLenSuffix, "0") & strValeur, intLenSuffix) ' Ajout des 0 non significatifs
If strPrefix = "" And (decValeur > 1E+15 Or decValeur < -1E+15) Then
FormatValue = "'" & strValeur
Else
FormatValue = strPrefix & strValeur
End If
Exit Function
erreur:
MsgBox Err.Description & "(" & Err.Number & ")", vbCritical, "Erreur fonction FormatValue"
End
End Function
Démonstration de l'utilisation de la macro
Merci pour votre attention bienveillante.
