CathyAstuce

VBA

GEMCCAP CONSEIL INFORMATIQUE BUREAUTIQUE
Formation - Conception Sites Internet
Applications Informatiques Personnalisées
Communauté partenaire Microsoft

CELLULE

Comment se référer à une cellule
Range avec référence A1
Grâce à la propriété Cells

les plages nommées

Par rapport à d'autres cellules
Une ligne ou une colonne
Toutes les cellules d'une feuille
Plusieurs plages

Parcourir une plage de cellules
For Each...Next Avec une variable et la méthode Range
Avec une ou deux variables et la propriété Cells


Remonter I. Comment se référer à une cellule

Remonter I.1 Range avec référence A1

Utilisez la méthode Range comme dans les exemples suivants :

  représente
Range("A1") la cellule A1
Range("A1:B5") la plage comprenant l'ensemble des cellules contenu dans le rectangle limité par la cellule A1 et la cellule B5.
Range("A1,B5") les cellules A1 et B5
Range("A1:B2,A5:B5") la plage A1:B2 et la plage A5:B5
Range("A:A") la colonne A
Range("2:2") la ligne 2
Range("A:C,F:G") les colonnes A,B,C et F,G
Range("1:3") les lignes 1 à 3

Remonter I.2 Grâce à la propriété Cells

La syntaxe de cette propriété est la suivante :
FeuilledeTravail.Cells(ligne,colonne)ligne correspond au n° de ligne de la cellule et colonne correspond au n° de colonne de la cellule. Exemple :

Sub UneCellule()
     MsgBox "L'adresse est : " & ActiveSheet.Cells(2, 2).Address, vbOKOnly, "Cellule Cells(2,2)"
End Sub

Remonter I.3 les plages nommées

Lorsque vous avez nommé au préalable une cellule ou une plage de cellules, vous pouvez travailler dessus en VBA grâce à ce nom. Exemple :

  • Nommez 'MaPlage', la plage A1:B10 d'une feuille.
  • Tapez puis lancez la procédure suivante :
    Sub UnePlage()
         Dim n As Byte
         Dim Plage As Range

         For Each Plage In ActiveSheet.Range("MaPlage")
              n = n + 1
              Plage = n
         Next
    End Sub

Remonter I.4 Par rapport à d'autres cellules

Utilisez la propriété Offset, elle a la syntaxe suivante :
UnePlage.Offset(RowOffset, ColumnOffset) RowOffset correspond au nombre de lignes de décalage et ColumnOffset au nombre de colonne de décalage.

  Correspond à la cellule
Range("C10").Offset(0,2) E10
Range("C10").Offset(2,2) E12
Range("C10").Offset(2,-2) E8
Range("C10").Offset(-2,-2) A8

Essayez la procédure suivante :

Sub UnePlage(NoL As Integer, NoC As Integer)
   If NoL < -9 Or NoC < -5 Then Exit Sub
   Range("F10").Select
   Range("F10").Offset(NoL, NoC) = "Ok"
End Sub

Dans la fenêtre d'exécution tapez, puis exécutez la ligne suivante avec des valeurs différentes : UnePlage -9,-5

Remonter I.5 Une ligne ou une colonne

Utilisez soit la méthode Range avec la syntaxe du type : Range("A:A") ou Range("1:1"),
soit les propriétés Rows et Columns où :
 

Correspond à 

Rows toutes les lignes
Rows(10) la ligne 10
Columns toutes les colonnes
Columns(3) la colonne 3 ou C
Columns("C") la colonne C

Remonter I.6 Toutes les cellules d'une feuille

Utilisez la propriété Cells. Ainsi la ligne suivante vous permet d'effacer le contenu de chaque cellule de la feuille active :
ActiveSheet.Cells.ClearContents

Remonter I.7 Plusieurs plages

Vous pouvez utilisez :

  • tout simplement la méthode Range, comme pour l'exemple suivant : Range("A1:B2,A5:B5") .
  • ou la méthode Union qui permet de combiner plusieurs plages en un seul objet Range. Exemple :
    Sub PlageMultiple()
         Dim Plage1 As Range, Plage2 As Range, Plages As Range

         Set Plage1 = Range("A1:B2")
         Set Plage2 = Range("C3:D4")
         Set Plages = Union(Plage1, Plage2)
         Plages.Interior.Color = RGB(255, 255, 204)
    End Sub

Remonter II. Parcourir une plage de cellules

Remonter I.1 For Each...Next

Sub ParcourirPlage()
     Dim n As Byte
     Dim Plage As Range

     For Each Plage In ActiveSheet.Range("MaPlage")
          n = n + 1
          Plage = n
     Next
End Sub

Remonter I.2 Avec une variable et la méthode Range

Sub ParcourirPlage()
   Dim Nol As Integer

   For Nol = 1 To 10
      Range("B" & Nol) = Nol
   Next
End Sub

Remonter I.3 Avec une ou deux variables et la propriété Cells

Sub ParcourirPlage()
   Dim Nol As Integer, Noc As Integer

   For Nol = 1 To 10
       For Noc = 1 To 3
         Cells(Nol, Noc) = Nol & Noc
      Next Noc
   Next Nol
End Sub

AccueilDébut de la page