Objet Range (Excel)

Cette collection représente une cellule, une ligne, une colonne ou une sélection de cellules contenant un ou plusieurs blocs contigus de cellules ou une plage 3D.

Remarque

Vous voulez développer des solutions qui étendent l’expérience Office sur plusieurs plateformes ? Découvrez le nouveau modèle de compléments Office. Les compléments Office ont un encombrement réduit par rapport aux compléments et solutions VSTO. Vous pouvez les créer à l’aide de pratiquement n’importe quelle technologie de programmation web, telle que HTML5, JavaScript, CSS3 et XML.

Remarques

Le membre par défaut de Range transfère les appels sans paramètres à la propriété Value et les appels avec des paramètres au membre Item. Par conséquent, someRange = someOtherRange équivaut à someRange.Value = someOtherRange.Value, someRange(1) à someRange.Item(1) et someRange(1,1) à someRange.Item(1,1).

Les propriétés et méthodes suivantes pour le renvoi d'un objet Range sont décrites dans la section Exemples :

  • Propriétés Range et Cells de l’objet Worksheet
  • Propriétés Range et Cells de l’objet Range
  • Propriétés Rows et Columns de l’objet Worksheet
  • Propriétés Rows et Columns de l’objet Range
  • Propriété Offset de l’objet Range
  • Méthode Union de l’objet Application

Exemple

Utilisez l’objet Range (arg), où arg désigne la plage, pour renvoyer un objet Range qui représente une seule cellule ou une plage de cellules. L’exemple suivant montre comment placer la valeur de la cellule A1 dans la cellule A5.

Worksheets("Sheet1").Range("A5").Value = _ 
    Worksheets("Sheet1").Range("A1").Value

L’exemple suivant remplit la plage A1:H8 avec des nombres aléatoires en définissant la formule pour chaque cellule de la plage. Lorsqu’elle est utilisée sans identificateur d’objet (objet à la gauche du point), la propriété Range renvoie une plage sur la feuille active. Si la feuille active n’est pas une feuille de calcul, la méthode échoue.

Utilisez la méthode Activer de l’objet Worksheet pour activer une feuille de calcul avant d’utiliser la propriété Range sans identificateur d’objet explicite.

Worksheets("Sheet1").Activate 
Range("A1:H8").Formula = "=Rand()"    'Range is on the active sheet

L'exemple suivant montre comment supprimer le contenu de la plage intitulée Criteria.

Remarque

Si vous utilisez un argument de type texte pour l'adresse de la plage, vous devez spécifier l'adresse en notation de style A1 (l'utilisation de la notation de style L1C1 n'est pas autorisée).

Worksheets(1).Range("Criteria").ClearContents

Utilisez Cells dans une feuille de calcul pour obtenir une plage composée de toutes les cellules individuelles d’une feuille de calcul. Vous pouvez accéder à des cellules individuelles via la syntaxe Cells(row, column) où row est l'index de ligne et column l'index de colonne. Item peut être omis, car l’appel est transféré vers l’élément par le membre par défaut de Range. L’exemple suivant définit la valeur de la cellule A1 sur 24 et celle de la cellule B1 sur 42 sur la première feuille du classeur actif.

Worksheets(1).Cells(1, 1).Value = 24
Worksheets(1).Cells.Item(1, 2).Value = 42

L'exemple suivant définit la formule pour la cellule A2.

ActiveSheet.Cells(2, 1).Formula = "=Sum(B1:B5)"

Bien que vous puissiez également utiliser Range("A1") pour renvoyer la cellule A1, il sera peut-être parfois plus pratique d’utiliser la propriété Cells, car vous pouvez utiliser une variable pour la ligne ou pour la colonne. L’exemple suivant crée des en-têtes de colonne et de ligne sur Sheet1. N’oubliez pas qu’après que la feuille de calcul a été activée, la propriétéCells peut être utilisée sans déclaration explicite de feuille (elle renvoie une cellule sur la feuille active).

Remarque

Bien que vous puissiez utiliser les fonctions de chaîne Visual Basic pour modifier les références de style A1, il est plus facile (et préférable en matière de programmation) d'utiliser la notation Cells(1, 1).

Sub SetUpTable() 
Worksheets("Sheet1").Activate 
For TheYear = 1 To 5 
    Cells(1, TheYear + 1).Value = 1990 + TheYear 
Next TheYear 
For TheQuarter = 1 To 4 
    Cells(TheQuarter + 1, 1).Value = "Q" & TheQuarter 
Next TheQuarter 
End Sub

