IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Macro pour regrouper plusieurs classeurs en un seul (1 classeur par onglet) [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Adjointe à la production de documents
    Inscrit en
    Juillet 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Adjointe à la production de documents
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2015
    Messages : 5
    Par défaut Macro pour regrouper plusieurs classeurs en un seul (1 classeur par onglet)
    Salut tout le monde! Je suis novice en VBA; disons que j'essaie d'apprendre par moi-même en lisant sur des forums et tout. Par contre, cette fois, ce que je veux faire ne fonctionne pas du tout! Pourtant, j'ai essayé plusieurs codes que j'ai vu sur des sites, mais rien n'y fait. Je suis proche de m'arracher les cheveux en hurlant de détresse haha!

    Alors, voilà, j'ai plusieurs classeurs (nommons-les Classeur1, Classeur2 et Classeur3) avec des données différentes, mais le même nombre de lignes et de colonnes. Je veux pouvoir les regrouper en un seul et même classeur (nommons-le Fusion), à partir d'une macrocommande qui se trouvera déjà dans le classeur Fusion. Chaque classeur doit se retrouver sur un onglet différent. Donc :

    Regrouper Classeur1, Classeur2, Classeur3

    Résultat : Fusion, incluant 4 onglets : Feuil_bouton, Feuil1, Feuil2, Feuil3

    Et c'est tout! Je suis incapable! Aidez-moi, svp!!!

    Merci à l'avance de votre précieuse aide!!!!

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut
    Salut à toi,

    Ce que tu veux faire ne représente pas vraiment de grande difficulté. Ce qui te pose problème est le fait d'être novice, mais tu verras que très vite, quand le code correspondant à tes attentes viendra (d'ici quelques heures max, peut-être même de moi ), que ce n'est que très logique. Cependant, il y a une donnée qui manque "cruellement" : tes classeurs ont-ils plusieurs pages ?

    Dès que tu peux communiquer cela, et que je vois ton message, je m'y atèle

    Quentin

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Adjointe à la production de documents
    Inscrit en
    Juillet 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Adjointe à la production de documents
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2015
    Messages : 5
    Par défaut
    Oui, tu as bien raison! J'ai complètement oublié de préciser ce point!

    Quelques classeurs ont un seul onglet et d'autres en ont deux. Donc, il faudrait que chaque onglet de chaque classeur se retrouve sur un onglet différent.

    Par exemple :

    Classeur1 incluant Feuil1, Feuil2.
    Classeur2 incluant Feuil3
    Classeur3 incluant Feuil4, Feuil5

    ---> Fusion incluant Feuil_bouton, Feuil1, Feuil2, Feuil3, Feuil4, Feuil5

    Les onglets peuvent avoir n'importe quel titre, ce n'est vraiment pas important.

    Un GROS merci!!!

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut
    Super, cela devient encore plus simple

    Je vais essayer de faire quelque chose de compréhensible, pas forcément concis car je veux que tu puisses le refaire plus tard ou l'adapter à ton besoin réel !

    Cependant, si entre temps tu vois ce message, dis-moi si tu sais où sont tes fichiers ou si l'utilisateur doit aller les chercher lui-même. Enfin, est-ce que tes classeurs ont des feuilles vides ou non ?

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut Proposition
    Resalut, voici une proposition de code, je suis parti du principe que les classeurs n'ont pas de feuilles inutiles (vides) et que l'utilisateur choisirait ses fichiers à importer.

    Dis-moi ce que tu en penses.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Sub test()
     
    'On crée une variable 'wbFusion' de type Classeur Excel
    Dim wbFusion As Workbook
    'On l'associe au classeur à partir duquel tu lances la macro
    Set wbFusion = ThisWorkbook
     
    'On crée une variable wbCible qui va correspondre tour à tour aux classeur à importer
    Dim wbCible As Workbook
    Dim shCible As Worksheet
     
    'Afin de lui affecter des fichiers, l'utilisateur va les sélectionner via une boîte de dialogue
    'NOTA : le With XXXXXXXXX évite de répéter plein de fois XXXXXXXXX lorsque l'on parle de la même chose ;)
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "Choisissez le(s) classeur(s) à importer"
        .Filters.Add "Classeur Excel", "*.xls,*.xls?" 'on filtre par tous les fichiers .xls et xls? avec '?' signifiant "1 caractère"
        .ButtonName = "Importer ce(s) classeur(s)"
        .AllowMultiSelect = True 'on autorise la sélection multiple
        .Show 'on affiche la fenêtre, on attend le retour de l'utilisateur pour continuer
     
        'on a réglé la boîte de dialogue, maintenant il faut traiter les données de l'utilisateur :
        'si l'utilisateur n'a pas sélectionné de fichier, on met un message d'erreur
        If .SelectedItems.Count = 0 Then
            MsgBox "Veuillez sélectionner au moins un fichier", vbExclamation, "Erreur"
        'Sinon, on traite :
        Else
            For i = 1 To .SelectedItems.Count
                'On ouvre chaque classeur un par un
                Set wbCible = Workbooks.Open(.SelectedItems(i))
                CouleurOnglet = RGB(Rnd * 255, Rnd * 255, Rnd * 255) 'on va mettre toutes les pages de ce classeur importées avec l'onglet de la même couleur
                CompteurClasseur = CompteurClasseur + 1 'on incrémente un compteur, facultatif
                'Pour chaque feuille du wbCible :
                For Each shCible In wbCible.Sheets
                    shCible.Tab.Color = CouleurOnglet
                    shCible.Name = Int(Rnd * 99999) 'nom aléatoire pour être certain qu'il n'y ait pas de doublon plantant la macro
                    shCible.Copy after:=wbFusion.Sheets(wbFusion.Sheets.Count) 'on la copie à la fin de wbFusion
                    CompteurFeuille = CompteurFeuille + 1 'on incrémente un compteur, facultatif
                Next shCible
                'On ferme le classeur sans enregistrer (on a changé le nom des pages avant copie)
                wbCible.Close SaveChanges:=False
            'On passe au classeur suivant
            Next i
            'Facultatif, à l'aide des compteurs, on indique à l'utilisateur que tout s'est bien passé
            MsgBox CompteurFeuille & " feuilles ont bien été importées, provenant de " & CompteurClasseur & " classeurs Excel.", vbInformation, "Import réussi"
        End If
    End With
     
    End Sub

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Adjointe à la production de documents
    Inscrit en
    Juillet 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Adjointe à la production de documents
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2015
    Messages : 5
    Par défaut
    WOW!!!! Ça fonctionne parfaitement!!!! Je suis trop heureuse, tu ne peux pas imaginer!!!! En plus, tu as tout super bien expliqué! J'avais passé environ 10 heures à essayer des trucs qui ne donnaient rien du tout! T'es mon sauveur!!!! (Désolée pour ma grande enthousiasme hihi! Mon champ d'expertise tourne plutôt autour des services linguistiques "humains", et non des langages informatiques.) (Comment est-ce possible que ce site soit gratuit!?)

    Puisque je suis nouvelle ici, dois-je faire quelque chose d'autre que cliquer sur "Résolu"? J'ai vu qu'il y a un système de points. Dois-je fais quelque chose pour ça?

    MERCI BEAUCOUP!!!!!

  7. #7
    Invité de passage
    Homme Profil pro
    Administratif
    Inscrit en
    Janvier 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2019
    Messages : 1
    Par défaut Modification pour générer un seul onglet
    Citation Envoyé par Quentin77170 Voir le message
    Resalut, voici une proposition de code, je suis parti du principe que les classeurs n'ont pas de feuilles inutiles (vides) et que l'utilisateur choisirait ses fichiers à importer.

    Dis-moi ce que tu en penses.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Sub test()
     
    'On crée une variable 'wbFusion' de type Classeur Excel
    Dim wbFusion As Workbook
    'On l'associe au classeur à partir duquel tu lances la macro
    Set wbFusion = ThisWorkbook
     
    'On crée une variable wbCible qui va correspondre tour à tour aux classeur à importer
    Dim wbCible As Workbook
    Dim shCible As Worksheet
     
    'Afin de lui affecter des fichiers, l'utilisateur va les sélectionner via une boîte de dialogue
    'NOTA : le With XXXXXXXXX évite de répéter plein de fois XXXXXXXXX lorsque l'on parle de la même chose ;)
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "Choisissez le(s) classeur(s) à importer"
        .Filters.Add "Classeur Excel", "*.xls,*.xls?" 'on filtre par tous les fichiers .xls et xls? avec '?' signifiant "1 caractère"
        .ButtonName = "Importer ce(s) classeur(s)"
        .AllowMultiSelect = True 'on autorise la sélection multiple
        .Show 'on affiche la fenêtre, on attend le retour de l'utilisateur pour continuer
     
        'on a réglé la boîte de dialogue, maintenant il faut traiter les données de l'utilisateur :
        'si l'utilisateur n'a pas sélectionné de fichier, on met un message d'erreur
        If .SelectedItems.Count = 0 Then
            MsgBox "Veuillez sélectionner au moins un fichier", vbExclamation, "Erreur"
        'Sinon, on traite :
        Else
            For i = 1 To .SelectedItems.Count
                'On ouvre chaque classeur un par un
                Set wbCible = Workbooks.Open(.SelectedItems(i))
                CouleurOnglet = RGB(Rnd * 255, Rnd * 255, Rnd * 255) 'on va mettre toutes les pages de ce classeur importées avec l'onglet de la même couleur
                CompteurClasseur = CompteurClasseur + 1 'on incrémente un compteur, facultatif
                'Pour chaque feuille du wbCible :
                For Each shCible In wbCible.Sheets
                    shCible.Tab.Color = CouleurOnglet
                    shCible.Name = Int(Rnd * 99999) 'nom aléatoire pour être certain qu'il n'y ait pas de doublon plantant la macro
                    shCible.Copy after:=wbFusion.Sheets(wbFusion.Sheets.Count) 'on la copie à la fin de wbFusion
                    CompteurFeuille = CompteurFeuille + 1 'on incrémente un compteur, facultatif
                Next shCible
                'On ferme le classeur sans enregistrer (on a changé le nom des pages avant copie)
                wbCible.Close SaveChanges:=False
            'On passe au classeur suivant
            Next i
            'Facultatif, à l'aide des compteurs, on indique à l'utilisateur que tout s'est bien passé
            MsgBox CompteurFeuille & " feuilles ont bien été importées, provenant de " & CompteurClasseur & " classeurs Excel.", vbInformation, "Import réussi"
        End If
    End With
     
    End Sub
    Bonjour.
    je suis un peu dans la même problématique sauf que je souhaiterais que tout se compile sur un même onglet, à la suite...
    Est il possible de modifier cette macro pour que cela soit possible ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Macro pour regrouper plusieurs feuilles en une seule
    Par OLIV420 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/08/2010, 08h36
  2. [Maven2] Regrouper plusieurs POM en 1 seul
    Par crawling5 dans le forum Maven
    Réponses: 2
    Dernier message: 07/08/2007, 08h28
  3. Regrouper plusieurs requêtes en une seule?
    Par kabkab dans le forum Requêtes
    Réponses: 12
    Dernier message: 28/07/2007, 11h54
  4. Regrouper plusieurs fichiers en un seul
    Par kurkaine dans le forum C++Builder
    Réponses: 6
    Dernier message: 29/09/2006, 20h14
  5. regrouper plusieurs champ dans un seul en requete
    Par Nicko29 dans le forum Access
    Réponses: 12
    Dernier message: 07/09/2005, 18h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo