Créer une plage dynamique liée à l’intégrité, Excel VBA
Voici une explication détaillée et un exemple de code VBA pour créer une plage dynamique dans Excel tout en garantissant l’intégrité des données. Cette méthode vous permet de définir une plage de manière dynamique en fonction de la taille des données (par exemple, en ajustant automatiquement la plage à mesure que des données sont ajoutées ou supprimées), et elle garantira que la plage reste toujours valide et contient les données appropriées.
Explication étape par étape :
- Création d’une plage dynamique : Une plage dynamique dans Excel peut changer de taille en fonction de la quantité de données présentes dans la feuille de calcul. Nous pouvons utiliser VBA pour calculer automatiquement la dernière ligne et la dernière colonne utilisées, puis définir une plage en conséquence.
- Intégrité des données : Lors de l’utilisation de plages dynamiques, il est essentiel de garantir que la plage reste valide. Par exemple, vous ne voulez pas que la plage inclut des lignes ou des colonnes vides. La plage doit s’étendre ou se contracter en fonction des données réelles présentes.
- Logique du code VBA : Nous allons créer une procédure qui :
- Détermine la dernière ligne et la dernière colonne des données.
- Définit une plage qui va de la première cellule de données à la dernière cellule utilisée.
- Garantit que la plage reste intacte même si les données changent.
Sub CreateDynamicRange()
Dim ws As Worksheet
Dim lastRow As Long
Dim lastCol As Long
Dim dataRange As Range
' Définir la feuille de travail sur la feuille active ou spécifier votre feuille comme ThisWorkbook.Sheets("Sheet1")
Set ws = ActiveSheet
' Trouver la dernière ligne avec des données dans la feuille (suppose que les données sont continues sans espaces)
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' Trouver la dernière colonne avec des données dans la feuille (en supposant que les données commencent à la colonne 1)
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
' Définir la plage dynamique de la cellule en haut à gauche à la cellule en bas à droite
Set dataRange = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol))
' Vérifier si la plage est valide
If Not dataRange Is Nothing Then
' Facultativement, donner un nom à la plage dynamique (cela facilite sa référence ultérieure)
ws.Names.Add Name:="DynamicRange", RefersTo:=dataRange
' Afficher dans la fenêtre Immediate pour confirmation (peut être supprimé plus tard)
Debug.Print "Plage dynamique créée : " & dataRange.Address
Else
MsgBox "Aucune donnée trouvée dans la feuille !"
End If
End Sub
Explication du code :
- Définition de la feuille de travail : Nous attribuons la feuille active (ws = ActiveSheet). Vous pouvez également spécifier une feuille spécifique en utilisant ThisWorkbook.Sheets(« Sheet1 »).
- Trouver la dernière ligne et colonne :
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row trouve la dernière ligne de données dans la colonne 1 (cela suppose que la colonne 1 contient toujours des données sans espaces entre les lignes).
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column trouve la dernière colonne avec des données dans la ligne 1 (encore une fois, en supposant que la ligne 1 contient des données).
- Définir la plage : Nous définissons la plage à partir de la cellule A1 (ws.Cells(1, 1)) jusqu’à la dernière ligne et la dernière colonne déterminées ci-dessus.
- Création d’une plage nommée : ws.Names.Add attribue un nom (DynamicRange) à la plage, ce qui vous permet de facilement référencer cette plage dynamique plus tard dans des formules ou d’autres codes VBA.
- Validation de la plage : Si aucune donnée n’est trouvée, une boîte de message s’affiche pour alerter l’utilisateur.
Notes sur l’utilisation :
- Ajustements : Si vos données ne commencent pas à A1, ou si vous avez des colonnes ou des lignes spécifiques à prendre en compte, modifiez la référence de la plage en conséquence. Par exemple, si vos données commencent à la colonne 2 ou à la ligne 2, vous devez ajuster les références de la plage pour les adapter.
- Cellules vides : Le code suppose qu’il n’y a pas de cellules vides dans les données. Si vos données contiennent des lacunes ou si vous souhaitez gérer les cellules vides de certaines manières, la logique pour déterminer lastRow et lastCol devra peut-être être ajustée.
- Expansion de la plage : Si de nouvelles lignes ou colonnes sont ajoutées aux données, la plage s’ajustera automatiquement, car la plage dynamique est recalculée chaque fois que la macro est exécutée.
Comment exécuter ce code :
- Ouvrez Excel et appuyez sur Alt + F11 pour ouvrir l’éditeur VBA.
- Dans l’éditeur VBA, cliquez sur Insertion > Module pour ajouter un nouveau module.
- Collez le code dans le module.
- Fermez l’éditeur VBA.
- Appuyez sur Alt + F8, sélectionnez CreateDynamicRange, puis cliquez sur « Exécuter ».
Cela créera une plage dynamique sur la feuille active et lui attribuera le nom DynamicRange. Vous pouvez maintenant référencer cette plage dans vos formules ou l’utiliser dans d’autres scripts VBA.