Créer une créativité de plage dynamique, Excel VBA
Voici un code VBA détaillé pour créer une plage dynamique dans Excel. Ce code permet de créer une plage nommée dynamique qui s’adapte automatiquement au nombre de lignes et de colonnes occupées par les données. Une explication détaillée suit après le code.
Code VBA : Création d’une Plage Dynamique
Sub CreerPlageDynamique() Dim ws As Worksheet Dim derniereLigne As Long Dim derniereColonne As Long Dim nomPlage As String Dim plageDynamique As String ' Définir la feuille de travail où se trouvent les données Set ws = ThisWorkbook.Sheets("Feuil1") ' Trouver la dernière ligne utilisée dans la colonne A (en supposant que la colonne A contient les données principales) derniereLigne = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row ' Trouver la dernière colonne utilisée dans la ligne 1 (en supposant que la ligne 1 contient les en-têtes) derniereColonne = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column ' Définir le nom de la plage dynamique nomPlage = "PlageDynamique" ' Construire la référence de la plage dynamique plageDynamique = ws.Name & "!" & ws.Cells(1, 1).Address(False, False) & ":" & ws.Cells(derniereLigne, derniereColonne).Address(False, False) ' Supprimer l'ancienne plage nommée si elle existe On Error Resume Next ThisWorkbook.Names(nomPlage).Delete On Error GoTo 0 ' Créer une nouvelle plage nommée dynamique ThisWorkbook.Names.Add Name:=nomPlage, RefersTo:="=" & plageDynamique ' Afficher un message de confirmation MsgBox "La plage dynamique '" & nomPlage & "' a été créée avec succès !", vbInformation, "Succès" End Sub
Explication détaillée du code
1. Sélection de la feuille de calcul
Set ws = ThisWorkbook.Sheets("Feuil1")
- Cette ligne définit la feuille « Feuil1 » comme celle où se trouvent les données.
- Remplacez « Feuil1 » par le nom réel de votre feuille si nécessaire.
2. Recherche de la dernière ligne utilisée
derniereLigne = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
- Utilise End(xlUp), qui simule Ctrl + Flèche Haut pour trouver la dernière ligne occupée dans la colonne A.
3. Recherche de la dernière colonne utilisée
derniereColonne = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
- Utilise End(xlToLeft), qui simule Ctrl + Flèche Gauche pour détecter la dernière colonne occupée dans la ligne 1.
4. Définition de la plage dynamique
nomPlage = "PlageDynamique"
- Le nom de la plage dynamique est défini comme « PlageDynamique », que vous pouvez modifier selon vos besoins.
plageDynamique = ws.Name & "!" & ws.Cells(1, 1).Address(False, False) & ":" & ws.Cells(derniereLigne, derniereColonne).Address(False, False)
- Construit la référence de la plage en utilisant la notation R1C1.
- ws.Cells(1,1).Address(False, False) renvoie « A1 ».
- ws.Cells(derniereLigne, derniereColonne).Address(False, False) renvoie, par exemple, « D10 » si les données vont jusqu’à la colonne D, ligne 10.
5. Suppression de l’ancienne plage nommée
On Error Resume Next ThisWorkbook.Names(nomPlage).Delete On Error GoTo 0
- Supprime la plage nommée « PlageDynamique » si elle existe déjà, pour éviter les doublons.
6. Création de la plage dynamique
ThisWorkbook.Names.Add Name:=nomPlage, RefersTo:="=" & plageDynamique
- Crée une plage nommée dynamique dans le classeur.
7. Affichage d’un message de confirmation
MsgBox "La plage dynamique '" & nomPlage & "' a été créée avec succès !", vbInformation, "Succès"
- Affiche une boîte de message pour confirmer la création de la plage.
Comment utiliser ce code ?
- Ouvrez Excel et appuyez sur ALT + F11 pour ouvrir l’éditeur VBA.
- Insérez un module (Insertion > Module).
- Copiez et collez le code ci-dessus dans le module.
- Modifiez « Feuil1 » si vos données sont sur une autre feuille.
- Exécutez la macro en appuyant sur F5 ou en lançant CreerPlageDynamique depuis la fenêtre des macros.
Utilisation et mise à jour automatique
- Si vous ajoutez ou supprimez des lignes/colonnes, réexécutez la macro pour mettre à jour la plage.
- Vous pouvez utiliser « PlageDynamique » dans vos formules, par exemple :
=SOMME(PlageDynamique)
- Si utilisée dans un graphique, la plage se mettra à jour après exécution de la macro.