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

Messages postés
142
Date d'inscription
jeudi 23 août 2012
Statut
Membre
Dernière intervention
6 novembre 2019
-
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
Afficher la suite 

1 réponse

Messages postés
142
Date d'inscription
jeudi 23 août 2012
Statut
Membre
Dernière intervention
6 novembre 2019
2
0
Merci
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 ?
PYGOS69
Messages postés
142
Date d'inscription
jeudi 23 août 2012
Statut
Membre
Dernière intervention
6 novembre 2019
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 ?
ALS35
Messages postés
255
Date d'inscription
jeudi 18 juillet 2019
Statut
Membre
Dernière intervention
14 novembre 2019
11 -
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
PYGOS69
Messages postés
142
Date d'inscription
jeudi 23 août 2012
Statut
Membre
Dernière intervention
6 novembre 2019
2 -
Merci !
15.000 lignes environ.
Cordialement
ALS35
Messages postés
255
Date d'inscription
jeudi 18 juillet 2019
Statut
Membre
Dernière intervention
14 novembre 2019
11 -
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
PYGOS69
Messages postés
142
Date d'inscription
jeudi 23 août 2012
Statut
Membre
Dernière intervention
6 novembre 2019
2 > ALS35
Messages postés
255
Date d'inscription
jeudi 18 juillet 2019
Statut
Membre
Dernière intervention
14 novembre 2019
-
Bonjour, ALS35,

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

Cordialement,
Pygos13
Commenter la réponse de PYGOS69