Plages et cellules Excel VBA

Plages et cellules en VBA

Les feuilles de calcul Excel stockent les données dans les cellules. Les cellules sont organisées en lignes et en colonnes. Chaque cellule peut être identifiée par le point d'intersection de sa ligne et de sa colonne (Exs. B3 ou R3C2).

Une plage Excel fait référence à une ou plusieurs cellules (ex. A3:B4)

Adresse de la cellule

Notation A1

En notation A1, une cellule est désignée par sa lettre de colonne (de A à XFD) suivie de son numéro de ligne (de 1 à 1 048 576).

En VBA, vous pouvez faire référence à n'importe quelle cellule en utilisant le Objet de plage.

123456789 ' Reportez-vous à la cellule B4 de la feuille actuellement activePlage MsgBox("B4")' Référez-vous à la cellule B4 sur la feuille nommée 'Données'MsgBox Worksheets("Données").Range("B4")' Référez-vous à la cellule B4 sur la feuille nommée 'Données' dans un autre classeur OUVERT' nommé 'Mes données'MsgBox Workbooks("Mes données").Worksheets("Data").Range("B4")

Notation R1C1

Dans la notation R1C1, une cellule est référencée par R suivi du numéro de ligne, puis de la lettre « C » suivie du numéro de colonne. par exemple B4 dans la notation R1C1 sera référencé par R4C2. En VBA, vous utilisez le Objet Cellules pour utiliser la notation R1C1 :

12 ' Se référer à la cellule R[6]C[4] c'est-à-dire D6Cellules (6, 4) = "D6"

Gamme de cellules

Notation A1

Pour faire référence à plusieurs cellules, utilisez un « : » entre l'adresse de la cellule de départ et la dernière adresse de la cellule. Ce qui suit fera référence à toutes les cellules de A1 à D10 :

1 Plage ("A1:D10")

Notation R1C1

Pour faire référence à plus d'une cellule, utilisez un "," entre l'adresse de la cellule de départ et la dernière adresse de la cellule. Ce qui suit fera référence à toutes les cellules de A1 à D10 :

1 Plage (cellules (1, 1), cellules (10, 4))

Écriture dans les cellules

Pour écrire des valeurs dans une cellule ou un groupe contigu de cellules, il suffit de se référer à la plage, de mettre un signe =, puis d'écrire la valeur à stocker :

12345678910 ' Stocker F5 dans la cellule avec l'adresse F6Plage("F6") = "F6"' Stocker E6 dans la cellule avec l'adresse R[6]C[5] c'est-à-dire E6Cellules (6, 5) = "E6"' Stocker A1:D10 dans la plage A1:D10Plage("A1:D10") = "A1:D10"' ouPlage (Cellules (1, 1), Cellules (10, 4)) = "A1:D10"

Lecture à partir de cellules

Pour lire les valeurs des cellules, référez-vous simplement à la variable pour stocker les valeurs, mettez un signe = puis référez-vous à la plage à lire :

1234567891011 Dim val1Dim val2' Lire à partir de la cellule F6val1 = Plage("F6")' Lire à partir de la cellule E6val2 = Cellules (6, 5)MsgBox val1Msgbox val2

Remarque : Pour stocker les valeurs d'une plage de cellules, vous devez utiliser un tableau au lieu d'une simple variable.

Cellules non contiguës

Pour faire référence à des cellules non contiguës, utilisez une virgule entre les adresses des cellules :

123456 ' Stockez 10 dans les cellules A1, A3 et A5Plage("A1,A3,A5") = 10' Stockez 10 dans les cellules A1:A3 et D1:D3)Plage ("A1:A3, D1:D3") = 10

Intersection de cellules

Pour faire référence à des cellules non contiguës, utilisez un espace entre les adresses des cellules :

123 ' Mémoriser 'Col D' dans D1:D10' qui est commun entre A1:D10 et D1:F10Plage("A1:D10 D1:G10") = "Col D"

Décalage à partir d'une cellule ou d'une plage

En utilisant la fonction Offset, vous pouvez déplacer la référence d'une plage donnée (cellule ou groupe de cellules) par le nombre_de_lignes et le nombre_de_colonnes spécifiés.

Syntaxe de décalage

Range.Offset(number_of_rows, number_of_columns)

Décalage à partir d'une cellule

