Macro qui calcul une somm en fction de 3 crit
el-doyon
Messages postés
43
Statut
Membre
-
el-doyon Messages postés 43 Statut Membre -
el-doyon Messages postés 43 Statut Membre -
Bonjour, je suis stagiaire dans une boite et mon embauche dépend de ce tableau, HELP ! Je ne connais pas les macros et mon responsable veut absolument une macro ici.
Je vous explique mon problème : J'ai un fichier ci-joint avec deux onglets, base et report.
Dans la base, la colonne D « ligne IM » regroupe des codes identiques sur plusieurs lignes pas forcément contigues.
Il faudrait que lorsque je tombe sur le même code avec dans la colonne E « projet » le même projet et dans la colonne G « site » le même site que j'obtienne dans l'onglet « report » la somme de toutes les lignes IM, avec un projet et un site identique dans les colonnes nommées « 1 » à « 5 ».
Je m'en sors avec des somme.si mais mon responsable veut une macro qui ferait le report via un bouton ou sans.
Pouvez vous m'aider,
Merci d'avance.
https://www.cjoint.com/?flkANMl8zV
Je vous explique mon problème : J'ai un fichier ci-joint avec deux onglets, base et report.
Dans la base, la colonne D « ligne IM » regroupe des codes identiques sur plusieurs lignes pas forcément contigues.
Il faudrait que lorsque je tombe sur le même code avec dans la colonne E « projet » le même projet et dans la colonne G « site » le même site que j'obtienne dans l'onglet « report » la somme de toutes les lignes IM, avec un projet et un site identique dans les colonnes nommées « 1 » à « 5 ».
Je m'en sors avec des somme.si mais mon responsable veut une macro qui ferait le report via un bouton ou sans.
Pouvez vous m'aider,
Merci d'avance.
https://www.cjoint.com/?flkANMl8zV
A voir également:
- Macro qui calcul une somm en fction de 3 crit
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Ai suite 3 - Télécharger - Optimisation
- Diviser une photo en 3 instagram - Guide
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Calcul km marche à pied gratuit - Télécharger - Sport
2 réponses
J aimerais bien tenter avec ce problem ..si tu peux m expliquer un ti peu plus ... et sans stress merci
Salut tout le monde,
Voici un exemple.
Je t'ai créé une feuille "report1" pour que tu puisses tester.
Pour lancer la procédure, ALT+F8 et exécuter "test".
En cas de souci, ou si tu veux que j'annote la macro "pas à pas" pour te l'expliquer, n'hésite pas à revenir ici.
Voici un exemple.
Je t'ai créé une feuille "report1" pour que tu puisses tester.
Pour lancer la procédure, ALT+F8 et exécuter "test".
En cas de souci, ou si tu veux que j'annote la macro "pas à pas" pour te l'expliquer, n'hésite pas à revenir ici.
Wouah ! Merci, c'est exactement ça que je voulais comme résultat. Il faudrait juste que la macro se déclenche via un bouton et via un autre bouton que je puisse faire un reset. Par contre j'accepte volontier si tu as le temps de m'expliquer ta macro, je ne comprends pas commen ça fait sommes et pourtant elles sont belles et bien faites. En tout cas même si tu n'as pas le temps pr la suite milles merci pour ton temps et surtout pr la solution à mon problème.
Voilà le tableau!!! se déclenche avec 2 boutons.
c'est détaillé. Pour accéder au code détaillé taper ALT+F11
c'est détaillé. Pour accéder au code détaillé taper ALT+F11
Bonjour pijaku,
désolé de t'embêter encore une fois avec ce probleme mais je n'y arrive pas. Pourtant je voudrais simplifier à savoir que le bouton report cette fois ci ne ferait la somme des colonnes 1 à 5 uniquement à l'aide du critere Ligne IM, si identique, faire la somme ds colonne 1 à 5.
je ne vois pas ce que je dois changer dans la formule, peux tu m'aider encore cette fois ?
Sub test()
Dim cherche As Range
Dim i, j, derlig As Integer
Dim concat As String
With Sheets("report1")
If .Range("C2") = "" Then .Range("C2") = "'"
derlig = .Range("D65536").End(xlUp).Row
.Range("C2:K" & derlig).ClearContents
End With
With Sheets("base")
derlig = .Range("D65536").End(xlUp).Row
End With
For i = 2 To derlig
With Sheets("base")
concat = .Cells(i, 4) & .Cells(i, 5) & .Cells(i, 7)
End With
With Sheets("report1")
Set cherche = .Columns(3).Cells.Find(concat)
If cherche Is Nothing Then
j = .Range("C65536").End(xlUp).Offset(1, 0).Row
.Cells(j, 3) = concat
.Cells(j, 4) = Sheets("base").Cells(i, 4)
.Cells(j, 5) = Sheets("base").Cells(i, 5)
.Cells(j, 6) = Sheets("base").Cells(i, 7)
.Cells(j, 7) = CLng(Sheets("base").Cells(i, 10))
.Cells(j, 8) = CLng(Sheets("base").Cells(i, 11))
.Cells(j, 9) = CLng(Sheets("base").Cells(i, 12))
.Cells(j, 10) = CLng(Sheets("base").Cells(i, 13))
.Cells(j, 11) = CLng(Sheets("base").Cells(i, 14))
Else
j = .Cells.Find(concat).Row
.Cells(j, 7) = CLng(.Cells(j, 7)) + CLng(Sheets("base").Cells(i, 10))
.Cells(j, 8) = CLng(.Cells(j, 8)) + CLng(Sheets("base").Cells(i, 11))
.Cells(j, 9) = CLng(.Cells(j, 9)) + CLng(Sheets("base").Cells(i, 12))
.Cells(j, 10) = CLng(.Cells(j, 10)) + CLng(Sheets("base").Cells(i, 13))
.Cells(j, 11) = CLng(.Cells(j, 11)) + CLng(Sheets("base").Cells(i, 14))
End If
End With
Next i
Sheets("report1").Columns(3).ClearContents
Set cherche = Nothing
End Sub
désolé de t'embêter encore une fois avec ce probleme mais je n'y arrive pas. Pourtant je voudrais simplifier à savoir que le bouton report cette fois ci ne ferait la somme des colonnes 1 à 5 uniquement à l'aide du critere Ligne IM, si identique, faire la somme ds colonne 1 à 5.
je ne vois pas ce que je dois changer dans la formule, peux tu m'aider encore cette fois ?
Sub test()
Dim cherche As Range
Dim i, j, derlig As Integer
Dim concat As String
With Sheets("report1")
If .Range("C2") = "" Then .Range("C2") = "'"
derlig = .Range("D65536").End(xlUp).Row
.Range("C2:K" & derlig).ClearContents
End With
With Sheets("base")
derlig = .Range("D65536").End(xlUp).Row
End With
For i = 2 To derlig
With Sheets("base")
concat = .Cells(i, 4) & .Cells(i, 5) & .Cells(i, 7)
End With
With Sheets("report1")
Set cherche = .Columns(3).Cells.Find(concat)
If cherche Is Nothing Then
j = .Range("C65536").End(xlUp).Offset(1, 0).Row
.Cells(j, 3) = concat
.Cells(j, 4) = Sheets("base").Cells(i, 4)
.Cells(j, 5) = Sheets("base").Cells(i, 5)
.Cells(j, 6) = Sheets("base").Cells(i, 7)
.Cells(j, 7) = CLng(Sheets("base").Cells(i, 10))
.Cells(j, 8) = CLng(Sheets("base").Cells(i, 11))
.Cells(j, 9) = CLng(Sheets("base").Cells(i, 12))
.Cells(j, 10) = CLng(Sheets("base").Cells(i, 13))
.Cells(j, 11) = CLng(Sheets("base").Cells(i, 14))
Else
j = .Cells.Find(concat).Row
.Cells(j, 7) = CLng(.Cells(j, 7)) + CLng(Sheets("base").Cells(i, 10))
.Cells(j, 8) = CLng(.Cells(j, 8)) + CLng(Sheets("base").Cells(i, 11))
.Cells(j, 9) = CLng(.Cells(j, 9)) + CLng(Sheets("base").Cells(i, 12))
.Cells(j, 10) = CLng(.Cells(j, 10)) + CLng(Sheets("base").Cells(i, 13))
.Cells(j, 11) = CLng(.Cells(j, 11)) + CLng(Sheets("base").Cells(i, 14))
End If
End With
Next i
Sheets("report1").Columns(3).ClearContents
Set cherche = Nothing
End Sub
Salut,
Voici, nouveau bouton "REPORT IM" résultats en feuille "report1".
Par contre, la macro n'était pas nécessaire, penche toi sur les tableaux croisés dynamiques...
Voici, nouveau bouton "REPORT IM" résultats en feuille "report1".
Par contre, la macro n'était pas nécessaire, penche toi sur les tableaux croisés dynamiques...
dans l'onglet report il faudrait que des les colonnes 1 à 5 j'obtienne le total pour chaque ligne IM, projet et site identiques. Par exemple :
Dans l'onglet base, dans les colonnes D, E et G, j'ai respectivement 4 fois l'information
SH-GIS1-00 Rénovation Céré La Ronde avec des chiffres associés en colonnes 1 à 5.
Il faudrait donc dans l'onglet report que je ne retrouve qu'une ligne de SH-GIS1-00 Rénovation Céré La Ronde avec la somme des chiffres en colonnes 1 à 5.
j'espère avoir été plus clair, merci pour l'aide.
Le pb c'est qu'une fois le report fait, je dois faire le sous total ds les colonnes 1 à 5 des lignes IM identiques (donc un seul critère cette fois ci). par ex apres le report il y a 3 lignes IM de SH-GIS1-00 qui ne sont pas contigues, mais il faudrait que je puisse faire le sous total juste à la ligne en dessous.
Comme il y à déjà la macro je ne peux pas faire de filtre élaboré alors je voulais savoir si c'était possibe d'intégrer ce filtre dans la macro et si possible le sous total aussi mais avec que l'intégration du filtre dans la macro je pourrais m'en sortir. Jespère que mon énoncé est assez clair. Que tu puisses où pas, merci encore rachid_04 !
Ne sachant pas à qui tu t'adresses, je t'ai bricolé vite fait une macro pour les sous totaux.
Je t'ai aussi créé un nouveau bouton, mais la macro peux être lancée en même temps que le report.
voici le classeur complet
Et pour celles et ceux, passant par ici, qui seraient juste intéressés par le code "sous totaux" :
Sub sous_toto() Dim derlign, i, j, k As Integer With Sheets("report") derlign = .Range("D65536").End(xlUp).Row .Range("D2:K" & derlign).Sort Key1:=.Range("D3") For i = derlign To 3 Step -1 If .Cells(i, 4) <> "" Then j = i Do While .Cells(j, 4).Value = .Cells(j - 1, 4).Value j = j - 1 Loop .Cells(i + 1, 1).EntireRow.Insert .Range(.Cells(i + 1, 7), .Cells(i + 1, 11)).Font.Bold = True For k = i To j Step -1 .Cells(i + 1, 7).Value = .Cells(i + 1, 7).Value + .Cells(k, 7).Value .Cells(i + 1, 8).Value = .Cells(i + 1, 8).Value + .Cells(k, 8).Value .Cells(i + 1, 9).Value = .Cells(i + 1, 9).Value + .Cells(k, 9).Value .Cells(i + 1, 10).Value = .Cells(i + 1, 10).Value + .Cells(k, 10).Value .Cells(i + 1, 11).Value = .Cells(i + 1, 11).Value + .Cells(k, 11).Value Next k End If i = i - (i - j) Next i End With End Subça fonctionne correctement sauf quand je veux changer un chiffre dans la base, si je refais sous total, j'ai des chiffres qui se répercutent en fin de tableau et qui ne partent pas même avec le RAZ report. Vois tu une solution ?
Sinon au niveau du résultat c'est ce que je souhaite avoir au final mais avec le sous total au dessus et non au dessous des lignes IM identiques comme je l'avais écrit précédemment. Désolé et merci pr ton aide
Ah bon?
j'ai cru que :
mais il faudrait que je puisse faire le sous total juste à la ligne en dessous.