Synthèse de plusieurs onglets

Résolu
Bonjour,

Ci-dessous le fichier relatif à ma question.

https://mon-partage.fr/f/v36kz6vI/

Normalement, mon fichier complet possédera 125 onglets numérotés + un onglet "synthèse".

je voudrais une macro sur l'onglet synthèse qui recupère les infos de chaque onglet numéroté pour les insérer dans les colonnes : F, G, H, I, K, M, P, R, T et W

L'info de la colonne F doit correspondre à la cellule D20 des onglets numérotés
L'info de la colonne G doit correspondre à la cellule D25 des onglets numérotés
L'info de la colonne H doit correspondre à la cellule D30 des onglets numérotés
L'info de la colonne I doit correspondre à la cellule C36 des onglets numérotés
L'info de la colonne K doit correspondre à la cellule B53 des onglets numérotés
L'info de la colonne M doit correspondre à la cellule B54 des onglets numérotés
L'info de la colonne P doit correspondre à la cellule B61 des onglets numérotés
L'info de la colonne R doit correspondre à la cellule B62 des onglets numérotés
L'info de la colonne T doit correspondre à la cellule B63 des onglets numérotés
L'info de la colonne W doit correspondre à la cellule B68 des onglets numérotés

Condition :

les onglets numérotés ne doivent pas être (nous ferons des copier coller sur les onglets d'ù l'importance de garder la structure telle quel modifiés dans leur structure y compris la fusion des cellules car ce sont des documents déjà utilisés comme tels et on ne pourra pas les modifier au près des personnes qui rempliront le document.
Il doit y avoir 125 onglets numérotés au final

Merci pour votre aide

6 réponses

  1. Bonjour,

    Voici une macro pour effectuer le report des données.

    Sub Test()
    Dim Ws As Worksheet
    Dim Ligne As Integer
    Application.ScreenUpdating = False
    For Each Ws In Worksheets
    If Ws.Name <> "SYNTHESE" Then
    Ligne = CInt(Ws.Name) + 3
    With Worksheets("SYNTHESE")
    'L 'info de la colonne F doit correspondre à la cellule D20 des onglets numérotés
    .Cells(Ligne, "F") = Ws.Range("D20")
    'L 'info de la colonne G doit correspondre à la cellule D25 des onglets numérotés
    .Cells(Ligne, "G") = Ws.Range("D25")
    'L 'info de la colonne H doit correspondre à la cellule D30 des onglets numérotés
    .Cells(Ligne, "H") = Ws.Range("D30")
    'L 'info de la colonne I doit correspondre à la cellule C36 des onglets numérotés
    .Cells(Ligne, "I") = Ws.Range("C36")
    'L 'info de la colonne K doit correspondre à la cellule B53 des onglets numérotés
    .Cells(Ligne, "K") = Ws.Range("B53")
    'L 'info de la colonne M doit correspondre à la cellule B54 des onglets numérotés
    .Cells(Ligne, "M") = Ws.Range("B54")
    'L 'info de la colonne P doit correspondre à la cellule B61 des onglets numérotés
    .Cells(Ligne, "P") = Ws.Range("B61")
    'L 'info de la colonne R doit correspondre à la cellule B62 des onglets numérotés
    .Cells(Ligne, "R") = Ws.Range("B62")
    'L 'info de la colonne T doit correspondre à la cellule B63 des onglets numérotés
    .Cells(Ligne, "T") = Ws.Range("B63")
    'L 'info de la colonne W doit correspondre à la cellule B68 des onglets numérotés
    .Cells(Ligne, "W") = Ws.Range("B68")
    End With
    End If
    Next Ws
    Application.ScreenUpdating = True
    End Sub


    Remarque : il me semble que l'emplacement des données dans ton classeur ne correspond pas exactement à ce que tu as indiqué.
    A vérifier ...

    A+
    1
    1. Bonjour Gyrus,

      Désolé si je te déranger mais tu pourrai m'expliquer comment l'objet "ws" change de feuille sans que tu le dise?
      0
    2. @Pierre1310Bonjour,

      Avec la boucle For Each Ws In Worksheets ... Next Ws
      Traduction : pour chaque feuille de l'ensemble des feuilles du classeur ...

      Avec cette boucle, toutes les feuilles sont traitées. Il reste alors à isoler celle qui ne doit pas être prise en compte, à savoir la feuille "SYNTHESE" avec l'instruction
      If Ws.Name <> "SYNTHESE" Then

      A+
      0
    3. Merci bonne journée :)
      0
    4. Merci à tous les deux ! impeccable !
      0
  2. Bonjour,

    Je dois faire l'addition des tous les onglets(de 1 à 50)?
    0
    1. non, en fait nous nous allons remplir uniquement les onglets de 1à 125 (dans la réalité), et on nous demande de reporter aussi les infos des 125 onglets dans le tableau synthèse. En fait je voudrais par exemple quand je saisie la fiche de l'onglet 1, que les infos saisies se reportent en synthèse sur la ligne qui porte le numéro 1 (au niveau des numéros colonne A) etc.... et ça pour

      L'info de la colonne F doit correspondre à la cellule D20 des onglets numérotés
      L'info de la colonne G doit correspondre à la cellule D25 des onglets numérotés
      L'info de la colonne H doit correspondre à la cellule D30 des onglets numérotés
      L'info de la colonne I doit correspondre à la cellule C36 des onglets numérotés
      L'info de la colonne K doit correspondre à la cellule B53 des onglets numérotés
      L'info de la colonne M doit correspondre à la cellule B54 des onglets numérotés
      L'info de la colonne P doit correspondre à la cellule B61 des onglets numérotés
      L'info de la colonne R doit correspondre à la cellule B62 des onglets numérotés
      L'info de la colonne T doit correspondre à la cellule B63 des onglets numérotés
      L'info de la colonne W doit correspondre à la cellule B68 des onglets numérotés

      En temps normal des formules suffiraient mais 125 onglets et 125 lignes c pas possible... je voudrais une macro qui se réfère au numéro d'onglet 1, 2, 3, 4 etc et qui reporte en synthèse par rapport au numéro en colonne A les infos des références ci-dessus
      0
    2. Ok je regarde ce que je peux faire
      0
  3. Bonjour
    tu peux aussi faire comme ca
    Sub TestOnglet()
    Dim Onglet As String
    On Error Resume Next
    Sheets("SYNTHESE").Select
    Application.ScreenUpdating = False
       For F = 4 To Range("A" & Rows.Count).End(xlUp).Row
          Onglet = Range("A" & F).Value
             With Sheets(Onglet)
                Range("F" & F).Value = .Range("D20")
                Range("G" & F).Value = .Range("D25")
                Range("H" & F).Value = .Range("D30")
                Range("I" & F).Value = .Range("C36")
                Range("K" & F).Value = .Range("B53")
                Range("M" & F).Value = .Range("B54")
                Range("P" & F).Value = .Range("B61")
                Range("R" & F).Value = .Range("B62")
                Range("T" & F).Value = .Range("B63")
                Range("W" & F).Value = .Range("B68")
             End With
       Next
    Application.Goto [A4], True
    End Sub
    

    A+
    Maurice
    0
    1. ci
      0
    2. merci
      0
    3. Bonjour Maurice,

      Je dois changer le nom des onglets... non plus des chiffres (1,2,3,4...) mais des lettres (exemple : "aub lux", "aub moul", etc...) comment retarvailler la macro car ça ne marche pas si je change les noms des onglets et de la colonne de référence... Merci pour ton aide
      0
  4. Bonjour
    je veux bien regarder mes il me faut au mouin un modèle de ton fichier
    avec ta macro
    A+
    Maurice
    0
    1. https://www.cjoint.com/c/FFCnnRnc6qV

      Voilà le fichier. L'onglet qui devrait s'appeler "1" j'ai modifier et en fait à ce jour je ne sais pas quel noms seront donnés aux onglets mais ça peut être chiffres et lettres ou juste un mot ou deux

      Merci pour ton aide
      0
  5. Bonjour
    a mettre dans un module
    Sub Recap()
    Dim Ws As Worksheet
    Dim Ligne As Integer
    Ligne = 4
        Application.ScreenUpdating = False
        For Each Ws In Worksheets
            If Ws.Name <> Feuil1.Name Then
    '  Ligne = CInt(Ws.Name) + 3
                With Feuil1
                    'L 'info de la colonne F doit correspondre à la cellule D20 des onglets numérotés
                    .Cells(Ligne, "F") = Ws.Range("D20")
                    'L 'info de la colonne G doit correspondre à la cellule D25 des onglets numérotés
                    .Cells(Ligne, "G") = Ws.Range("D25")
                    'L 'info de la colonne H doit correspondre à la cellule B30 des onglets numérotés
                    .Cells(Ligne, "H") = Ws.Range("B33")
                    'L 'info de la colonne I doit correspondre à la cellule C36 des onglets numérotés
                    .Cells(Ligne, "I") = Ws.Range("C36")
                    'L 'info de la colonne K doit correspondre à la cellule B53 des onglets numérotés
                    .Cells(Ligne, "K") = Ws.Range("B53")
                    'L 'info de la colonne M doit correspondre à la cellule B54 des onglets numérotés
                    .Cells(Ligne, "M") = Ws.Range("B54")
                    'L 'info de la colonne P doit correspondre à la cellule B61 des onglets numérotés
                    .Cells(Ligne, "P") = Ws.Range("B61")
                    'L 'info de la colonne R doit correspondre à la cellule B62 des onglets numérotés
                    .Cells(Ligne, "R") = Ws.Range("B62")
                    'L 'info de la colonne T doit correspondre à la cellule B63 des onglets numérotés
                    .Cells(Ligne, "T") = Ws.Range("B63")
                    'L 'info de la colonne W doit correspondre à la cellule B68 des onglets numérotés
                    .Cells(Ligne, "W") = Ws.Range("B68")
                    Ligne = Ligne + 1
                End With
            End If
        Next Ws
        Application.ScreenUpdating = True
    End Sub
    

    A+
    Maurice
    0
    1. Bonjour Maurice,

      Ça fonctionne très bine, merci beaucoup mais du coup tu peux m'expliquer ce que tu as fait comme modif. Ca me permettra de mieux comprendre et d'apprendre un truc. Merci
      0
  6. Bonjour

    j'ais juste changer la variable Ligne

    pour faire vraiment une recape voir ton fichier en retour

    http://www.cjoint.com/c/FFDpWqsLifK
    A+
    Maurice
    0