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 :

Récapitulatif de plusieurs feuilles dans une seule


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 58
    Par défaut Récapitulatif de plusieurs feuilles dans une seule
    Bonsoir à toutes et à tous,

    Je sollicite votre aide une fois de plus car là, je bloque complètement.

    Je dispose d'un classeur Excel contenant une dizaine de feuilles, une par client.
    Chaque feuille contient le même tableau, seul le contenu des cellules changent en fonction des commandes du client (feuille1 client1; feuille2 client2; etc.).

    Dans une dernière feuille, je souhaiterait disposer du même tableau mais récapitulatif de tous les autres. Avec un filtre je pourrais alors sélectionner toutes les commandes pour une date choisie.

    Ce tableau doit être mis à jour automatiquement dès qu'une ligne est ajoutée sur l'un des tableaux clients.

    En espérant avoir été clair et en attendant votre aide avec impatience, Merci!

    Elumastebit

  2. #2
    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
    Bonsoir

    Sans vba, pas de salut, à mon avis...

    Avec VBA et un peu de mise en place...

    1. Nommer les feuilles contenant des données clients de façon à pouvoir les identifier par code (par exemple, Cli_xxx)
    2. Nommer la feuille récapitulative

    Placer le code suivant dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Consolidation()
        Dim shSource As Worksheet
        Dim shCible As Worksheet
     
        Set shCible = Worksheets("Recap")
     
        ' Vidange de la feuile récap
        shCible.Range(shCible.Cells(2, 1), shCible.Cells(Rows.Count, Columns.Count)).ClearContents
     
        For Each shSource In Worksheets
            If Left(shSource.Name, 4) = "Cli_" Then _
                shSource.Range(shSource.Range("a2"), shSource.Cells.SpecialCells(xlCellTypeLastCell)).Copy Destination:=shCible.Range("a" & Rows.Count).End(xlUp)(2)
        Next
    End Sub
    Ce code fonctionne pour autant que les feuilles aient une structure identique, car c'est l'entièreté de la plage utilisée de la feuille qui est copiée dans le récapitulatif...

    Il est préférable d'éviter la mise à jour du récapitulatif à chaque changement dans une feuille. J'ai choisi de réaliser la mise à jour lors de l'activation de la feuille récapitulative, en plaçant ce code dans le module de la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Activate()
        Consolidation
    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
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 58
    Par défaut
    Bonjour,

    Merci Pierre ça marche impeccable, j'ai juste modifié quelques valeurs vu que les données de mon tableau ne commençait pas en a2.

    J'aimerai également créer un autre récapitulatif mais cette fois si, seules les comandes clients non traitées seraient affichées dans ce tableau. Pour cela il suffit que les cellules "AIi" de chaque feuille soient vides ca donnerait un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Consolidation2()
        Dim shSource As Worksheet
        Dim shCible2 As Worksheet
     
        Set shCible2 = Worksheets("En cours")
        
        ' Vidange de la feuile En cours
        shCible2.Range(shCible2.Cells(6, 1), shCible2.Cells(Rows.Count, Columns.Count)).ClearContents
        
        For Each shSource In Worksheets
         If Left(shSource.Name, 3) = "Cl_"  et si colonne AI=vide Then _
                shSource.Range(shSource.Range("a6"), shSource.Cells.SpecialCells(xlCellTypeLastCell)).Copy Destination:=shCible2.Range("a" & Rows.Count).End(xlUp)(3)
        Next
    End Sub
    Pouvez-vous me dépannez svp?

    Merci encore pour votre aide.

    Elumastebit

    Re,

    J'ai essyé en rajoutant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For Each shSource In Worksheets
            If Left(shSource.Name, 3) = "Cl_" And shSource.Columns(AI) = "" Then _
                shSource.Range(shSource.Range("a6"), shSource.Cells.SpecialCells(xlCellTypeLastCell)).Copy Destination:=shCible2.Range("a" & Rows.Count).End(xlUp)(3)
        Next
    Résultat erreur 1004 <erreur définie par l'application ou par l'objet>

    Si quelqu'un à une idée.

    Merci.

    Elumastebit

  4. #4
    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
    Bonsoir

    Ma première solution fonctionne lorsque l'on peut prendre toutes les données sans devoir utiliser un critère.

    A partir du moment où un critère doit être appliqué, on peut appliquer deux solutions:
    1. Passer les données ligne par ligne en appliquant un critère (coûteux en temps car il faut boucler sur toutes les lignes de chaque feuille et transférer ligne par ligne.

    2. Passer tout en bloc comme dans ma première solution, puis éliminer après avec un tri. Voici un code qui fait cela (je n'ai pas adapté à tes données, reviens si pb)
    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
    Sub ConsolidationCommandesNonTraitees()
        Dim shSource As Worksheet
        Dim shCible As Worksheet
        Dim Plage As Range
        Set shCible = Worksheets("Recap")
     
        ' Vidange de la feuile récap
        shCible.Range(shCible.Cells(2, 1), shCible.Cells(Rows.Count, Columns.Count)).ClearContents
     
        ' Copie des données en bloc
        For Each shSource In Worksheets
            If Left(shSource.Name, 4) = "Cli_" Then _
                shSource.Range(shSource.Range("a2"), shSource.Cells.SpecialCells(xlCellTypeLastCell)).Copy _
                    Destination:=shCible.Range("a" & Rows.Count).End(xlUp)(2)
        Next
     
        ' Tri et suppression des commandes traitées dans la feuille récap
        Set Plage = shRecap.Range("a1:d" & shRecap.Range("a" & Rows.Count).End(xlUp).Row)
        Plage.Sort key1:=Plage.Range("d1"), order1:=xlAscending, header:=xlYes
        shRecap.Rows("2:" & shRecap.Range("d" & Rows.Count).End(xlUp).Row).Delete
    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...
    ---------------

  5. #5
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 58
    Par défaut
    Erreur d'éxécution 424 Objet requis et le débogueur pointe sur la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set Plage = shRecap.Range("a1:d" & shRecap.Range("a" & Rows.Count).End(xlUp).Row)
    Au passage de la souris sur "set plage" il me met: "plage=nothing"

    Alors ok il y a rien dans la plage mais...?

    Merci

  6. #6
    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
    Désolé, au temps pour moi. C'est une erreur de recopie de code...

    Voici les lignes correctes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        ' Tri et suppression des commandes traitées dans la feuille récap
        Set Plage = shCible.Range("a1:d" & shCible.Range("a" & Rows.Count).End(xlUp).Row)
        Plage.Sort key1:=Plage.Range("d1"), order1:=xlAscending, header:=xlYes
        shCible.Rows("2:" & shCible.Range("d" & Rows.Count).End(xlUp).Row).Delete
    "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...
    ---------------

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

Discussions similaires

  1. [XL-2007] Copier plusieurs feuilles de plusieurs fichier dans une seule feuille
    Par QcSylvanio dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 03/10/2012, 22h02
  2. [Toutes versions] Macro regroupant plusieurs classeurs dans une seule feuille
    Par lisandjo dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 23/04/2012, 07h52
  3. [XL-2003] Copier plusieurs feuilles dans une seule
    Par RussellD dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/09/2010, 15h20
  4. Import de tableaux de plusieurs feuilles dans une seule
    Par Jibicas dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 22/04/2008, 08h40
  5. import de données de plusieurs feuilles dans une seule
    Par naevus dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 10/01/2008, 13h32

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