12345678910111213141516 ' OFFSET à partir d'une cellule A1' Se référer à la cellule elle-même' Déplacer 0 lignes et 0 colonnesPlage ("A1").Décalage(0, 0) = "A1"' Déplacer 1 lignes et 0 colonnesPlage ("A1").Décalage(1, 0) = "A2"' Déplacer 0 lignes et 1 colonnesPlage("A1").Décalage(0, 1) = "B1"' Déplacer 1 lignes et 1 colonnesPlage("A1").Décalage(1, 1) = "B2"' Déplacer 10 lignes et 5 colonnesPlage ("A1").Décalage (10, 5) = "F11"

Décalage à partir d'une plage

123 ' Déplacer la référence vers la plage A1:D4 de 4 lignes et 4 colonnes' La nouvelle référence est E5:H8Plage("A1:D4").Décalage(4,4) = "E5:H8"

Définition d'une référence à une plage

Pour affecter une plage à une variable plage : déclarez une variable de type Plage puis utilisez la commande Set pour la définir sur une plage. Veuillez noter que vous devez utiliser la commande SET car RANGE est un objet :

12345678 ' Déclarer une variable RangeDim myRange en tant que plage' Réglez la variable sur la plage A1:D4Définir maPlage = Plage("A1:D4")' Imprime $A$1:$D$4MsgBox myRange.Address

Redimensionner une plage

La méthode de redimensionnement de l'objet Range modifie la dimension de la plage de référence :

1234567 Dim myRange As Range' Plage à redimensionnerDéfinir maPlage = Plage("A1:F4")' Imprime $A$1:$E$10Debug.Print myRange.Resize (10, 5).Adresse

La cellule en haut à gauche de la plage redimensionnée est la même que la cellule en haut à gauche de la plage d'origine

Syntaxe de redimensionnement

Range.Resize(number_of_rows, number_of_columns)

DÉCALAGE vs redimensionnement

Le décalage ne modifie pas les dimensions de la plage mais la déplace du nombre spécifié de lignes et de colonnes. Le redimensionnement ne modifie pas la position de la plage d'origine mais modifie les dimensions selon le nombre spécifié de lignes et de colonnes.

Toutes les cellules de la feuille

L'objet Cells fait référence à toutes les cellules de la feuille (1048576 lignes et 16384 colonnes).

12 ' Effacer toutes les cellules dans les feuilles de calculCellules.Effacer

Plage d'occasion

La propriété UsedRange vous donne la plage rectangulaire de la cellule utilisée en haut à gauche à la cellule utilisée en bas à droite de la feuille active.

1234567 Dim ws As Feuille de calculDéfinir ws = ActiveSheet' $B$2:$L$14 si L2 est la première cellule avec n'importe quelle valeur' et L14 est la dernière cellule avec n'importe quelle valeur sur le' feuille activeDebug.Print ws.UsedRange.Address

Région actuelle

La propriété CurrentRegion vous donne la plage rectangulaire contiguë de la cellule en haut à gauche à la cellule utilisée en bas à droite contenant la cellule/plage référencée.

1234567891011 Dim myRange As RangeDéfinir maPlage = Plage("D4:F6")' Imprime $B$2 :$L$14' S'il y a un chemin rempli de D4:F16 à B2 ET L14Debug.Print myRange.CurrentRegion.Address' Vous pouvez également vous référer à une seule cellule de départSet myRange = Range("D4") ' Imprime $B$2:$L$14

Propriétés de la plage

Vous pouvez obtenir l'adresse, le numéro de ligne/colonne d'une cellule et le nombre de lignes/colonnes dans une plage comme indiqué ci-dessous :

123456789101112131415161718192021 Dim myRange As RangeDéfinir maPlage = Plage("A1:F10")' Imprime $A$1:$F$10Debug.Print myRange.AddressDéfinir maPlage = Plage("F10")' Imprime 10 pour la ligne 10Debug.Print myRange.Row' Imprime 6 pour la colonne FDebug.Print myRange.ColumnDéfinir maPlage = Plage("E1:F5")' Imprime 5 pour le nombre de lignes dans la plageDebug.Print myRange.Rows.Count' Imprime 2 pour le nombre de colonnes dans la plageDebug.Print myRange.Columns.Count

Dernière cellule de la feuille

Vous pouvez utiliser Nombre de lignes et Colonnes.Nombre propriétés avec Cellules objet pour obtenir la dernière cellule de la feuille :

1234567891011 ' Imprimer le dernier numéro de ligne' Imprime 1048576Debug.Print "Lignes dans la feuille : " & Rows.Count' Imprimer le dernier numéro de colonne' Imprime 16384Debug.Print "Colonnes dans la feuille : " & Columns.Count' Imprimer l'adresse de la dernière cellule' Imprime $XFD$1048576Debug.Print "Adresse de la dernière cellule de la feuille : " & Cells(Rows.Count, Columns.Count)

