Importation dynamique d’une plage de données, Excel VBA
Voici un code VBA détaillé pour l’importation dynamique d’une plage de données, avec une explication complète.
Objectif
L’objectif est de créer une solution d’importation dynamique de plage à l’aide de VBA. Le script va :
- Identifier dynamiquement la dernière ligne et la dernière colonne.
- Sélectionner et importer les données dans une autre feuille de calcul.
- Gérer efficacement les tailles de données variables.
Code VBA : Créer l’importation dynamique de plage
Supposons que nous ayons des données dans « Feuille1 » qui doivent être importées dans « Feuille2 » de manière dynamique.
Sub ImporterPlageDynamique() Dim wsSource As Worksheet, wsDest As Worksheet Dim lastRow As Long, lastCol As Long Dim rng As Range, destCell As Range ' Définir les références aux feuilles de calcul Set wsSource = ThisWorkbook.Sheets("Feuille1") Set wsDest = ThisWorkbook.Sheets("Feuille2") ' Trouver la dernière ligne utilisée dans Feuille1 (en supposant que les données commencent à la ligne 1) lastRow = wsSource.Cells(Rows.Count, 1).End(xlUp).Row ' Trouver la dernière colonne utilisée dans Feuille1 (en supposant que les données commencent à la colonne A) lastCol = wsSource.Cells(1, Columns.Count).End(xlToLeft).Column ' Définir la plage dynamique Set rng = wsSource.Range(wsSource.Cells(1, 1), wsSource.Cells(lastRow, lastCol)) ' Définir la cellule de destination dans Feuille2 (à partir de A1) Set destCell = wsDest.Cells(1, 1) ' Copier et coller les valeurs pour éviter les problèmes de formatage rng.Copy destCell.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False ' Effacer le presse-papier ' Informer l'utilisateur MsgBox "Données importées avec succès !", vbInformation, "Importation terminée" End Sub
Explication détaillée
- Définir les feuilles de calcul
Set wsSource = ThisWorkbook.Sheets("Feuille1") Set wsDest = ThisWorkbook.Sheets("Feuille2")
- wsSource fait référence à la feuille contenant les données à importer.
- wsDest fait référence à la feuille où les données seront copiées.
- Trouver la dernière ligne utilisée
lastRow = wsSource.Cells(Rows.Count, 1).End(xlUp).Row
- Cette ligne recherche la dernière ligne non vide dans la colonne A (colonne 1), en partant du bas (Rows.Count) et en remontant (xlUp).
- Trouver la dernière colonne utilisée
lastCol = wsSource.Cells(1, Columns.Count).End(xlToLeft).Column
- Cette ligne recherche la dernière colonne non vide dans la ligne 1 (ligne d’en-tête), en partant de la dernière colonne (Columns.Count) et en se déplaçant vers la gauche (xlToLeft).
- Définir la plage dynamique
Set rng = wsSource.Range(wsSource.Cells(1, 1), wsSource.Cells(lastRow, lastCol))
- Cela crée une plage dynamique qui va de la cellule A1 à la dernière cellule de données (déterminée par les dernières lignes et colonnes détectées).
- Définir la cellule de destination
Set destCell = wsDest.Cells(1, 1)
- Les données seront collées à partir de la cellule A1 de la feuille « Feuille2 ».
- Copier et coller les données
rng.Copy destCell.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False
- La plage est copiée de « Feuille1 » et collée uniquement les valeurs dans « Feuille2 », ce qui évite les problèmes de formatage.
- Notification à l’utilisateur
MsgBox "Données importées avec succès !", vbInformation, "Importation terminée"
- Ce message informe l’utilisateur que l’importation a été réussie.
Améliorations supplémentaires
Copier le formatage :
destCell.PasteSpecial Paste:=xlPasteFormats
Coller les données + largeurs de colonnes :
destCell.PasteSpecial Paste:=xlPasteColumnWidths
Gestion des erreurs :
On Error Resume Next ' Logique du code ici On Error GoTo 0