Créer des compétences de raisonnement critique à plage dynamique, Excel VBA
Voici un code VBA détaillé pour créer une plage dynamique dans Excel, avec une explication approfondie en français.
Code VBA : Création d’une plage dynamique dans Excel
Option Explicit
Sub CreateDynamicRange()
Dim ws As Worksheet
Dim lastRow As Long
Dim lastCol As Long
Dim rng As Range
Dim rngName As String
' Définir la feuille de calcul où la plage dynamique sera créée
Set ws = ThisWorkbook.Sheets("Sheet1")
' Trouver la dernière ligne utilisée dans la feuille (en considérant la colonne A)
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' Trouver la dernière colonne utilisée dans la feuille (en considérant la ligne 1)
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
' Définir la plage dynamique
Set rng = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol))
' Nommer la plage dynamiquement
rngName = "DynamicRange"
On Error Resume Next
ws.Names(rngName).Delete ' Supprimer la plage nommée existante si elle existe
On Error GoTo 0
ws.Names.Add Name:=rngName, RefersTo:=rng
' Confirmer la création de la plage avec un message
MsgBox "La plage dynamique '" & rngName & "' a été créée avec succès de " & _
rng.Address & " dans la feuille " & ws.Name, vbInformation, "Plage Créée"
End Sub
Explication détaillée
- Déclaration des variables
- ws → Représente la feuille de calcul, ici « Sheet1 ».
- lastRow → Stocke le numéro de la dernière ligne utilisée dans la colonne A.
- lastCol → Stocke le numéro de la dernière colonne utilisée dans la ligne 1.
- rng → Correspond à la plage dynamique calculée.
- rngName → Contient le nom de la plage nommée.
- Identification de la dernière ligne et colonne utilisée
ws.Cells(ws.Rows.Count, 1).End(xlUp).Row → Recherche la dernière cellule non vide de la colonne A.
ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column → Recherche la dernière cellule non vide de la ligne 1.
- Définition de la plage dynamique
- La plage est définie dynamiquement à l’aide de :
Set rng = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol))
Cela garantit que la plage commence en A1 et s’étend automatiquement en fonction des données présentes.
- Création d’une plage nommée
ws.Names(rngName).Delete
→ Supprime toute plage nommée existante avec le même nom pour éviter les conflits.
ws.Names.Add Name:=rngName, RefersTo:=rng
→ Crée une nouvelle plage nommée « DynamicRange » qui sera automatiquement mise à jour.
- Message de confirmation
- Une boîte de dialogue affiche l’adresse de la plage créée, confirmant le succès de l’exécution.
Cas d’utilisation et applications
Mise à jour automatique des graphiques
- Utiliser cette plage dans un graphique pour qu’il s’ajuste automatiquement aux nouvelles données.
Tableaux croisés dynamiques
- Utiliser cette plage comme source de données pour un tableau croisé dynamique sans besoin de mise à jour manuelle.
Listes déroulantes dynamiques
- Utiliser cette plage comme source d’une liste déroulante pour qu’elle se mette à jour automatiquement.
Mise en forme conditionnelle
- Appliquer des règles dynamiques sur des ensembles de données en constante évolution.