Rassembler les onglets de différents classeurs dans un seul

Airemlique -  
rEVOLV3r Messages postés 223 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour tout le monde,

J'ai plusieurs classeurs contenant chacun trois onglets. Seul l'onglet central m'intéresse.

Je cherche à obtenir un classeur rassemblant tous les onglets centraux de ces classeurs.

Quelqu'un connaitrait-il un programme VBA adéquat?

Merci d'avance pour vos réponses

PS: Cette question a déjà été posée de façon analogue mais mes connaissances en VBA ne me permettent malheureusement pas d'adapter les réponses.

11 réponses

  1. Le Pingou Messages postés 12280 Date d'inscription   Statut Contributeur Dernière intervention   1 479
     
    Bonjour,
    Vous pouvez le réaliser via clic droit sur l'onglet concerné et clic sur l'option [Déplacer ou copier..]. Dans la fenêtre, sous [Dans classeur :] vous choisissez le classeur adéquat puis cocher l'option [Créer une copie] et pour terminer clic OK. Suite ouvrir le classeur suivant et répéter les opérations (c'est plus rapide à faire qu'à l'expliquer.

    0
  2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Ou bien tu ouvres tes fichiers, sélectionnes celui qui reçoit (pour qu'il soit en premier, en haut à gauche à la fin) et fais 'fenetre / réorganiser / mosaïque' pour les avoir tous sous les yeux.
    Tu sélectionnes l'onglet voulu et tu fais un cliqué-glissé pour le déposer sur le fichier qui reçoit.
    Appuie sur Ctrl quand tu relâches la souris si tu veux copier et non déplacer l'onglet.

    eric
    0
  3. Airemlique
     
    Merci pour vos réponses.

    En réalité, il y a de nombreux classeurs et je souhaiterais utiliser une macro de façon à ce que ce soit fait de façon automatique.

    Quelqu'un a t-il une idée du code VBA à entrer?
    0
  4. rEVOLV3r Messages postés 223 Date d'inscription   Statut Membre Dernière intervention   28
     
    Bonjour,

    Il me faudrait un petite indication pour vous faire le code vba ;-)
    Est-ce que tous vos classeurs sont-ils dans le même dossier ? Si oui, cela est facile.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Airemlique
     
    Bonjour,

    merci pour vos réponses.

    Oui rEVOLV3r tous les classeurs sont dans le même dossier.

    Michel_m, en fait il s'agit de déplacer simplement les onglets des classeurs dans un seul classeur mais sans fusionner les onglets entre eux. Il s'agit s de systématiser la procédure du déplacer-copier dans un autre classeur tous ces onglets.

    Merci de votre aide
    0
  7. rEVOLV3r Messages postés 223 Date d'inscription   Statut Membre Dernière intervention   28
     
    Voilà la macro, elle nécessite certaines explications.

    ___
    Sub Import()

    'Source
    Dim ClasseurSource As Workbook
    Set ClasseurSource = ActiveWorkbook

    'Chemin du dossier où sont les classeurs excel
    Dim CheminTypeDonnees As String
    'soit en hard
    CheminTypeDonnees = "C:\Users\regis\Desktop\test\*.*" 'chemin a modifier biensur
    'soit en relatif
    'chemin = classeursource.Sheets(1).range("A1").value
    'dans ce cas il faut mettre le chemin comme marqué ci-dessus dans la case A1
    'Attention à bien laisser l'extension dans le chemin ! Si tu as plusieurs type de fichiers il faut mettre *.xls ou *xlsm suivant ce que tu as.

    'Définition du chemin à tester - PERMET DE "MONTRER" LE CHEMIN A LA MACRO
    Dim RetVal As Boolean
    Dim Chemin As String
    Chemin = "C:\Users\regis\Desktop\test"
    ChDir Chemin
    RetVal = Application.Dialogs(xlDialogOpen).Show(CheminTypeDonnees) 'ouverture de la boite de dialogue
    If RetVal = True Then Exit Sub
    'Si le chemin montré est correct, pressez sur annuler ! Pour que la macro continue. Je n'ai malheureusement toujorus pas trouvé d'autre façon de faire pour "montrer" à la macro le chemin de base sans tout faire buger la première fois.

    'Y a t'il des fichiers dans le répertoire ?
    Dim objOFS As Variant
    Set objOFS = CreateObject("Scripting.FileSystemObject")

    'Test si au moins un fichier present
    If Dir(CheminTypeDonnees) <> "" Then

    'Activer le classeur source
    ClasseurSource.Activate

    'Gérer le répertoire de fichiers excel
    fichier = Dir(CheminTypeDonnees)
    Do While fichier <> ""
    Set wbsource = Workbooks.Open(fichier) 'ouverture du premier classeur
    Set wksNewSheet = wbsource.Sheets(2) 'selection du premier onglet
    wksNewSheet.Copy after:=ClasseurSource.Sheets(1) ' mets a la place du 1 le dernier onglet de ton classeur principal
    ClasseurSource.Activate
    wbsource.Close 'fermerture du classeur excel dont l'onglet a été copié
    fichier = Dir 'Prochain classeur
    Loop 'bouclage
    End If

    End Sub
    ___

    Amicalement,
    Régis
    0
  8. Airemlique
     
    Merci Régis.

    Quelques précisions: que faut-il entrer dans

    CheminTypeDonnees = "C:\Users\regis\Desktop\test\*.*"

    Est-ce qu'il faut rentrer le dossier où sont tous les classeurs et si oui faut-il terminer par \*_*
    Ou faut-il entrer le chemin jusqu'au fichier rassemblant tous les onglets?

    Même question pour:
    Chemin = "C:\Users\regis\Desktop\test"

    Pour l'instant quand j'exécute la macro, j'ai une fenêtre d'ouverture du dossier entré dans le code qui apparait et qui me propose d'ouvrir un classeur excel. c'est normal? Dois-je ouvrir le fichier où tout sera rassemblé?
    0
  9. rEVOLV3r Messages postés 223 Date d'inscription   Statut Membre Dernière intervention   28
     
    C'est le dossier ou sont tous tes classeurs :-)
    Ton classeur excel exectue une macro avec la fonction Activeworkbook, donc il peut etre placé nimporte ou tu iras de toute facon chercher tes classeurs excel dans le répertoire que tu as noté.

    Donc pour cheminTypeDonnes tu dois rentrer le dossier ou sont tes classeurs excel pour lesquels tu veux copier leur onglet. Et oui tu dois laisser l'extension *.*
    Mais tu peux la modifier par *.xls ou *.xlsm.

    en fait * veut dire "tous les caractères" donc c'est le nom de ton fichier
    et .xls ou .xlsm pour les extensions excel
    et *.* veut dire : tous les fichiers avec nimporte quelle extension.

    Si tu laisses *.*, cela te prendra en compte tes classeurs .xls et .xlsm mais aussi tous les autres fichiers présents dans ton dossier. alors fait attention a ne pas avoir de fichiers qui ne te servent pas pour la copie de tes onglet dans ton dossier ;-)

    Le Chemin est en fait le chemin ou se trouve tes fichiers excel mais sans leur extension.

    Oui c'est normal, pour la fenetre d'ouverture. C'est juste pour vérifier si tu as le bon chemin. Cliques sur annuler et la macro se lance.

    En fait, lorsque tu lances la marcro, si l'implémentation de la fenetre ouvrir n'est pas là, elle ne va pas fonctionner car elle n'arrive pas à faire le répertoire DIR toute seule...Je sais c'est bête mais c'est la seule façon que j'ai trouvé pour qu'elle fonctionne du premier coup ^^

    Donc cliques sur annulé et ca va fonctionner :-)
    0
  10. Airemlique
     
    Merci ! C'est juste géant !

    Et merci pour les explications :)
    0
  11. rEVOLV3r Messages postés 223 Date d'inscription   Statut Membre Dernière intervention   28
     
    Mais de rien !

    J'ai commencé le VBA il y a deux semaines, et sans toutes les personnes répondant sur ce forum, je n'aurais jamais pu faire ce que je devais faire :-)

    Bonne journée
    0