Parce que j’ai mis des chiffres aléatoires pour tester les tableaux … ![]()
Pas fan des TDC mais je peux essayer avec ta formule .. (çà actualise automatiquement?)
Pour la récap CA par mois, est-ce que ce résultat est correct ?
J’avais le cout de production de la société pris dans le CA … donc il y aura des écart mais je ferais la manipulation.
Peut-on faire une macro qui récupère les données dans la listing OF directement ?
Client / Mois / CA / Marge
Récap CA par client ?
Récap CA par mois ?
Récap marge par client ?
Récap marge par mois ?
Voici la macro Récap CA par mois. Résultats sur la feuille CA, en S3. Sais-tu pourquoi le total sans mois indiqué est complètement différent de celui sur la feuille CA ?
Sub RecapCAParMois()
Dim Dico As Object, C As Range, TblM(), TblCA(), Ctr As Long
Ctr = -1
Set Dico = CreateObject("scripting.Dictionary")
With Sheets("Listing OF")
For Each C In .Range("I3", .Cells(.Rows.Count, 9).End(xlUp))
If Not Dico.exists(C.Value) Then
Dico.Add C.Value, C.Value
Ctr = Ctr + 1
ReDim Preserve TblM(Ctr)
TblM(Ctr) = C.Value
End If
Next C
ReDim TblCA(Ctr)
For I = 0 To UBound(TblM)
TblCA(I) = Application.SumIf(.[I3:I1000], TblM(I), .[R3:R1000])
Next I
End With
With Sheets("CA")
.[S3].Resize(UBound(TblM) + 1) = Application.Transpose(TblM)
.[T3].Resize(UBound(TblCA) + 1) = Application.Transpose(TblCA)
.Range("S3:T3").Resize(UBound(TblM) + 1).Sort .[S3], xlAscending, Header:=xlNo
End With
End Sub
Daniel
Oublie cette question puisque tu as fait autrement dans ta macro en allant chercher directement dans l’onglet listing les informations …
J’avais fait des modif hier et aujourd’hui en fonction de tes remarques ..
Il y avait un incohérence car meme quand le projet n’etait pas facturé çà indiquait un CA .. donc si y a un CA mais pas de date çà ne pouvait pas tenir les comptes correctement ..
J’ai donc fait un tableau de CA, un tableau de cout de prod et un tableau de marge ..
Voici le fichier à jour avec ta macro ..
Copie de PILOTAGE (TEST 2 François).xlsm (624,1 Ko)
Juste une question : comment je fais pour faire un TS (par exemple dans l’onglet CA) dans la macro (comme celle que tu as faite)?
Et si on ne veut pas du total ?
Pour le CA par mois, j’ai créé manuellement un TS appelé “CAparMOIS” :
J’ai modifié la macro comme suit :
Sub CA_MOIS()
Sheets("CA").Unprotect
onglets = "CA"
Sheets("CA").Select
Dim Dico As Object, C As Range, TblM(), TblCA(), Ctr As Long
Ctr = -1
Set Dico = CreateObject("scripting.Dictionary")
ActiveSheet.ListObjects("CAparMOIS").DataBodyRange.Delete
With Sheets("Listing OF")
For Each C In .Range("I3", .Cells(.Rows.Count, 9).End(xlUp))
If C.Value <> "" Then
If Not Dico.exists(C.Value) Then
Dico.Add C.Value, C.Value
Ctr = Ctr + 1
ReDim Preserve TblM(Ctr)
TblM(Ctr) = C.Value
End If
End If
Next C
ReDim TblCA(Ctr)
For i = 0 To UBound(TblM)
TblCA(i) = Application.SumIf(.[I3:I5000], TblM(i), .[R3:R5000])
Next i
End With
With Sheets("CA")
.[E3].Resize(UBound(TblM) + 1) = Application.Transpose(TblM)
.[F3].Resize(UBound(TblCA) + 1) = Application.Transpose(TblCA)
With .ListObjects("CAparMOIS")
.Sort.SortFields.Clear
.Sort.SortFields.Add2 _
Key:=Range("CAparMOIS[[#All],[Mois]]"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
With .Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End With
Sheets("CA").Protect
End Sub
Daniel
J’ai voulus transposer ton code pour faire le Recap CA par Clients ..
J’ai fais mon TS CAparCLIENT ..
Sub CA_CLIENTS()
Sheets("CA").Unprotect
onglets = "CA"
Sheets("CA").Select
Dim Dico As Object, C As Range, TblM(), TblCA(), Ctr As Long
Ctr = -1
Set Dico = CreateObject("scripting.Dictionary")
ActiveSheet.ListObjects("CAparCLIENT").DataBodyRange.Delete
With Sheets("Listing OF")
For Each C In .Range("B3", .Cells(.Rows.Count, 2).End(xlUp))
If C.Value <> "" Then
If Not Dico.exists(C.Value) Then
Dico.Add C.Value, C.Value
Ctr = Ctr + 1
ReDim Preserve TblM(Ctr)
TblM(Ctr) = C.Value
End If
End If
Next C
ReDim TblCA(Ctr)
For i = 0 To UBound(TblM)
TblCA(i) = Application.SumIf(.[B3:B5000], TblM(i), .[R3:R5000])
Next i
End With
With Sheets("CA")
.[B3].Resize(UBound(TblM) + 1) = Application.Transpose(TblM)
.[C3].Resize(UBound(TblCA) + 1) = Application.Transpose(TblCA)
With .ListObjects("CAparCLIENT")
.Sort.SortFields.Clear
.Sort.SortFields.Add2 _
Key:=Range("CAparCLIENT[[#All],[CLIENTS]]"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
With .Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End With
Sheets("CA").Protect
End Sub
J’ai une erreur et je n’arrive pas à la trouver … ![]()
Idem si je le transpose dans un TS PRODparMOIS en modifiant juste le nom du TS et les colonnes de destinations
J’ai créé un TS CAparCLIENT En B2 et C2 mais j’ai du faire une erreur quelque part …
Copie de PILOTAGE (TEST 2 François).xlsm (597,9 Ko)
Bonjour,
Ca fonctionne sauf si le TS est vide. J’ai modifié :
Sub CA_CLIENTS()
Sheets("CA").Unprotect
onglets = "CA"
Sheets("CA").Select
Dim Dico As Object, C As Range, TblM(), TblCA(), Ctr As Long
Ctr = -1
Set Dico = CreateObject("scripting.Dictionary")
With Sheets("CA").ListObjects("CAparCLIENT")
If .ListRows.Count > 0 Then
.DataBodyRange.Delete
End If
End With
With Sheets("Listing OF")
For Each C In .Range("B3", .Cells(.Rows.Count, 2).End(xlUp))
If C.Value <> "" Then
If Not Dico.exists(C.Value) Then
Dico.Add C.Value, C.Value
Ctr = Ctr + 1
ReDim Preserve TblM(Ctr)
TblM(Ctr) = C.Value
End If
End If
Next C
ReDim TblCA(Ctr)
For i = 0 To UBound(TblM)
TblCA(i) = Application.SumIf(.[B3:B5000], TblM(i), .[R3:R5000])
Next i
End With
With Sheets("CA")
.[B3].Resize(UBound(TblM) + 1) = Application.Transpose(TblM)
.[C3].Resize(UBound(TblCA) + 1) = Application.Transpose(TblCA)
With .ListObjects("CAparCLIENT")
.Sort.SortFields.Clear
.Sort.SortFields.Add2 _
Key:=Range("CAparCLIENT[[#All],[CLIENTS]]"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
With .Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End With
Sheets("CA").Protect
End Sub
Important : Je reçois des messages d’insultes de la part du forum (pas des utilisateurs) parce que je suis seul à poster dans cette discussion. Ouvre une autre discussion.
Daniel
Ca fonctionne nickel merci
j’ouvre un nouveau sujet pour les indicateurs ..
bizarre, je n’ai jamais rencontré ce type de soucis…
Daniel,
j’ai, dans mes tableau des recap par mois au 01/01/2026 et un autre au 02/01/2026 …
je ne comprends pas trop sachant que dans la colonne I de l’onglet « Listing OF » c’est une formule qui transforme la date en mois sous la forme MM-AAAA …
Mets-tu ma parole en doute ? Ca doit se déclencher au 50e message s’il n’y a eu qu’un interlocuteur. Mais peut-être sais-tu mieux ?
Daniel
Non, je dis juste que je n’ai jamais eu le cas !
Alors pourquoi tu dis que c’est bizarre ?
parce que je trouve bizarre qu’un forum soit paramétré pour envoyer des messages d’insultes…
Bonjour,
Ce n’était pas à prendre au premier degré. Simplement pour dire que le message, même s’il était courtois était intempestif et me gênait pour répondre sur le fond. Tout comme le message qui indique que le sujet est résolu à chaque fois que je poste dans cette discussion.
Daniel
Ca doit etre de ma faute car j’ai coché « solution » sur un de tes messages où tu me donnais le code pour CAparMOIs … (entre autre).
pardon ![]()

