Créer une transformation de plage dynamique, Excel VBA

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
Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x