Use_expression_.Cells, où expression est une expression qui renvoie un objet Range, pour obtenir une plage avec la même adresse composée de cellules individuelles. Sur une telle plage, vous pouvez accéder à des cellules individuelles via Item (row, column), paramètres définis par rapport au coin supérieur gauche de la première zone de la plage. Item peut être omis, car l’appel est transféré vers l’élément par le membre par défaut de Range. L’exemple suivant définit la formule de la cellule C5 et celle de la cellule D5 sur la première feuille du classeur actif.

Worksheets(1).Range("C5:C10").Cells(1, 1).Formula = "=Rand()"
Worksheets(1).Range("C5:C10").Cells.Item(1, 2).Formula = "=Rand()"

Utilisez la syntaxe Range (cell1, cell2), où cell1 et cell2 sont des objets Range spécifiant les cellules début et de fin pour renvoyer un objet Range. L'exemple suivant définit le style de trait de bordure des cellules A1:J10.

Remarque

N’oubliez pas que le point devant chaque occurrence de la propriété Cells est obligatoire si le résultat de la précédente déclaration With s’applique à la propriété Cells. Dans ce cas, il permet d’indiquer que les cellules sont dans une feuille de calcul (sans le point, la propriété Cells retournerait des cellules sur la feuille active).

With Worksheets(1) 
    .Range(.Cells(1, 1), _ 
        .Cells(10, 10)).Borders.LineStyle = xlThick 
End With

Utilisez Rows dans une feuille de calcul pour obtenir une plage composée de toutes les lignes de cette feuille de calcul. Vous pouvez accéder à des lignes individuelles via Item(row), où row est l’index de ligne. Item peut être omis, car l’appel est transféré vers l’élément par le membre par défaut de Range.

Remarque

Il n’est pas légal de fournir le deuxième paramètre d’élément pour les plages composées de lignes. Vous devez tout d’abord le convertir en cellules individuelles via cells.

L’exemple suivant supprime les lignes 5 et 10 de la première feuille du classeur actif.

Worksheets(1).Rows(10).Delete
Worksheets(1).Rows.Item(5).Delete

Utilisez Columns dans une feuille de calcul pour obtenir une plage composée de toutes les colonnes de cette feuille de calcul. Vous pouvez accéder à des colonnes individuelles via Item(row) [sic], où row représente l’index de colonne donné sous la forme d’un nombre ou d’une adresse de colonne de type A1. Item peut être omis, car l’appel est transféré vers l’élément par le membre par défaut de Range.

Remarque

Il n’est pas légal de fournir le deuxième paramètre d’élément pour les plages composées de colonnes. Vous devez tout d’abord le convertir en cellules individuelles via cells.

L’exemple suivant supprime les colonnes «B», «C», «E» et «J» de la première feuille du classeur actif.

Worksheets(1).Columns(10).Delete
Worksheets(1).Columns.Item(5).Delete
Worksheets(1).Columns("C").Delete
Worksheets(1).Columns.Item("B").Delete

Use_expression_.Rows, où expression est une expression qui renvoie un objet Range, pour obtenir une plage comprenant les lignes dans la première zone de la plage. Vous pouvez accéder à des lignes individuelles via Item(row), où row représente l’index de ligne relatif à partir du haut de la première zone de la plage. Item peut être omis, car l’appel est transféré vers l’élément par le membre par défaut de Range.

Remarque

Il n’est pas légal de fournir le deuxième paramètre d’élément pour les plages composées de lignes. Vous devez tout d’abord le convertir en cellules individuelles via cells.

L’exemple suivant supprime les plages C8:D8 et C6:D6 de la première feuille du classeur actif.

Worksheets(1).Range("C5:D10").Rows(4).Delete
Worksheets(1).Range("C5:D10").Rows.Item(2).Delete

Use_expression_.Columns, où expression est une expression qui renvoie un objet Range, pour obtenir une plage comprenant les colonnes dans la première zone de la plage. Vous pouvez accéder à des colonnes individuelles via Item(row) [sic], où row représente l’index de colonne relative à partir de la gauche de la plage donné sous la forme d’un nombre ou d’une adresse de colonne de type A1. Item peut être omis, car l’appel est transféré vers l’élément par le membre par défaut de Range.

Remarque

Il n’est pas légal de fournir le deuxième paramètre d’élément pour les plages composées de colonnes. Vous devez tout d’abord le convertir en cellules individuelles via cells.

L’exemple suivant supprime les plages L2:L10, G2:G10, F2:F10 et D2:D10 de la première feuille du classeur actif.