Dernier numéro de ligne utilisé dans une colonne

La propriété END vous amène à la dernière cellule de la plage et End(xlUp) vous amène à la première cellule utilisée à partir de cette cellule.

123 Dim lastRow As LonglastRow = Cells(Rows.Count, "A").End(xlUp).Row

Dernier numéro de colonne utilisé dans une ligne

123 Dim lastCol As LonglastCol = Cells(1, Columns.Count).End(xlToLeft).Column

La propriété END vous emmène à la dernière cellule de la plage et End(xlToLeft) vous emmène à gauche de la première cellule utilisée à partir de cette cellule.

Vous pouvez également utiliser les propriétés xlDown et xlToRight pour accéder aux premières cellules utilisées en bas ou à droite de la cellule actuelle.

Propriétés de la cellule

Propriétés communes

Voici le code pour afficher les propriétés de cellule couramment utilisées

12345678910111213141516171819202122 Cellule tamisée en tant que plageDéfinir la cellule = Plage("A1")cellule.ActiverDebug.Print cell.Address' Imprimer $A$1Debug.Print cell.Value' Impressions 456' AdresseDebug.Print cell.Formula' Imprime =SOMME(C2:C3)' CommenterDebug.Print cell.Comment.Text' StyleDebug.Print cell.Style' Format de celluleDebug.Print cell.DisplayFormat.NumberFormat

Police de cellule

L'objet Cell.Font contient les propriétés de la police de cellule :

1234567891011121314151617181920 Cellule tamisée en tant que plageDéfinir la cellule = Plage("A1")' Régulier, Italique, Gras et Gras Italiquecell.Font.FontStyle = "Gras italique"' Pareil quecell.Font.Bold = Truecell.Font.Italic = True' Définir la police sur Couriercell.Font.FontStyle = "Courrier"' Définir la couleur de la policecell.Font.Color = vbBlue' oucell.Font.Color = RVB (255, 0, 0)' Définir la taille de la policecell.Font.Size = 20

Copier et coller

Coller tout

Les plages/cellules peuvent être copiées et collées d'un emplacement à un autre. Le code suivant copie toutes les propriétés de la plage source vers la plage de destination (équivalent à CTRL-C et CTRL-V)

1234567 'Copie simplePlage ("A1:D20").CopierFeuilles de calcul("Feuille2").Plage("B10").Coller'ou' Copie de la feuille actuelle vers la feuille nommée 'Feuille2'Plage("A1:D20").Destination de la copie :=Feuilles de calcul("Feuille2").Plage("B10")

Pâte Spéciale

Les propriétés sélectionnées de la plage source peuvent être copiées vers la destination en utilisant l'option PASTESPECIAL :

123 ' Coller la plage en tant que valeurs uniquementPlage ("A1:D20").CopierWorksheets("Sheet2").Range("B10").PasteSpecial Paste:=xlPasteValues

Voici les options possibles pour l'option Coller :

12345678910111213 ' Coller les types spéciauxxlCollerToutxlCollerTousSaufBorduresxlCollerToutFusionnerFormatsConditionnelsxlPasteAllUsingSourceThemexlCollerColonneLargeursxlCollerCommentairesxlCollerFormatsxlCollerFormulesxlCollerFormulesEtNombreFormatsxlCollerValidationxlCollerValeursxlCollerValeursEtNombreFormats

Contenu de l'ajustement automatique

La taille des lignes et des colonnes peut être modifiée pour s'adapter au contenu à l'aide du code ci-dessous :

12345 ' Modifier la taille des lignes 1 à 5 pour s'adapter au contenuRangées("1:5").Ajustement automatique' Modifier la taille des colonnes A en B pour s'adapter au contenuColonnes("A:B").Ajustement automatique

Plus d'exemples de gamme

Il est recommandé d'utiliser l'enregistreur de macros lors de l'exécution de l'action requise via l'interface graphique. Il vous aidera à comprendre les différentes options disponibles et comment les utiliser.

Pour chaque

Il est plus facile de parcourir une plage en utilisant Pour chaque construire comme indiqué ci-dessous :

123 Pour chaque cellule dans la plage ("A1:B100")' Faire quelque chose avec la celluleCellule suivante

À chaque itération de la boucle, une cellule de la plage est affectée à la variable c et les instructions de la boucle For sont exécutées pour cette cellule. La boucle se termine lorsque toutes les cellules sont traitées.

