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 :

VBA concaténation de plusieurs onglets [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 67
    Par défaut VBA concaténation de plusieurs onglets
    Bonjour,

    Je cherche le code VBA pour concaténer plusieurs onglets sur une seule feuille, en sachant qu'il faut partir de la 2 éme ligne jusqu'à la dernière remplie et cela pour tous les onglets.
    Merci par avance à vous.

    Anthony

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Concaténer des chaines de caractères, je comprends ce que ça signifie.
    En revanche, concaténer des onglets, c'est beaucoup moins clair et ça demande un peu plus d'explications.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 67
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Concaténer des chaines de caractères, je comprends ce que ça signifie.
    En revanche, concaténer des onglets, c'est beaucoup moins clair et ça demande un peu plus d'explications.
    J'ai plusieurs onglets qui ont exactement le même colonage et je souhaite les réunir sur une seule feuille

  4. #4
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut re
    Hello,

    Tu pourrais peut-être t'inspirer de ce post

    Bat

    https://www.developpez.net/forums/d1...glet-synthese/

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 67
    Par défaut
    Voici le code pour la première feuille est-il possible d'intégrer une boucle pour qu'il renouvelle cela pour toutes les feuilles ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub concatener()
        Feuil1.Range("C47").Select
        Range(Selection, Selection.End(xlDown)).Select
        Range(Selection, Selection.End(xlToRight)).Select
        Range(Selection, Selection.End(xlToRight)).Select
        Selection.Copy
        Sheets("Feuil1").Select
     Range("B1").Select
    Selection.End(xlDown).Offset(1, 0).Select
        ActiveSheet.Paste
    End Sub

  6. #6
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Citation Envoyé par Anthony_office Voir le message
    J'ai plusieurs onglets qui ont exactement le même colonage et je souhaite les réunir sur une seule feuille
    Ca s'appelle la "consolidation" faire :
    Données - Outils de Données - Consolider

    puis faire sur l'icone directement sans cliquer

    extrait de l'aide :
    Pour synthétiser et afficher des résultats de données sur des feuilles de calcul distinctes, vous pouvez consolider les données de chaque feuille dans une feuille de calcul (ou feuille maître). Les feuilles que vous consolidez peuvent figurer dans le même classeur en tant que feuille maître ou dans des classeurs différents. Lorsque vous consolidez les données dans une feuille de calcul, vous pouvez plus facilement les mettre à jour et les agréger régulièrement ou en fonction des besoins.

    Par exemple, si vous disposez d’une feuille de calcul de frais pour chaque bureau régional, vous pouvez utiliser une consolidation des données pour rassembler ces chiffres dans une feuille de calcul de dépenses d’entreprise. Cette feuille maître peut contenir les ventes totales et moyennes, les niveaux de stock actuels et les produits les plus performants pour toute l’entreprise.

    Il existe deux méthodes principales pour consolider les données :

    Consolider par position Faites appel à cette méthode lorsque les données de plusieurs zones source sont organisées dans le même ordre et utilisent les mêmes étiquettes de lignes et de colonnes, par exemple, lorsque vous utilisez une série de feuilles de calcul de frais créées à partir du même modèle.

    Consolider par catégorie Faites appel à cette méthode lorsque les données de plusieurs zones source sont organisées différemment, mais que les mêmes étiquettes de lignes et de colonnes sont utilisées. Par exemple, vous pouvez y avoir recours lorsque vous utilisez une série de feuilles de stock pour chaque mois qui utilisent la même disposition, chaque feuille de calcul contenant différents éléments ou un nombre différent d’éléments.
    ...

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 67
    Par défaut
    Bonjour,

    Voici un exemple de fichier, je souhaite copier les feuilles 1 à 5 sur la feuille Synthèse. La sélection des lignes à partir de la 11 jusqu'à ce que la colonne A soit vide.
    Merci à vous par avance

    Test concaténation.xlsx

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Voici un code qui copie les feuilles Janvier,Février, Mars dans la feuille Regroupement.

    Pour l'exemple, les feuilles mensuelles contiennent deux colonnes, la feuille de regroupement en contient une troisième pour récupérer le nom de la feuille source. Les données à copier commencent en ligne 2

    A adapter à ton cas.

    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
    Sub MergeDatas()
      Dim Sheets
      Dim Sheetname
      Dim Source As Range
      Dim Target As Range
      Dim LastRow As Long
      Dim TargetSourceNameRange As Range
     
      Sheets = Array("Janvier", "Février", "Mars")
      For Each Sheetname In Sheets
        LastRow = Worksheets(Sheetname).Range("a" & Worksheets(1).Rows.Count).End(xlUp).Row
        Set Source = Worksheets(Sheetname).Range("a2:b" & LastRow)
        Set Target = Worksheets("Regroupement").Range("a" & Worksheets(1).Rows.Count).End(xlUp)(2)
        Set TargetSourceNameRange = Target(1, 3).Resize(Source.Rows.Count)
        Source.Copy Target
        TargetSourceNameRange.Value = Sheetname
      Next
    End Sub
    PS: Pense aux balises code svp: sélection du code puis bouton # sur la barre d'édition du message... Merci
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 67
    Par défaut
    Merci Pierre pour ta réponse, peux tu m'aider à modifier le code
    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
    Sub MergeDatas()
      Dim Sheets
      Dim Sheetname
      Dim Source As Range
      Dim Target As Range
      Dim LastRow As Long
      Dim TargetSourceNameRange As Range
     
      Sheets = Array("feuil1", "feuil2", "feuil3", "feuil4", "feuil5")
      For Each Sheetname In Sheets
        LastRow = Worksheets(Sheetname).Range("a" & Worksheets(1).Rows.Count).End(xlUp).Row
        Set Source = Worksheets(Sheetname).Range("a11:u" & LastRow)
        Set Target = Worksheets("Synthese").Range("a" & Worksheets(1).Rows.Count).End(xlUp)(2)
        Set TargetSourceNameRange = Target(1, 3).Resize(Source.Rows.Count)
        Source.Copy Target
        TargetSourceNameRange.Value = Sheetname
      Next
    End Sub

  10. #10
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2023
    Messages : 5
    Par défaut Onglets variables
    Bonjour Pierre,

    Comment faire si l'on ne veut sélectionner une plage de feuilles sans les nommer ? Je souhaiterais sélectionner les onglets 3 à 50 par exemple!
    Merci d'avance pour votre réponse !


    Citation Envoyé par Pierre Fauconnier Voir le message
    Salut.

    Voici un code qui copie les feuilles Janvier,Février, Mars dans la feuille Regroupement.

    Pour l'exemple, les feuilles mensuelles contiennent deux colonnes, la feuille de regroupement en contient une troisième pour récupérer le nom de la feuille source. Les données à copier commencent en ligne 2

    A adapter à ton cas.

    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
    Sub MergeDatas()
      Dim Sheets
      Dim Sheetname
      Dim Source As Range
      Dim Target As Range
      Dim LastRow As Long
      Dim TargetSourceNameRange As Range
     
      Sheets = Array("Janvier", "Février", "Mars")
      For Each Sheetname In Sheets
        LastRow = Worksheets(Sheetname).Range("a" & Worksheets(1).Rows.Count).End(xlUp).Row
        Set Source = Worksheets(Sheetname).Range("a2:b" & LastRow)
        Set Target = Worksheets("Regroupement").Range("a" & Worksheets(1).Rows.Count).End(xlUp)(2)
        Set TargetSourceNameRange = Target(1, 3).Resize(Source.Rows.Count)
        Source.Copy Target
        TargetSourceNameRange.Value = Sheetname
      Next
    End Sub
    PS: Pense aux balises code svp: sélection du code puis bouton # sur la barre d'édition du message... Merci

  11. #11
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 193
    Par défaut
    Hello,
    Citation Envoyé par jog23 Voir le message
    Bonjour Pierre,
    Comment faire si l'on ne veut sélectionner une plage de feuilles sans les nommer ? Je souhaiterais sélectionner les onglets 3 à 50 par exemple!
    Merci d'avance pour votre réponse !
    Pierre est absent du forum en ce moment (du moins je crois) alors je répond :
    il suffit de désigner les feuilles par leur index.
    Exemple pour afficher le nom des feuilles de la troisième à la cinquantième :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub ListerFeuilles()
    Dim I As Integer
    Dim Feuille As Worksheet
    For I = 3 To 50
      Set Feuille = Sheets(I)
      Debug.Print Feuille.Name
    Next I
    End Sub
    Ami calmant, J.P

  12. #12
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2023
    Messages : 5
    Par défaut
    Bonjour JP,

    Merci pour votre aide.
    Toutefois je dois également modifier le reste de la formule de Pierre qui permet de «*grouper*» les colonnes dans un onglet regroupement.
    Sauriez-vous quelles sont les modifications à apporter ?

    Merci

  13. #13
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 138
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J.P. vous a donné la réponse, il suffit de remplacer la ligne 10 du code de Pierre soit For Each Sheetname In Sheets par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      Dim I As Integer
      For i = 3 To 50
        Set Sheetname = Worksheets(i)

    J'attire tout de même votre attention que ce code date de 2018 et que maintenant, vous pourriez le faire à l'aide de Power Query
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Comme tu n'expliques pas ce qui ne fonctionne pas, j'en suis réduit à déduire que c'est la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set TargetSourceNameRange = Target(1, 3).Resize(Source.Rows.Count)
    Essaie de bien comprendre comment ce code fonctionne (cette ligne mais également l'ensemble de la proc)

    La proc boucle sur les feuilles renseignés (Ok)
    Pour chaque feuille, elle détermine la plage A11:Uxx (xx étant la dernière ligne calculée par .End(xlUp) (OK)
    Elle détermine la cellule d'arrivée dans la feuille de destination (OK)
    Elle détermine la colonne qui viendra à droite de la dernière colonne copiée (PAS OK). Moi, je t'ai donné un code pour deux colonnes source et donc une colonne C qui récupère le nom de la feuille source. Puisque tu copies non pas A:B, mais A:U, la colonne qui doit recevoir le nom de la feuille source est donc la V (logique, n'est-ce pas? ). Dès lors, tu dois utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set TargetSourceNameRange = Target(1, 22).Resize(Source.Rows.Count)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  15. #15
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 67
    Par défaut
    Merci beaucoup pour votre aide. J'ai réussi enfin

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/08/2014, 21h48
  2. [XL-2007] Macro VBA pour imprimer plusieurs onglets sur une feuille recto verso
    Par oekoniko dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/03/2014, 15h24
  3. codage vba: recherchev sur plusieurs onglets
    Par sims92.66 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/02/2012, 15h48
  4. Réponses: 2
    Dernier message: 14/09/2011, 16h17
  5. [VBA-E] Impression page paire sur plusieurs onglets
    Par liop49 dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 17/02/2005, 15h19

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