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
lastRowest déterminée en trouvant la dernière ligne occupée dans la colonne A.lastColest 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
srcRangecontient la plage dynamique de données allant de (1,1) à (lastRow, lastCol).destRangecommence à 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.
newValuecontient 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
destRowest 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
Nothingpour 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 + 1pour 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 |