Sorte

Sort est une méthode de l'objet Range. Vous pouvez trier une plage en spécifiant des options de tri sur Range.Sort. Le code ci-dessous triera les colonnes A:C en fonction de la clé de la cellule C2. L'ordre de tri peut être xlAscending ou xlDescending. Header:= xlYes doit être utilisé si la première ligne est la ligne d'en-tête.

12 Colonnes("A:C").Clé de tri1:=Plage("C2"), _order1:=xlAscending, Header:=xlYes

Trouve

Find est également une méthode de Range Object. Il trouve la première cellule dont le contenu correspond aux critères de recherche et renvoie la cellule en tant qu'objet Range. ça revient Rien s'il n'y a pas de correspondance.

Utilisation RechercherSuivant (ou FindPrevious) pour rechercher l'occurrence suivante (précédente).

Le code suivant changera la police en "Arial Black" pour toutes les cellules de la plage commençant par "John":

12345 Pour chaque c dans la plage ("A1:A100")Si c Comme "John*" Alorsc.Font.Name = "Arial Noir"Fin sic suivant

Le code suivant remplacera toutes les occurrences de « À tester » par « Réussi » dans la plage spécifiée :

12345678910 Avec plage ("a1:a500")Définir c = .Find("À tester", LookIn:=xlValues)Si non c'est rien alorsfirstaddress = c.AdresseFairec.Valeur = "Réussi"Définir c = .FindNext(c)Boucle tant que non c n'est rien et c.Address firstaddressFin siTerminer par

Il est important de noter que vous devez spécifier une plage pour utiliser FindNext. Vous devez également fournir une condition d'arrêt, sinon la boucle s'exécutera pour toujours. Normalement, l'adresse de la première cellule trouvée est stockée dans une variable et la boucle est arrêtée lorsque vous atteignez à nouveau cette cellule. Vous devez également vérifier le cas où rien n'est trouvé pour arrêter la boucle.

Plage d'adresses

Utilisez Range.Address pour obtenir l'adresse dans le style A1

123 MsgBox Range ("A1:D10").Adresse' ouDebug.Print Range ("A1:D10").Adresse

Utilisez xlReferenceStyle (la valeur par défaut est xlA1) pour obtenir les adresses dans le style R1C1

123 MsgBox Range ("A1:D10").Address(ReferenceStyle:=xlR1C1)' ouDebug.Print Range("A1:D10").Address(ReferenceStyle:=xlR1C1)

Ceci est utile lorsque vous traitez des plages stockées dans des variables et que vous souhaitez traiter uniquement certaines adresses.

Plage à tableau

Il est plus rapide et plus facile de transférer une plage vers un tableau, puis de traiter les valeurs. Vous devez déclarer le tableau comme Variant pour éviter de calculer la taille requise pour remplir la plage dans le tableau. Les dimensions du tableau sont définies pour correspondre au nombre de valeurs de la plage.

123456789 Dim DirArray en tant que variante' Stocke les valeurs de la plage dans le tableauDirArray = Range("a1:a5").Valeur' Boucle pour traiter les valeursPour chaque c dans DirArrayDebug.Print cProchain

Tableau à plage

Après le traitement, vous pouvez réécrire le tableau dans une plage. Pour écrire le tableau de l'exemple ci-dessus dans une plage, vous devez spécifier une plage dont la taille correspond au nombre d'éléments dans le tableau.

Utilisez le code ci-dessous pour écrire le tableau dans la plage D1:D5 :

123 Plage("D1:D5").Valeur = DirArrayRange("D1:H1").Valeur = Application.Transpose(DirArray)

Veuillez noter que vous devez transposer le tableau si vous l'écrivez sur une ligne.

Plage de somme

12 SumOfRange = Application.WorksheetFunction.Sum(Range("A1:A10"))Debug.Print SumOfRange

Vous pouvez utiliser de nombreuses fonctions disponibles dans Excel dans votre code VBA en spécifiant Application.WorkSheetFunction. avant le nom de la fonction comme dans l'exemple ci-dessus.

Plage de comptage

1234567 ' Compter le nombre de cellules avec des nombres dans la plageCountOfCells = Application.WorksheetFunction.Count(Range("A1:A10"))Debug.Print CountOfCells' Compter le nombre de cellules non vides dans la plageCountOfNonBlankCells = Application.WorksheetFunction.CountA(Range("A1:A10"))Debug.Print CountOfNonBlankCells

Écrit par : Vinamra Chandra

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave