Importation dynamique d’une plage de données, Excel VBA

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 : 

  1. Identifier dynamiquement la dernière ligne et la dernière colonne. 
  2. Sélectionner et importer les données dans une autre feuille de calcul. 
  3. 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 

  1. 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. 
  1. 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). 
  1. 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). 
  1. 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). 
  1. 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 ». 
  1. 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. 
  1. 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

 

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x