Worksheets(1).Range("C5:Z10").Columns(10).Delete
Worksheets(1).Range("C5:Z10").Columns.Item(5).Delete
Worksheets(1).Range("C5:Z10").Columns("D").Delete
Worksheets(1).Range("C5:Z10").Columns.Item("B").Delete

Utilisez la syntaxe Offset (row, column), où row et column sont les décalages de ligne et de colonne, pour renvoyer une plage avec un décalage spécifique par rapport à une autre plage. L’exemple suivant sélectionne les cellule trois lignes vers le bas et une colonne à droite de la cellule dans le coin supérieur gauche de la sélection actuelle. Vous ne pouvez pas sélectionner une cellule n’étant pas sur la feuille active, vous devez tout d’abord activer la feuille de calcul.

Worksheets("Sheet1").Activate 
  'Can't select unless the sheet is active 
Selection.Offset(3, 1).Range("A1").Select

Utilisez la syntaxe Union (range1, range2, ...) pour renvoyer des plages multi-zones, autrement dit, des plages composées de deux ou plusieurs blocs de cellules contiguës. L’exemple suivant crée un objet défini comme l’union des plages A1:B2 et C3:D4, puis sélectionne la plage définie.

Dim r1 As Range, r2 As Range, myMultiAreaRange As Range 
Worksheets("sheet1").Activate 
Set r1 = Range("A1:B2") 
Set r2 = Range("C3:D4") 
Set myMultiAreaRange = Union(r1, r2) 
myMultiAreaRange.Select

Si vous travaillez avec des sélections qui contiennent plusieurs zones, la propriété Zones est utile. Elle divise une zone de sélection multiple dans des objets Range individuels, puis retourne les objets en tant que collection. Utilisez la propriétéCount sur la collection renvoyée pour vérifier une sélection contenant plusieurs zones, comme illustré dans l’exemple suivant.

Sub NoMultiAreaSelection() 
    NumberOfSelectedAreas = Selection.Areas.Count 
    If NumberOfSelectedAreas > 1 Then 
        MsgBox "You cannot carry out this command " & _ 
            "on multi-area selections" 
    End If 
End Sub

Cet exemple utilise la méthode AdvancedFilter de l’objet Range pour créer une liste de valeurs uniques, et définir le nombre de fois que ces valeurs apparaissent dans la plage de la colonne A.

Sub Create_Unique_List_Count()
    'Excel workbook, the source and target worksheets, and the source and target ranges.
    Dim wbBook As Workbook
    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet
    Dim rnSource As Range
    Dim rnTarget As Range
    Dim rnUnique As Range
    'Variant to hold the unique data
    Dim vaUnique As Variant
    'Number of unique values in the data
    Dim lnCount As Long
    
    'Initialize the Excel objects
    Set wbBook = ThisWorkbook
    With wbBook
        Set wsSource = .Worksheets("Sheet1")
        Set wsTarget = .Worksheets("Sheet2")
    End With
    
    'On the source worksheet, set the range to the data stored in column A
    With wsSource
        Set rnSource = .Range(.Range("A1"), .Range("A100").End(xlDown))
    End With
    
    'On the target worksheet, set the range as column A.
    Set rnTarget = wsTarget.Range("A1")
    
    'Use AdvancedFilter to copy the data from the source to the target,
    'while filtering for duplicate values.
    rnSource.AdvancedFilter Action:=xlFilterCopy, _
                            CopyToRange:=rnTarget, _
                            Unique:=True
                            
    'On the target worksheet, set the unique range on Column A, excluding the first cell
    '(which will contain the "List" header for the column).
    With wsTarget
        Set rnUnique = .Range(.Range("A2"), .Range("A100").End(xlUp))
    End With
    
    'Assign all the values of the Unique range into the Unique variant.
    vaUnique = rnUnique.Value
    
    'Count the number of occurrences of every unique value in the source data,
    'and list it next to its relevant value.
    For lnCount = 1 To UBound(vaUnique)
        rnUnique(lnCount, 1).Offset(0, 1).Value = _
            Application.Evaluate("COUNTIF(" & _
            rnSource.Address(External:=True) & _
            ",""" & rnUnique(lnCount, 1).Text & """)")
    Next lnCount
    
    'Label the column of occurrences with "Occurrences"
    With rnTarget.Offset(0, 1)
        .Value = "Occurrences"
        .Font.Bold = True
    End With

End Sub

Méthodes

Propriétés

Voir aussi

Assistance et commentaires

Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.