Créer une plage dynamique et l’exporter, Excel VBA
Voici une explication détaillée et un code VBA pour créer une plage dynamique et l’exporter dans un autre fichier Excel. Cet exemple montre comment sélectionner dynamiquement une plage en fonction de la dernière cellule utilisée dans vos données, puis l’exporter vers un autre classeur.
Objectif :
- Sélectionner une plage dynamique qui s’ajuste automatiquement en fonction des données présentes dans votre feuille de calcul.
- Exporter cette plage vers un nouveau classeur.
Étapes à suivre :
- Déterminer la dernière ligne et la dernière colonne : La première étape consiste à identifier la dernière ligne et la dernière colonne de vos données. Cela permet de s’assurer que la plage sélectionnée soit dynamique et s’ajuste à la taille de vos données.
- Créer un objet Range (plage) : Une fois la dernière ligne et la dernière colonne identifiées, nous pouvons les utiliser pour définir la plage dynamique.
- Copier la plage : Après avoir défini la plage dynamique, vous pouvez copier cette plage dans un nouveau classeur pour l’exporter.
- Sauvegarder le nouveau classeur : Enfin, vous allez sauvegarder le nouveau classeur où les données ont été exportées.
Code VBA :
Sub ExporterPlageDynamique() Dim ws As Worksheet Dim derniereLigne As Long, derniereColonne As Long Dim plageDynamique As Range Dim nouveauClasseur As Workbook Dim feuilleExport As Worksheet ' Définir la feuille active Set ws = ThisWorkbook.Sheets("Sheet1") ' Changez "Sheet1" par le nom de votre feuille ' Trouver la dernière ligne avec des données dans la colonne A (changez de colonne si nécessaire) derniereLigne = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' Trouver la dernière colonne avec des données dans la ligne 1 (changez de ligne si nécessaire) derniereColonne = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column ' Définir la plage dynamique Set plageDynamique = ws.Range(ws.Cells(1, 1), ws.Cells(derniereLigne, derniereColonne)) ' Copier la plage dynamique plageDynamique.Copy ' Créer un nouveau classeur pour exporter les données Set nouveauClasseur = Workbooks.Add Set feuilleExport = nouveauClasseur.Sheets(1) ' Feuille par défaut dans le nouveau classeur ' Coller les données dans le nouveau classeur feuilleExport.Paste ' Optionnel : Nettoyer tout formatage ou effectuer d'autres ajustements si nécessaire feuilleExport.Cells(1, 1).Select ' Optionnel : Aller à la première cellule ' Sauvegarder le nouveau classeur (vous pouvez spécifier le chemin d'enregistrement ici) nouveauClasseur.SaveAs "C:\chemin\vers\enregistrer\données_exportées.xlsx" ' Changez le chemin d'enregistrement ' Fermer le nouveau classeur (optionnel) nouveauClasseur.Close SaveChanges:=False ' Informer l'utilisateur que l'exportation a réussi MsgBox "Données exportées avec succès !", vbInformation End Sub
Explication du Code :
1. Définir la feuille :
Set ws = ThisWorkbook.Sheets("Sheet1")
Cette ligne définit une référence à la feuille contenant les données que vous souhaitez exporter. Remplacez « Sheet1 » par le nom de votre feuille.
2. Trouver la dernière ligne et la dernière colonne :
derniereLigne = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row derniereColonne = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
- derniereLigne est calculée en partant de la dernière ligne possible (ws.Rows.Count) dans la colonne « A » et en remontant pour trouver la première cellule contenant des données.
- derniereColonne est calculée en partant de la dernière colonne possible (ws.Columns.Count) dans la ligne 1 et en allant vers la gauche pour trouver la première cellule contenant des données.
3. Définir la plage dynamique :
Set plageDynamique = ws.Range(ws.Cells(1, 1), ws.Cells(derniereLigne, derniereColonne))
Cette ligne définit une plage dynamique partant de la cellule A1 (ws.Cells(1, 1)) et s’étendant jusqu’à la dernière ligne et colonne avec des données.
4. Copier la plage : plageDynamique.Copy
La plage dynamique est copiée dans le presse-papiers pour être collée dans le nouveau classeur.
5. Créer un nouveau classeur : Set nouveauClasseur = Workbooks.Add
Un nouveau classeur est créé où la plage dynamique sera exportée.
6. Coller les données : feuilleExport.Paste
Les données copiées depuis le classeur original sont collées dans la première feuille du nouveau classeur.
7. Sauvegarder le nouveau classeur :
nouveauClasseur.SaveAs "C:\chemin\vers\enregistrer\données_exportées.xlsx"
Le nouveau classeur est sauvegardé à l’emplacement spécifié. N’oubliez pas de remplacer « C:\chemin\vers\enregistrer\données_exportées.xlsx » par le chemin et le nom du fichier souhaité.
8. Fermer le nouveau classeur :
nouveauClasseur.Close SaveChanges:=False
Le nouveau classeur est fermé sans enregistrer de modifications supplémentaires après l’exportation des données.
10. Message de confirmation :
MsgBox "Données exportées avec succès !", vbInformation
Un message informant l’utilisateur que l’exportation a été réussie s’affiche.
Personnalisation :
- Si vos données commencent dans une autre ligne ou colonne, modifiez les références de ligne/colonne dans le code.
- Vous pouvez changer le chemin du fichier et le format dans la ligne SaveAs pour répondre à vos besoins (par exemple, sauvegarder en .csv au lieu de .xlsx).
- Si vous souhaitez exporter plusieurs feuilles ou ajuster le formatage, vous pouvez étendre le code en conséquence.