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
- ...
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!
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 Subremarques :
- 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
Ce n'est pas obligatoire mais la macro devra être modifiée et sera un peu plus ardue à programmer. A toi de voir.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
Le fichier :
Merci beaucoup !
je vais essayer ça ...
En tout cas, je n'aurais jamais trouvé tout seul