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
- 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.
- 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).
- 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.
- 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.
- 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.
- 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 ».
- 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).
- 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
- Ouvrez Excel et appuyez sur ALT + F11 pour accéder à l’éditeur VBA.
- Cliquez sur Insertion > Module.
- Copiez-collez le code ci-dessus dans le module.
- Modifiez « Feuil1 » et « Feuil2 » si nécessaire.
- Exécutez CopierPlageDynamique() pour copier la plage dynamique.