Copier dynamiquement une plage de données, Excel VBA

Copier dynamiquement une plage de données, Excel VBA

Voici un code VBA détaillé permettant de copier dynamiquement une plage de données dans Excel, accompagné d’une explication approfondie. 

Code VBA : Copier une plage dynamique 

Sub CopierPlageDynamique() 
    Dim ws As Worksheet 
    Dim derniereLigne As Long 
    Dim derniereColonne As Long 
    Dim plage As Range 
    Dim destination As Range 
    ' Définir la feuille de travail (modifier selon votre besoin) 
    Set ws = ThisWorkbook.Sheets("Feuil1") 
    ' Trouver la dernière ligne utilisée dans la colonne A (en supposant qu’elle contient toujours des données) 
    derniereLigne = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row 
    ' Trouver la dernière colonne utilisée dans la ligne 1 (en supposant qu’elle contient toujours des en-têtes) 
    derniereColonne = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column 
    ' Définir la plage dynamique basée sur la dernière ligne et la dernière colonne 
    Set plage = ws.Range(ws.Cells(1, 1), ws.Cells(derniereLigne, derniereColonne)) 
    ' Définir la plage de destination (ex. : copie dans "Feuil2", à partir de A1) 
    Set destination = ThisWorkbook.Sheets("Feuil2").Cells(1, 1) 
    ' Copier la plage et coller les valeurs et les formats 
    plage.Copy 
    destination.PasteSpecial Paste:=xlPasteValues 
    destination.PasteSpecial Paste:=xlPasteFormats 
    ' Effacer le presse-papiers 
    Application.CutCopyMode = False 
    ' Informer l'utilisateur 
    MsgBox "La plage dynamique a été copiée avec succès !", vbInformation, "Copie terminée" 
End Sub

Explication détaillée 

  1. Déclaration des variables
Dim ws As Worksheet 
Dim derniereLigne As Long 
Dim derniereColonne As Long 
Dim plage As Range 
Dim destination As Range
  • ws : Variable pour représenter la feuille contenant les données. 
  • derniereLigne : Stocke le numéro de la dernière ligne utilisée dans la colonne A. 
  • derniereColonne : Stocke le numéro de la dernière colonne utilisée dans la ligne 1. 
  • plage : Définit la plage dynamique à copier. 
  • destination : Indique où les données seront collées. 
  1. Définition de la feuille de travail

Set ws = ThisWorkbook.Sheets("Feuil1") 

  • La variable ws est définie pour pointer vers « Feuil1 » (modifiable selon vos besoins). 
  1. Trouver la dernière ligne utilisée

derniereLigne = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row 

  • ws.Rows.Count retourne le nombre total de lignes (1 048 576 en versions modernes d’Excel). 
  • .End(xlUp) remonte jusqu’à la dernière cellule occupée dans la colonne A. 
  • .Row récupère le numéro de cette ligne. 
  1. Trouver la dernière colonne utilisée

derniereColonne = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column 

  • ws.Columns.Count retourne le nombre total de colonnes (16 384 en Excel moderne). 
  • .End(xlToLeft) se déplace vers la gauche depuis la dernière colonne pour trouver la dernière cellule remplie dans la ligne 1. 
  • .Column récupère le numéro de cette colonne. 
  1. Définir la plage dynamique
Set plage = ws.Range(ws.Cells(1, 1), ws.Cells(derniereLigne, derniereColonne)) 
ws.Cells(1,1) : Premier coin de la plage (A1). 
ws.Cells(derniereLigne, derniereColonne) : Dernier coin de la plage basé sur les lignes et colonnes trouvées. 
ws.Range(..., ...) crée la plage dynamique.
  1. Définir la destination

Set destination = ThisWorkbook.Sheets("Feuil2").Cells(1, 1) 

  • Spécifie que les données copiées seront collées à partir de A1 dans « Feuil2 ». 
  1. Copier et coller les données
plage.Copy 
destination.PasteSpecial Paste:=xlPasteValues 
destination.PasteSpecial Paste:=xlPasteFormats 
.Copy copie la plage dynamique. 
.PasteSpecial Paste:=xlPasteValues colle uniquement les valeurs (évite les formules). 
.PasteSpecial Paste:=xlPasteFormats applique les formats (ex : couleurs, bordures).
  1. Effacer le presse-papiers et informer l’utilisateur
Application.CutCopyMode = False 
MsgBox "La plage dynamique a été copiée avec succès !", vbInformation, "Copie terminée"
  • Application.CutCopyMode = False empêche Excel d’afficher les cellules en mode « copié ». 
  • MsgBox affiche une boîte de dialogue pour confirmer la fin du processus. 

Comment utiliser ce code 

  1. Ouvrez Excel et appuyez sur ALT + F11 pour accéder à l’éditeur VBA. 
  2. Cliquez sur Insertion > Module
  3. Copiez-collez le code ci-dessus dans le module. 
  4. Modifiez « Feuil1 » et « Feuil2 » si nécessaire. 
  5. Exécutez CopierPlageDynamique() pour copier la plage dynamique. 
Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x