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 :

copie de tous les onglets dans un même onglet


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Novembre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2020
    Messages : 3
    Points : 2
    Points
    2
    Par défaut copie de tous les onglets dans un même onglet
    Bonjour

    je souhaite copier tous les onglets (300) dans un même onglet, en mettant les données les unes en dessous des autres
    Malheureusement le nom des onglets n'a pas de logique. Les colonnes dans les onglets, elles sont homogènes.
    Merci pour votre aide.



    Cordialement

  2. #2
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Salut.

    Merci de préciser ta version d'Excel. Je suis parti de l'idée que tu as au moins la 2010, donc que tu peux utiliser Power Query.


    Solution Power Query

    Il faut que tes données dans les 300 feuilles soient transformées en tableau (je pense que Power Query ne peut pas combiner autre chose que des tableaux lorsqu'il faut reprendre toutes les feuilles du classeur, à vérifier). Cela peut se faire par VBA. Pour aller vite, pas besoin de nommer tes tableaux de manière spécifique... ils peuvent s'appeler Tableau1, Tableau2, ...

    Lorsque tes tableaux sont transformés:
    • Onglet données> Obtenir des données > A partir d'autres sources > Requête vide
    • Dans la barre de formule Power Query, saisir = Excel.CurrentWorkbook() (Attention, Power Query est sensible à la casse);
    • Filtrer sur les tableaux dont le nom ne commence pas par "t_";
    • Développer les tables pour récupérer toutes les données de toutes les tables à la suite les unes des autres;
    • Renommer ta requête Power Query en t_Résulat;
    • Renvoyer dans Excel.




    Solution VBA, si on doit prendre toutes les feuilles en compte, et en comptant sur le fait que tes données démarrent en A1 de chaque feuille

    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
    Sub Conso()
      Dim shResult As Worksheet
      Dim sh As Worksheet
      Dim Target As Range
      Dim Source As Range
     
      Set shResult = Worksheets.Add(after:=Worksheets(Worksheets.Count))
      shResult.Name = "Consolidation"
     
      shResult.Range("1:1").Value = Worksheets(1).Range("1:1").Value
      For Each sh In Worksheets
        If sh.Name <> "Consolidation" Then
          Set Target = shResult.Range("a1048576").End(xlUp)(2)
          Set Source = sh.Range("a1").CurrentRegion
          Set Source = Source.Offset(1).Resize(Source.Rows.Count - 1)
          Target.Resize(Source.Rows.Count, Source.Columns.Count).Value = Source.Value
        End If
      Next
    End Sub
    "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...
    ---------------

  3. #3
    Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Novembre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2020
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour vos solutions

    Le code VBA fonctionne parfaitement.


    Milles merci.

    Cdlt

  4. #4
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    C'est probablement que la feuille sur laquelle tu passes à ce moment-là est vide ou ne contient qu'une seule ligne, et donc qu'elle est "vide" en termes de données (Une ligne d'intitulés mais pas de lignes de données)



    Dans ce cas, il faut tester qu'il y a bien des données dans la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      For Each sh In Worksheets
        If sh.Name <> "Consolidation" Then
          Set Target = shResult.Range("a1048576").End(xlUp)(2)
          Set Source = sh.Range("a1").CurrentRegion
          If Source.Rows.Count > 1 Then
            Set Source = Source.Offset(1).Resize(Source.Rows.Count - 1)
            Target.Resize(Source.Rows.Count, Source.Columns.Count).Value = Source.Value
          End If
        End If
      Next
    "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...
    ---------------

  5. #5
    Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Novembre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2020
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Oui, c'était bien cela ( onglet vide)
    Je m'en suis rendu compte en testant le code.

    Merci pour ton aide.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/09/2017, 13h24
  2. Ouvrir tous les classeurs dans un même process
    Par sorcer1 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 01/10/2008, 19h05
  3. Centrage horizontal et vertical dans tous les onglets
    Par bibvba dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/04/2008, 10h30
  4. Réponses: 0
    Dernier message: 23/12/2007, 15h24
  5. Comment attraper tous les noeud d'un même type dans un tableau
    Par lodan dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 01/04/2007, 17h36

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