Comment exporter une feuille dans un classeur (ouvert ou fermé) sur Excel ?
Pour ce nouveau chapitre nous allons découvrir plusieurs méthodes simples pour exporter une feuille Excel dans un autre classeur. Nous verrons ainsi qu’il est possible en quelques lignes de VBA seulement de dupliquer une feuille dans un classeur, même si celui-ci est fermé.
Téléchargement
Vous pouvez obtenir le fichier d'exemple de cet article et découvrir la méthode d'apprentissage de VBA pas-à-pas en cliquant sur le lien suivant :
Tutoriel Vidéo
1. Exporter une feuille dans un autre classeur
La manipulation qui permet d’exporter une feuille de calcul dans un autre classeur sur Excel est très simple.
Il suffit en effet de sélectionner la feuille de calcul en question, puis d’effectuer un clic droit avec le bouton de la souris sur l’onglet de la feuille.
Ensuite, nous choisissons l’option Déplacer ou Copier.
Dans le menu déroulant, nous pouvons choisir dans quel classeur nous souhaitons exporter la feuille.
Par défaut, Excel sélectionne le classeur actif, ce qui permet de pouvoir déplacer rapidement la feuille active à l’intérieur de celui-ci en choisissant avant quelle feuille nous souhaitons l’insérer.
Si nous sélectionnons un autre classeur, la feuille sera transférée à l’intérieur de cet autre classeur.
Nous pouvons également choisir de déplacer la feuille de calcul au sein d’un nouveau classeur créé pour l’occasion.
Ensuite, si nous activons l’option Créer une copie, alors la feuille active sera dupliquée à l’endroit désiré et l’originale restera inchangée.
Il existe également une méthode encore plus rapide, qui permet de déplacer une feuille en faisant glisser son onglet, ou encore de le dupliquer en maintenant la touche [Ctrl] enfoncée lors de ce déplacement :
Comme vous pouvez le constater, ces méthodes sont rapides à mettre en place, mais présentent l’inconvénient de ne pouvoir transférer la feuille de calcul qu’à l’intérieur d’un classeur actuellement ouvert.
Pour contourner cette limitation, nous allons développer une petite macro en VBA.
2. Dupliquer une feuille de calcul en VBA
Pour évoluer progressivement, nous allons commencer par découvrir comment dupliquer une feuille de calcul dans le classeur actif En VBA
Nous pourrons ensuite découvrir dans un second temps comment l’envoyer un classeur fermé.
Dans ce tutoriel, nous ne découvrirons que rapidement l’utilisation des macro-commandes VBA, mais si vous souhaitez aller plus loin dans la découverte de ce langage, vous pouvez évidemment consulter la formation disponible sur le blog en cliquant ici.
Pour commencer, nous allons lancer l’éditeur de code VBE (pour Visual Basic Editor), qui est l’éditeur de code intégré dans les différentes applications de la suite Office et qui permet de développer des macro-commandes en VBA.
Pour cela, nous appuyons simplement sur les touches [Alt]+[F11] :
VBE s’ouvre alors et nous allons commencer par créer un nouveau module.
Un module est une feuille de saisie de code dans laquelle nous allons pouvoir saisir nos macros et fonctions.
Pour insérer un nouveau module, nous nous rendons dans le menu Insertion > Module :
Une fois le module inséré, nous pouvons créer une macro-commande en utilisant le mot clé Sub, suivi du nom de la macro :
VBE ajouter alors la fin de la macro (la ligne End Sub).
Toutes les lignes que nous allons saisir entre ces deux lignes seront exécutées automatiquement à chaque fois que nous lancerons la macro dupliquerFeuille.
Maintenant, pour dupliquer la feuille de calcul active, nous simplement pouvoir utiliser la méthode Copy de l’objet ActiveSheet.
La particularité de cette méthode, c’est qu’elle attend deux arguments facultatifs ET exclusifs. C’est-à-dire que nous ne pouvons utiliser que l’un seul de ces deux arguments.
Ce qui est logique puisqu’ils permettent de sélectionner la feuille avant (Before) ou après (After) laquelle nous voudrons insérer la nouvelle feuille.
Ici pour l’exemple, nous allons souhaiter insérer la feuille en toute fin de classeur.
Nous utiliserons donc l’argument After, auquel nous affecterons la dernière feuille du classeur que nous obtenons avec l’instruction ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count) :
Sub dupliquerFeuille()
ActiveSheet.Copy after:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)
End Sub
Nous pouvons maintenant tester cette toute petite macro-commande en revenant dans la feuille de calcul, puis en appuyant sur les touches [Alt]+[F8] :
Nous pouvons ici sélectionner la macro dupliquerFeuille et cliquer sur le bouton Exécuter :
La feuille est maintenant dupliquée !
3. Dupliquer la feuille active dans un autre classeur
Pour dupliquer la feuille dans un autre classeur ouvert, il suffit de sélectionner ce dernier lors de la sélectionnons du classeur de destination.
Ici par exemple, nous avons un autre classeur ouvert qui est le Classeur1 (nouveau classeur par défaut d’Excel).
Pour y insérer la feuille de calcul, nous reprenons la macro-commande précédente, en modifiant les appels à ActiveWorkbook par Workbooks("Classeur1") :
Sub dupliquerFeuille()
…
' dupliquer la feuille active dans le Classeur1
ActiveSheet.Copy after:=Workbooks("Classeur1").Sheets(Workbooks("Classeur1").Sheets.Count)
End Sub
4. Dupliquer la feuille active dans un nouveau classeur
Pour dupliquer la feuille dans un nouveau classeur vide c’est encore plus simple, il suffit en effet de ne spécifier aucun argument à la méthode Copy !
Sub dupliquerFeuille()
…
' dupliquer la feuille active dans un nouveau classeur
ActiveSheet.Copy
End Sub
Une fois le nouveau classeur créé, nous pouvons l’enregistrer en utilisant la méthode SaveAs :
Dim nomFichier As String
nomFichier = ActiveWorkbook.Path & "\" & ActiveWorkbook.Name & "_" & ActiveSheet.Name & Format(Now, "_yyyymmdd") & ".xlsx"
ActiveSheet.Copy
ActiveWorkbook.SaveAs nomFichier
Nous devons commencer par enregistrer le nom du nouveau classeur dans la variable nomFichier car lorsque nous aurons effectué la copie, le classeur actif sera le nouveau classeur et donc les caractéristiques (chemin et nom) ne sont plus récupérable directement.
Ensuite, nous enregistrons le classeur.
5. Dupliquer la feuille active dans un classeur fermé
Nous en arrivons maintenant à ce qui nous intéresse dans le cadre de ce tutoriel : découvrir comment dupliquer une feuille de calcul dans un classeur existant, mais qui est actuellement fermé !
Pour cela, nous allons devoir fonctionner par étape : tout d’abord, nous commençons par ouvrir le classeur, puis y insérerons la feuille de calcul et fermons celui-ci, tout en y enregistrant les modifications.
Mais encore avant cela, nous allons créer deux variables pour y stocker le nom des deux classeurs utilisés : le classeur actif et le nouveau :
' dupliquer la feuille active dans un classeur fermé
Dim classeurActif as String, classeurCible As String
classeurActif = ActiveWorkbook.Name
classeurCible = "Classeur fermé.xlsx"
Cela étant fait, nous pouvons ouvrir le classeur en utilisant la méthode Workbooks.Open :
' ouvrir le classeur
Workbooks.Open Filename:=ActiveWorkbook.Path & "\" & classeurCible
Une fois le classeur cible ouvert, celui-ci devient le classeur actif de l’instance Excel.
Pour effectuer la duplication, nous devons donc revenir dans le classeur d’origine et pour cela, nous utilisons la méthode Activate de l’objet Windows :
' on revient au classeur d'origine
Windows(classeurActif).Activate
Nous pouvons maintenant dupliquer la feuille active dans le classeur cible :
' dupliquer la feuille
ActiveSheet.Copy after:=Workbooks(classeurCible).Sheets(Workbooks(classeurCible).Sheets.Count)
Et pour finir, nous fermons le classeur cible, en utilisant l’argument SaveChanges auquel nous donnons la valeur True, ce qui permet d’enregistrer les modifications apportées :
' fermer et enregistrer le classeur
Workbooks(classeurCible).Close True