Range et Cells
Presque toutes les macros finissent par lire ou écrire dans une cellule. Range et Cells sont les deux façons de désigner l'endroit exact où agir : l'une avec une adresse, l'autre avec des numéros.
Télécharger la fiche PDF gratuiteSans inscription, mise en page prête à imprimer01Définition
Range désigne une cellule ou une plage par son adresse ("B3", "A1:D10"). Cells désigne une cellule par ses numéros de ligne et de colonne, ce qui la rend idéale dans une boucle.
Range("B3")
Lisible, parfait pour une adresse fixe ou une plage nommée.
Cells(3, 2)
Ligne 3, colonne 2 : la même cellule B3, mais les numéros peuvent être des variables.
02Désigner des cellules
| Écriture | Désigne |
|---|---|
| Range("A1") | la cellule A1 |
| Range("A1:D10") | la plage A1 à D10 |
| Range("TauxTVA") | la plage nommée TauxTVA |
| Cells(5, 3) | la cellule C5 (ligne 5, colonne 3) |
| Cells(5, "C") | la même cellule, colonne en lettre |
| Range(Cells(2, 1), Cells(10, 4)) | la plage A2:D10 |
| Rows(4) , Columns("B") | une ligne ou une colonne entière |
03Lire et écrire
Range("B2").Value = 150 ' écrire une valeur total = Range("B10").Value ' lire une valeur Range("B10").Formula = "=SUM(B2:B9)" ' formule en anglais, séparateur virgule Range("B11").FormulaLocal = "=MOYENNE(B2:B9)" ' formule en français Range("A2:F500").ClearContents ' efface les valeurs, garde la mise en forme Range("A2:F500").Clear ' efface tout, mise en forme comprise
04Se déplacer avec Offset et Resize
Offset(lignes, colonnes)décale une référence :Range("B2").Offset(1, 0)désigne B3,Offset(0, 2)désigne D2.Resize(lignes, colonnes)change la taille :Range("A2").Resize(10, 3)désigne A2:C11.
Dim c As Range For Each c In Range("A2:A20") c.Offset(0, 1).Value = Len(c.Value) ' nombre de caractères en colonne B Next c
05Inutile de sélectionner
L'enregistreur écrit Range("A1").Select puis Selection.Value = .... En VBA écrit à la main, on agit directement : Range("A1").Value = .... Le code est plus court, plus rapide, et ne dépend plus de la cellule sélectionnée.
06Pièges à éviter
Range("A1") sans préciser de feuille désigne la feuille active au moment de l'exécution. Qualifiez vos références : Worksheets("Ventes").Range("A1").
Worksheets("Ventes").Range(Cells(1, 1), Cells(5, 2)) plante si Ventes n'est pas active, car les Cells désignent la feuille active : c'est l'erreur 1004. Écrivez ws.Range(ws.Cells(1, 1), ws.Cells(5, 2)).
.Formula = "=SOMME(A1:A5)" provoque une erreur. Avec .Formula, on écrit les fonctions en anglais et on sépare par des virgules ; avec .FormulaLocal, en français avec des points-virgules.
07Questions fréquentes
Quelle est la différence entre Range et Cells en VBA ?
Range désigne une cellule ou une plage par son adresse ("B3", "A1:D10"). Cells désigne une cellule par ses numéros de ligne et de colonne, ce qui la rend idéale dans une boucle.
Quel est le piège le plus fréquent avec Range et Cells ?
La feuille active par défaut. Range("A1") sans préciser de feuille désigne la feuille active au moment de l'exécution. Qualifiez vos références : Worksheets("Ventes").Range("A1").
La fiche « Range et Cells » est-elle gratuite ?
Oui. La fiche est en accès libre et gratuit, sans inscription : vous pouvez la lire en ligne et télécharger sa version PDF. Elle fait partie du cours VBA gratuit de mesetudesdecas.fr, qui compte 21 fiches.
Passez de la fiche à la mise en situation
Les études de cas mesetudesdecas.fr placent vos apprenants face à un vrai besoin d'entreprise. L'étude de cas XL-05 fait automatiser un devis commercial de bout en bout, macros comprises, avec énoncé, corrigé et pas-à-pas du formateur.
Découvrir l'étude de cas XL-05Toutes les fiches du cours VBA gratuit
Voir aussi le cours gratuit sur les formules Excel
Fiche V1.2 | Dernière mise à jour : 29/10/2026 | Clément Delobel, formateur Excel et VBA