Comment reprendre ds 1 sheet des infos de autres sheets

Bonjour à tous,

Je me permets de faire appel à vos conseils pour une question que vous trouverez p-être simpliste

J'ai plusieurs fichiers excel reprenant chacun des données que je voudrais résumer en un seul...

Exemple:

  • un fichier reprenant le nbr de gaufres que j'ai vendues aux clients a, b et C
  • un fichier reprenant le nr de tartes que j'ai vendues aux client a, d, g
  • un fichier reprenant le nr de glaces que j'ai vendues aux client a, b, g, x, y
  • ...
Bien entendu, j'ai un nbr bcp plus élevé de lignes...

Mon but: avoir un sheet dans laquelle:

  • en colonne A: je pourrais avoir le nom de tous les clients qui ont acheté au moins un produit
  • en colonne B: le nbr de gaufres que j'ai vendues par client
  • en colonne C: le nbr de tartes que j'ai vendues par client
  • en colonne D: le nbr de glaces que j'ai vendues par client
...

et ceci de la façon la plus "automatisée" possible

Je pense que je devrais certainement commencer par copier toutes les sheets de mes fichiers vers un un seul nouveau fichier excel, puis créer une sheet vierge qui 'recueillera' les infos des autres sheets... mais après, je cale (déjà)...

Votre aide me sera donc bien utile!

Je joins un fichier excel ou jai fait le travail manuellement pour u petit nbr de produits et de clients, pour montrer ce que je souhaiterais obtenir

UN GRAND MERCI D'AVANCE!

22classeur1.xlsx (10.30 Ko)

Bonjour mig27, forum,

Pour cela tu peux utiliser la fonction "Consolider" (Données / Consolider). Couplée à un code vba un peu modifié ça peut donner ça :

Sub consolide()
Dim i As Integer, cpt As Integer, reponse As Byte
Dim repertoire As String
Dim tablo
Dim sht As Worksheet

    Application.ScreenUpdating = False
    repertoire = ThisWorkbook.Path & "\"
    On Error Resume Next
    Set sht = Worksheets("DETAIL")
    On Error GoTo 0
    If sht Is Nothing Then
        reponse = MsgBox("Pas de feuille ""DETAIL"", voulez-vous en créer une ?", vbExclamation + vbYesNo, "Feuille DETAIL inexistante")
        If reponse = vbYes Then
            Sheets.Add before:=Sheets(1)
            ActiveSheet.Name = "DETAIL"
        Else
            Exit Sub
        End If
    Else
        With Sheets("DETAIL")
            .Activate
            .Cells.Delete
        End With
    End If
    ReDim tablo(1 To Sheets.Count - 1)
    For i = 1 To Sheets.Count
        If Sheets(i).Name <> "DETAIL" Then
            cpt = cpt + 1
            tablo(cpt) = "'" & repertoire & "[" & ThisWorkbook.Name & "]" & Sheets(i).Name & "'!" & Sheets(i).[a1].CurrentRegion.Address(, , xlR1C1)
        End If
    Next i
    With [a1]
        .Consolidate Sources:=Array(tablo), Function:= _
                     xlSum, TopRow:=True, LeftColumn:=True, CreateLinks:=False
        .Value = "CLIENT"
        With .CurrentRegion
            .Borders(xlEdgeLeft).Weight = xlMedium
            .Borders(xlEdgeTop).Weight = xlMedium
            .Borders(xlEdgeBottom).Weight = xlMedium
            .Borders(xlEdgeRight).Weight = xlMedium
            .Borders(xlInsideVertical).Weight = xlThin
            .Borders(xlInsideHorizontal).Weight = xlThin
        End With
    End With

End Sub

remarques :

  • la feuille qui recueille les infos des autres feuilles doit s'appeler "DETAIL"
  • si la feuille "DETAIL" n'existe pas, une boîte de dialogue te demande si tu veux la créer ou pas
  • le classeur ne doit contenir que la feuille "DETAIL" et les feuilles de chaque produit
  • les bordures sont automatiquement tracées
Mig27 a écrit :

Je pense que je devrais certainement commencer par copier toutes les sheets de mes fichiers vers un un seul nouveau fichier excel, puis créer une sheet vierge qui 'recueillera' les infos des autres sheets

Ce n'est pas obligatoire mais la macro devra être modifiée et sera un peu plus ardue à programmer. A toi de voir.

Le fichier :

20classeur1-v1.xlsm (21.77 Ko)

Merci beaucoup !

je vais essayer ça ...

En tout cas, je n'aurais jamais trouvé tout seul

Rechercher des sujets similaires à "comment reprendre sheet infos sheets"