Somme avec 3 conditions sur période [Résolu/Fermé]

Signaler
Messages postés
184
Date d'inscription
jeudi 23 août 2012
Statut
Membre
Dernière intervention
6 juillet 2020
-
Messages postés
184
Date d'inscription
jeudi 23 août 2012
Statut
Membre
Dernière intervention
6 juillet 2020
-
Bonjour,

Je souhaite rapprocher des données de 2 fichiers en utilisant plusieurs clés d'entrées : un numéro d'agent ainsi que des dates.
La problématique étant que pour une même période dans un fichier nous n'avons qu'une ligne et que dans le deuxième fichier, la période peut être scindée en plusieurs lignes.

1er fichier : (Colonne de A à J) > formules en J

NUM NOM PRENOM DEB P1 FIN P2 B TT Montant récupéré
10 TOTO X X 27/08/2018 M 31/08/2018 S 10 1110 633,05
10 TOTO X X 03/09/2018 M 07/09/2018 S 10 1110 728,01

10 TOTO X X 27/08/2018 M 07/09/2018 S 10 1110 0

J3=SOMMEPROD(([Fichier2.xlsx]Feuil1!$A$2:$A$49999=$A2)*([Fichier2.xlsx]Feuil1!$D$2:$D$49999=$D2)*([Fichier2.xlsx]Feuil1!$E$2:$E$49999=$F2)*([Fichier2.xlsx]Feuil1!$J$2:$J$49999))

J4=SOMMEPROD(([Fichier2.xlsx]Feuil1!$A$2:$A$49999=$A3)*([Fichier2.xlsx]Feuil1!$D$2:$D$49999=$D3)*([Fichier2.xlsx]Feuil1!$E$2:$E$49999=$F3)*([Fichier2.xlsx]Feuil1!$J$2:$J$49999))


J6=SOMMEPROD(([Fichier2.xlsx]Feuil1!$A$2:$A$49999=$A5)*([Fichier2.xlsx]Feuil1!$D$2:$D$49999=$D5)*([Fichier2.xlsx]Feuil1!$E$2:$E$49999=$F5)*([Fichier2.xlsx]Feuil1!$J$2:$J$49999)) .......je devrais avoir 1361.06 (633.05+728.01) au lieu de 0 .

2ème fichier source : (colonnes de A à J)

NUM NOM AN DEB FIN NB A TOT AUTRE MONTANT
10 TOTO X 2018 27/08/2018 31/08/2018 5 J 2340 2912,04 633,05
10 TOTO X 2018 03/09/2018 07/09/2018 5 J 2340 2912,04 728,01

Si pas de solution par formule, je prend une solution par macro....

Quand la période est éclatée sur 2 lignes, sommeprod ne fonctionne pas...Je souhaite récupérer le montant total sur la période que ce soit en 1 ligne ou 2 lignes.

Merci d'avance pour votre aide !

Cordialement,



Configuration: Windows / Internet Explorer 11.0

1 réponse

Messages postés
184
Date d'inscription
jeudi 23 août 2012
Statut
Membre
Dernière intervention
6 juillet 2020
2
Le traitement doit se faire sur 15.000 lignes à minima, sommeprod est consommateur de mémoire et délai de réponse. Une macro serait-elle préférable ?
Messages postés
184
Date d'inscription
jeudi 23 août 2012
Statut
Membre
Dernière intervention
6 juillet 2020
2
Encore merci ! Cela fonctionne sur une cellule sélectionnée ! Avez-vous la possibilité de me dire comment avec un code supplémentaire, le faire sur un plage de cellule dans la même colonne ?
Messages postés
540
Date d'inscription
jeudi 18 juillet 2019
Statut
Membre
Dernière intervention
3 décembre 2020
24
Bonjour,

Pour faire rapide, tu peux ajouter une boucle qui appelle la macro précédente.
A adapter à ton fichier, comme d'habitude.
Sub MacroSommePlage()

Dim Cellule As Range
Dim IndiceMax As Long

Application.ScreenUpdating = False

IndiceMax = Range("A1").End(xlDown).Row

For Each Cellule In Range("L2:L" & IndiceMax)
    Cellule.Select
    Call MacroSomme
Next Cellule

Application.ScreenUpdating = True

End Sub


Mais ce n'est pas franchement génial sur les temps de réponse, il faudrait intégrer cette boucle dans la macro précédente. Je vais regarder.
Mais dis-nous quelle est la longueur de ta plage, comment tu veux déclencher la macro, manuellement automatiquement, sur quel évènement. Joins plutôt un fichier exemple représentatif.

Cordialement
Messages postés
184
Date d'inscription
jeudi 23 août 2012
Statut
Membre
Dernière intervention
6 juillet 2020
2
Merci !
15.000 lignes environ.
Cordialement
Messages postés
540
Date d'inscription
jeudi 18 juillet 2019
Statut
Membre
Dernière intervention
3 décembre 2020
24
Bonjour,

Ci-joint une proposition plus rapide.
La plage est colonne L
A adapter à ton fichier bien sûr.
https://www.cjoint.com/c/IJwmEEbOlyR

Cordialement
Messages postés
184
Date d'inscription
jeudi 23 août 2012
Statut
Membre
Dernière intervention
6 juillet 2020
2 >
Messages postés
540
Date d'inscription
jeudi 18 juillet 2019
Statut
Membre
Dernière intervention
3 décembre 2020

Bonjour, ALS35,

Merci, c'est exactement ce je cherchais et je te remercie pour avoir consacré du temps.

Cordialement,
Pygos13