Re à vous 2
@Sogeic,
Ta solution fonctionne parfaitement, j'ai repris le code et joué la simplicité. J'ai crée 3 macros différentes (calcul des comptes 6 et 7, et une autre pour calculer des totaux spécifiques) et je lance tout dans une seule pour arriver au résultat souhaité. Par contre le seul hic est que j'aurai aimé que les formules s'affichent (Somme(X;X)), et non en valeur. Ça m'évite d'actualiser la macro, tu me diras je peux modifier la macro pour qu'elle se lance automatiquement à chaque fois qu'une cellule est modifiée (en retirant la boucle sur tous les fichiers *xls)
Je t'avoue que j'ai repris bêtement le code... J'ai essayé de la comprendre mais je me suis rapidement perdu... C'est d'un tout autre niveau pour mes connaissances. (respect)
@RyuAutodidacte
MODIF : J'avais la conversation ouverte depuis ce matin, et je viens seulement de voir ta réponse, merci pour les explications! (désolé)
J'ai un peu mieux compris le fonctionnement de ta macro, pas bête les repères sur la mise en forme, il fallait y penser.
J'ai également crée une autre petite macro arriver à mes fins.
C'est quasi parfait! J'ai juste un petit soucis que je n'avais pas prévu, et que je n'arrive pas à régler.
Pièce jointe 403503
Comme l'exemple ci-dessus, les sous catégories s'affichent quelque soit le résultat (Ici aucun compte concerné donc 0). La macro me calcule tout de même une somme. Elle prend systématiquement la ligne "sous catégorie" + "la ligne du dessous". Et j'obtiens des jolies références circulaires :)
Faut-il rajouter une condition SI : SI il n'y a pas de n°compte en dessous d'une sous catégorie alors 0 ?
Ou faut-il modifier un paramètre dans le code actuel ?
En bidouillant un peu je n'ai pas réussit à modifier le code pour que cela fonctionne. Peux-tu m'éclairer ?
Et deuxième chose : je ne comprends pas le :
La couleur de remplissage utilisée comme exemple à le code : "255, 255, 204". Pourquoi cela fonctionne t-il avec le code "255, 255, 255" ? Ou alors je n'ai rien comprisCode:If Cells(i, 2).Interior.Color <> RGB(255, 255, 255) Then
Voici mon code actuel :
Par contre ce code ne fonctionnera plus sur le fichier que j'avais envoyé car j'ai modifié les intitulés sur l'extraction par soucis de cohérence avec la macro, comme tu l'avais indiqué (j'avais des doublons sur les groupes : GROUPE 1 (charges) et GROUPE 1 (Produits) donc la macro ne pouvait fonctionner).Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 Sub CALCUL_DES_FORMULES() Dim AllGpe, Grp, DL&, DF_G As Boolean, VA, i&, ColGroupe As New Collection, Col_G, Vgpe, NomGpe$, Groupe$, Som$, SomTotal$ CHARGES = Array("CHARGES - GROUPE", "TOTAL CHARGES - GROUPE", "CHARGES - TA", "TOTAL CHARGES - TA") CHARGES_TA = Array("CHARGES - TA", "TOTAL CHARGES - TA") PRODUITS = Array("RA - GROUPE", "TOTAL RA - GROUPE", "RA - TA", "TOTAL RA - TA") PRODUITS_TA = Array("RA - TA", "TOTAL RA - TA") PRODUITS_TARIFICATION = Array("PRODUITS DE TARIFICATION", "TOTAL - PRODUITS DE TARIFICATION") CHARGES_EXCEP = Array("CHARGES EXCEPTIONNELLES", "TOTAL - CHARGES EXCEPTIONNELLES") PRODUITS_EXCEP = Array("PRODUITS EXCEPTIONNELS", "TOTAL - PRODUITS EXCEPTIONNELS") AllGpe = Array(CHARGES, PRODUITS, CHARGES_TA, PRODUITS_TA, PRODUITS_TARIFICATION, CHARGES_EXCEP, PRODUITS_EXCEP) DL = Cells(Rows.Count, "B").End(xlUp).Row: DF_G = False With ActiveSheet.Range(Cells(1), Cells(DL, "M")) For Each AG In AllGpe VA = .Columns.Item(2).Value For i = 16 To UBound(VA) If VA(i, 1) > "" Then If VA(i, 1) Like AG(Abs(DF_G)) & "*" Then If DF_G = False Then NomGpe = VA(i, 1) ColGroupe.Add VA(i, 1), NomGpe DF_G = True Else: DF_G = False Groupe = ColGroupe(NomGpe) & " _ " & .Cells(i, 12).Address ColGroupe.Remove NomGpe: ColGroupe.Add Groupe, NomGpe End If ElseIf DF_G = True Then If Cells(i, 2).Interior.Color <> RGB(255, 255, 255) Then Groupe = ColGroupe(NomGpe) & " _ " & .Cells(i, 12).Address ColGroupe.Remove NomGpe: ColGroupe.Add Groupe, NomGpe End If End If End If Next Application.ScreenUpdating = False For Each Col_G In ColGroupe Vgpe = Split(Col_G, " _ ") For i = 1 To UBound(Vgpe) - 1 .Range(Vgpe(i)).FormulaLocal = "=Somme(" & .Range(Vgpe(i)).Offset(1).Address & ":" & .Range(Vgpe(i + 1)).Offset(-1).Address & ")" Som = Som & "+" & Vgpe(i) Next .Range(Vgpe(UBound(Vgpe))).FormulaLocal = "=" & Mid(Som, 2) SomTotal = SomTotal & "+" & Vgpe(UBound(Vgpe)) Som = "" Next .Cells(DL, 12).FormulaLocal = "=" & Mid(SomTotal, 2) Application.ScreenUpdating = True Set ColGroupe = Nothing Next End With Call CALCUL_RESULTAT End Sub
Un grand merci à vous deux pour votre aide
Bien cdt,