VBA Excel: Importer des feuilles vers un classeur [Résolu/Fermé]

- - Dernière réponse : cs_Le Pivert
Messages postés
6416
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
3 décembre 2019
- 23 févr. 2015 à 17:56
Bonjour,

Je cherche un code fiable me permettant d'importer les feuilles d'un classeur à un autre.
Concrètement, en ouvrant le classeur contenant la macro puis en appuyant sur un bouton, j'aimerais pouvoir récupérer toutes les feuilles d'un classeur à choisir mais situé dans le même répertoire.
Est-ce que quelqu'un saurait faire?

Merci!
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
6416
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
3 décembre 2019
419
9
Merci
Faire alt f11 pour accéder à l'éditeur
Insérer un UserForm
Mettre un bouton avec ce code



Option Explicit
Private Sub CommandButton1_Click()
 Dim i As Integer
 Dim nom As String
    Workbooks.Open ThisWorkbook.Path & "\" & "Classeur1.xls" 'classeur à copier a adapter le nom
 'on parcourt toutes les feuilles
 For i = 1 To Worksheets.Count
 Workbooks("Classeur1.xls").Activate 'classeur à copier a adapter le nom
nom = Worksheets(i).Name
Sheets(nom).Select
 Sheets(nom).Copy after:=Workbooks("Copier_onglet.xls").Sheets(1) 'classeur à coller a adapter le nom
Next
End Sub


Dire « Merci » 9

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 64152 internautes nous ont dit merci ce mois-ci

Merci pour la réactivité!
Lorsque j'intègre ce code au précédent, il me propose bien de choisir un document dans le répertoire concerné, mais j'obtiens un message d'erreur et j'ai l'impression qu'il ouvre le bon fichier sans pour autant utiliser son nom dans le code:
Private Sub CommandButton2_Click()
Dim i As Integer
Dim nom As String
Dim Nomdececlasseur As String
Dim chemin As Variant
Application.DisplayAlerts = False
chemin = Application.GetOpenFilename("Classeurs Excel (*.xls), *.xls")
Workbooks.Open ThisWorkbook.Path & "\" & chemin 'classeur à copier a adapter le nom
'on parcourt toutes les feuilles
For i = 1 To Worksheets.Count
Workbooks(chemin).Activate 'classeur à copier a adapter le nom
nom = Worksheets(i).Name
Nomdececlasseur = ThisWorkbook.Name
Sheets(nom).Select
Sheets(nom).Copy After:=Workbooks(Nomdececlasseur).Sheets(1) 'classeur à coller a adapter le nom
Sheets(nom).Move After:=Sheets(Sheets.Count) 'on met les onglets dans l'ordre
Next
Workbooks(Nomdececlasseur).Sheets(1).Activate
Application.DisplayAlerts = True
End Sub


Ai-je fait une erreur dans l'intégration du code?
cs_Le Pivert
Messages postés
6416
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
3 décembre 2019
419 > Amélie -
Oui:
j'ai mis cela
chemin = Application.GetOpenFilename("Classeurs Excel (*.xls), *.xls")
 Workbooks.Open (chemin)


et non pas cela
 chemin = Application.GetOpenFilename("Classeurs Excel (*.xls), *.xls")
    Workbooks.Open ThisWorkbook.Path & "\" & chemin 'classeur à copier a 


Voici le code:

Dim i As Integer
 Dim nom As String
 Dim Nomdececlasseur As String
 Dim Nomcopie As String
 Dim chemin As Variant
 Application.DisplayAlerts = False
  chemin = Application.GetOpenFilename("Classeurs Excel (*.xls), *.xls")
   Workbooks.Open (chemin)
'classeur à copier
 Nomcopie = ThisWorkbook.Name
 'on parcourt toutes les feuilles
 For i = 1 To Worksheets.Count
 Workbooks(Nomcopie & ".xls").Activate 'classeur à copier a adapter le nom
nom = Worksheets(i).Name
Nomdececlasseur = ThisWorkbook.Name
Sheets(nom).Select
 Sheets(nom).Copy After:=Workbooks(Nomdececlasseur).Sheets(1) 'classeur à coller a adapter le nom
Sheets(nom).Move After:=Sheets(Sheets.Count) 'on met les onglets dans l'ordre
Next
Workbooks(Nomdececlasseur).Sheets(1).Activate
Application.DisplayAlerts = True
Merci. Après avoir lancé le code, j'obtiens un message d'erreur qui empêche son exécution: "Run-time error '9': Subscript out of range".
J'ai l'impression que les variables "Nomdececlasseur" que j'avais ajoutée et "Nomcopie" de votre ajout pointent vers le même classeur en l'occurrence celui qui contient la macro, cela pourrait venir de là, non?
C'est bon, j'ai trouvé la solution à partir de votre code!
J'ai remplacé la ligne 10 par:
Nomcopie = ActiveWorkbook.Name

et la ligne 13 par:
Workbooks(Nomcopie).Activate

et ça semble fonctionner!
Merci encore pour votre aide, votre patience et votre réactivité!
cs_Le Pivert
Messages postés
6416
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
3 décembre 2019
419 -
Content que cela fonctionne. J'ai fait le code à main levé et pas testé!

Effectivement puisque :
Nomdececlasseur = ThisWorkbook.Name
Sheets(nom).Copy After:=Workbooks(Nomdececlasseur).Sheets(1)

il fallait utiliser:
Nomcopie = ActiveWorkbook.Name
Workbooks(Nomcopie).Activate

Bonne continuation
Messages postés
6416
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
3 décembre 2019
419
0
Merci
Bonjour,

Il faut savoir que si vous voulez ajouter des feuilles dans un classeur, il faut que leur nom soit différent!

Ensuite savoir a quel endroit vous voulez les insérer.

En attendant une réponse consultez ce site:

http://www.info-3000.com/vbvba/onglet.php
Bonjour,

et merci pour le lien. Il est évident que le nom des onglets sera différent. Le classeur contenant la macro ne contiendra qu'un onglet (ex: "Récapitulatif"), et les onglets du classeur à choisir dans le même répertoire s'ajouteront à la suite, telle est l'idée.
L'onglet "Récapituatif" pour l'exemple sera le premier, et les autres suivront dans le même ordre qu'ils ont été organisés dans leur classeur d'origine.
Merci