Créer une transformation de plage dynamique, Excel VBA
Voici un code VBA détaillé pour créer une transformation de plage dynamique dans Excel, accompagné d’une explication complète en français. Cet exemple montre comment définir, transformer et manipuler des plages dynamiques de manière efficace.
Objectif :
L’objectif de ce script VBA est de :
1. Identifier une plage dynamique dans une feuille Excel (c’est-à-dire une plage avec un nombre variable de lignes et de colonnes).
2. Transformer la structure des données en les copiant, les réorganisant et en les sortant dans un nouveau format.
3. Automatiser le processus pour des applications réelles comme la consolidation de données, la mise en forme et la réorganisation.
Code VBA pour Transformation de Plage Dynamique
Sub TransformDynamicRange() Dim ws As Worksheet Dim lastRow As Long, lastCol As Long Dim srcRange As Range, destRange As Range Dim destRow As Long, destCol As Long Dim r As Long, c As Long Dim newValue As Variant ' Définir la feuille de travail Set ws = ThisWorkbook.Sheets("Sheet1") ' À changer si nécessaire ' Identifier la dernière ligne contenant des données lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row ' Identifier la dernière colonne contenant des données lastCol = ws.Cells(1, Columns.Count).End(xlToLeft).Column ' Définir la plage source dynamique Set srcRange = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol)) ' Définir la plage de destination (point de départ) Set destRange = ws.Range("G1") ' À changer si nécessaire destRow = destRange.Row destCol = destRange.Column ' Boucle à travers la plage source et transformation des données For r = 1 To lastRow For c = 1 To lastCol ' Récupérer la valeur de la plage source newValue = srcRange.Cells(r, c).Value ' Si la valeur n'est pas vide, l'écrire à la nouvelle position If newValue <> "" Then ws.Cells(destRow, destCol).Value = newValue destRow = destRow + 1 ' Passer à la ligne suivante dans la sortie End If Next c Next r ' Nettoyage Set srcRange = Nothing Set destRange = Nothing Set ws = Nothing MsgBox "Transformation de la plage dynamique terminée !", vbInformation End Sub
Explication Détailée du Code
Étape 1 : Définir la Feuille de Travail
Set ws = ThisWorkbook.Sheets("Sheet1")
- Le code attribue Sheet1 comme feuille active.
- Modifiez
"Sheet1"
pour correspondre au nom de votre feuille.
Étape 2 : Identifier la Plage Dynamique
lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row lastCol = ws.Cells(1, Columns.Count).End(xlToLeft).Column
lastRow
est déterminée en trouvant la dernière ligne occupée dans la colonne A.lastCol
est trouvée en vérifiant la dernière colonne utilisée dans la ligne 1.- Cela permet de définir une plage dynamique plutôt que de fixer une plage statique.
Étape 3 : Définir les Plages Source et Destination
Set srcRange = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol)) Set destRange = ws.Range("G1") ' À changer si nécessaire
srcRange
contient la plage dynamique de données allant de (1,1) à (lastRow, lastCol).destRange
commence à la cellule G1, où les données transformées seront stockées.
Étape 4 : Boucle à Travers les Données Source
For r = 1 To lastRow For c = 1 To lastCol newValue = srcRange.Cells(r, c).Value
- Deux boucles imbriquées parcourent chaque cellule de la plage source.
newValue
contient temporairement la donnée de la cellule source.
Étape 5 : Stocker les Données Transformées
If newValue <> "" Then ws.Cells(destRow, destCol).Value = newValue destRow = destRow + 1 ' Passer à la ligne suivante dans la sortie End If
- Si une cellule n’est pas vide, elle est copiée dans la plage de destination.
- La
destRow
est incrémentée pour stocker les données verticalement dans la colonne G.
Étape 6 : Nettoyage et Confirmation
Set srcRange = Nothing Set destRange = Nothing Set ws = Nothing MsgBox "Transformation de la plage dynamique terminée !", vbInformation
- Les objets sont définis sur
Nothing
pour libérer la mémoire. - Une boîte de message confirme la transformation réussie.
Comment les Données sont Transformées
Exemple de Table d’Entrée (A1:C4)
A B C
10 20 30
40 50 60
70 80 90
Sortie Transformée (Colonne G)
G
10
20
30
40
50
60
70
80
90
- Les données passent d’un format tabulaire à une liste verticale.
Améliorations et Personnalisation
1. Transformation des Données Horizontalement
- Au lieu d’écrire vers le bas, utilisez
destCol = destCol + 1
pour une sortie horizontale.
2. Filtrer des Données Spécifiques
- Modifiez
If newValue <> ""
pour ajouter des conditions (If newValue > 50 Then
).
3. Gérer des Grandes Quantités de Données Efficacement
- Utilisez des tableaux au lieu de l’accès direct aux cellules pour améliorer les performances.
Conclusion
Cette macro VBA est puissante pour les transformations de données où :
- Vous avez besoin de restructurer un jeu de données de manière dynamique.
- Les données sont mises à jour fréquemment, nécessitant une automatisation.
- Vous souhaitez préparer des données structurées pour des rapports.
A | B | C |
10 | 20 | 30 |
40 | 50 | 60 |
70 | 80 | 90 |
G |
10 |
20 |
30 |
40 |
50 |
60 |
70 |
80 |
90 |