Création d’une plage dynamique, Excel VBA

Création d’une plage dynamique, Excel VBA

Voici une explication détaillée de la création d’une plage dynamique dans Excel en utilisant VBA, accompagnée du code correspondant. 

Comprendre les Plages Dynamiques dans Excel VBA : 

Une plage dynamique est une plage qui s’ajuste automatiquement lorsqu’on ajoute ou supprime des données. Au lieu de définir une plage statique, qui peut être limitative si vos données changent en taille, une plage dynamique peut s’adapter et se développer à mesure que votre ensemble de données augmente ou diminue. 

Pour créer une plage dynamique dans VBA, vous utilisez généralement l’objet Range combiné avec des propriétés telles que End(xlDown), End(xlUp), End(xlToRight) ou End(xlToLeft) pour trouver la dernière ligne ou colonne contenant des données. 

Objectif : 

Nous allons écrire un code VBA qui définit une plage dynamique basée sur les données d’une colonne spécifique (disons la colonne A). Nous allons également nous assurer que si les données changent (lorsque des lignes sont ajoutées ou supprimées), la plage se met à jour en conséquence. 

Étapes du Code : 

  1. Ouvrir l’éditeur VBA :
  • Appuyez sur Alt + F11 pour ouvrir l’éditeur VBA. 
  • Dans l’éditeur, allez dans Insertion > Module pour ajouter un nouveau module où le code sera placé. 
  1. Code VBA pour créer une plage dynamique :
Sub CreerPlageDynamique() 
    Dim ws As Worksheet 
    Dim derniereLigne As Long 
    Dim plageDynamique As Range 
    ' Définir la feuille de travail où se trouvent les données 
    Set ws = ThisWorkbook.Sheets("Feuille1") 
    ' Trouver la dernière ligne utilisée dans la colonne A 
    derniereLigne = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row 
    ' Créer une plage dynamique de A1 à la dernière ligne avec des données dans la colonne A 
    Set plageDynamique = ws.Range("A1:A" & derniereLigne) 
    ' Optionnel : Afficher l'adresse de la plage dynamique dans la fenêtre immédiate 
    Debug.Print "Adresse de la plage dynamique : " & plageDynamique.Address 
    ' Optionnel : Mettre en surbrillance la plage dynamique pour une confirmation visuelle 
    plageDynamique.Select 
End Sub

Explication du Code : 

1. Définir les Variables

  • ws: Cette variable contiendra la référence de la feuille de calcul où se trouvent les données. 
  • derniereLigne: Cette variable stockera le numéro de la dernière ligne utilisée dans la colonne A. 
  • plageDynamique: Cette variable contiendra la référence de la plage dynamique que nous allons créer. 

2. Définir la Feuille de Travail

  • Set ws = ThisWorkbook.Sheets("Feuille1") : Cette ligne définit la feuille de calcul sur laquelle nous voulons travailler. Vous pouvez modifier « Feuille1 » par le nom réel de votre feuille. 

3. Trouver la Dernière Ligne avec des Données

  • derniereLigne = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row : Cette ligne trouve la dernière ligne de la colonne A qui contient des données. La méthode End(xlUp) fonctionne comme si vous appuyiez sur Ctrl + ↑ au clavier. Elle s’arrête sur la première cellule non vide en partant du bas de la feuille. 

4. Créer la Plage Dynamique

  • Set plageDynamique = ws.Range("A1:A" & derniereLigne) : Cette ligne crée la plage allant de A1 à la dernière ligne contenant des données dans la colonne A. La plage dynamique s’ajustera en fonction de la taille des données. 

5. Afficher et Mettre en Surbrillance la Plage Dynamique

  • Debug.Print "Adresse de la plage dynamique : " & plageDynamique.Address : Cette ligne affiche l’adresse de la plage dynamique dans la fenêtre immédiate, afin que vous puissiez vérifier quelle plage a été sélectionnée. 
  • plageDynamique.Select: Cette ligne met en surbrillance la plage dynamique sur la feuille de calcul, pour que vous puissiez visuellement confirmer que la plage est correcte. 

Comment Utiliser : 

  • Exécutez cette macro en appuyant sur F5 dans l’éditeur VBA ou en l’assignant à un bouton sur votre feuille de calcul. 
  • Lorsque les données dans la colonne A changent (par exemple, si des lignes sont ajoutées ou supprimées), exécuter à nouveau la macro mettra automatiquement à jour la plage dynamique. 

Notes : 

  • La plage dynamique ici est basée sur la colonne A, mais vous pouvez modifier le code pour la rendre dynamique à la fois en lignes et en colonnes, selon vos besoins. Par exemple, si vos données sont réparties sur plusieurs colonnes (A à D), vous pouvez ajuster le code comme suit : 

Set plageDynamique = ws.Range("A1:D" & derniereLigne) 

  • Si vos données s’étendent sur plusieurs colonnes et que les lignes varient en taille, vous pouvez utiliser la propriété UsedRange ou les méthodes xlToRight et xlDown pour trouver la dernière ligne et colonne de manière dynamique. 

Exemple avec des Données Multi-colonnes : 

Sub CreerPlageDynamiqueMultiColonnes() 
    Dim ws As Worksheet 
    Dim derniereLigne As Long 
    Dim derniereColonne As Long 
    Dim plageDynamique As Range 
    Set ws = ThisWorkbook.Sheets("Feuille1") 
    ' Trouver la dernière ligne utilisée dans la colonne A 
    derniereLigne = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row 
    ' Trouver la dernière colonne utilisée dans la ligne 1 
    derniereColonne = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column 
    ' Créer la plage dynamique de A1 à la dernière ligne et à la dernière colonne 
    Set plageDynamique = ws.Range(ws.Cells(1, 1), ws.Cells(derniereLigne, derniereColonne))
    ' Afficher et mettre en surbrillance la plage dynamique 
    Debug.Print "Adresse de la plage dynamique : " & plageDynamique.Address 
    plageDynamique.Select 
End Sub

Cela définira une plage dynamique allant de A1 à la dernière ligne et à la dernière colonne contenant des données, s’ajustant aux changements dans les deux tailles (lignes et colonnes). 

Conclusion : 

Créer des plages dynamiques avec VBA permet une plus grande flexibilité et une automatisation de vos modèles Excel. Vous n’avez plus à ajuster manuellement les plages à chaque fois que la taille des données change. Cette approche peut être utilisée pour des graphiques, des tableaux croisés dynamiques et toute autre fonctionnalité qui repose sur des plages de données dynamiques. 

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x