Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Somme en fonction de la date + catégorie choisies

19 réponses
Avatar
Apitos
Bonjour =E0 tous,

J'aimerais calculer une somme en fonction d'une date en plus d'une
cat=E9gorie, et selon la date choisie avec toutes cat=E9gories confondues,
mais sans succ=E8s.

Et puis il y'a que La liste de validation de date contient des
doublons et elle n'est pas tri=E9e.

Merci.


http://cjoint.com/?kBxPLMYz5G

10 réponses

1 2
Avatar
Daniel.C
Bonsoir.
1. Définir trois plages :
BL = A4:A19
BT = A23:A51
EF = A55:A58
Utiliser la formule :
=SI(H8="BL";SOMMEPROD((BL=G8)*DECALER(BL;0;1));SI(H8="BT";SOMMEPROD((BT=G8)*DECALER(BT;0;1));SOMMEPROD((EF=G8)*DECALER(EF;0;1))))
Il faudra une macro pour éliminer les dates en double.
Cordialement.
Daniel

Bonjour à tous,

J'aimerais calculer une somme en fonction d'une date en plus d'une
catégorie, et selon la date choisie avec toutes catégories confondues,
mais sans succès.

Et puis il y'a que La liste de validation de date contient des
doublons et elle n'est pas triée.

Merci.


http://cjoint.com/?kBxPLMYz5G


Avatar
Apitos
Bonjour Daniel,

Les tableaux affichés sont le résultat d'un filtre élaboré et il sont triés.

Alors je ne peux pas définir des plages fixes pour chaque catégorie.

Et puis les catégories peuvent aller d'une à plusieurs ...

"Daniel.C" a écrit :

Bonsoir.
1. Définir trois plages :
BL = A4:A19
BT = A23:A51
EF = A55:A58
Utiliser la formule :
=SI(H8="BL";SOMMEPROD((BL=G8)*DECALER(BL;0;1));SI(H8="BT";SOMMEPROD((BT=G8)*DECALER(BT;0;1));SOMMEPROD((EF=G8)*DECALER(EF;0;1))))
Il faudra une macro pour éliminer les dates en double.
Cordialement.
Daniel


Avatar
Daniel.C
Bonjour.
Il faut alors mettre la catégorie dans une colonne cachée en regard de
chaque ligne. D'autre part, comment peux-tu sélectionner plusieurs
catégories avec une liste de validation ?
Daniel

Bonjour Daniel,

Les tableaux affichés sont le résultat d'un filtre élaboré et il sont triés.

Alors je ne peux pas définir des plages fixes pour chaque catégorie.

Et puis les catégories peuvent aller d'une à plusieurs ...

"Daniel.C" a écrit :

Bonsoir.
1. Définir trois plages :
BL = A4:A19
BT = A23:A51
EF = A55:A58
Utiliser la formule :
=SI(H8="BL";SOMMEPROD((BL=G8)*DECALER(BL;0;1));SI(H8="BT";SOMMEPROD((BT=G8)*DECALER(BT;0;1));SOMMEPROD((EF=G8)*DECALER(EF;0;1))))
Il faudra une macro pour éliminer les dates en double.
Cordialement.
Daniel




Avatar
Apitos
Daniel,

Pour les listes de validation ce n'est qu'une tentative de résoudre ce
probleme.

Si VBA à une solution, je serais preneur !

Merci d'avance.
Avatar
Sam
Bonjour,
artisanalement ça donne ceci
=SI(H8¢;SOMMEPROD((A4:A19=G8)*(B4:B19));SI(H8¢1;SOMMEPROD((A23:A51=G8)*(B23:B51));SI(H8¥3;SOMMEPROD((A55:A58=G8)*(B55:B58)))))
mais ça serait mieux si le résultat du filtre était mis d'une façon plus
formatée, par exemple consacrer 99 lignes pour chaque
résultat de filtrage ou comme le préconise Daniel, mettre une colonne
supplémentaire avec les BL, BT et EF

Cordialement
Michel dit "Sam"

"Apitos" a écrit dans le message de news:

Bonjour Daniel,

Les tableaux affichés sont le résultat d'un filtre élaboré et il sont
triés.

Alors je ne peux pas définir des plages fixes pour chaque catégorie.

Et puis les catégories peuvent aller d'une à plusieurs ...

"Daniel.C" a écrit :

Bonsoir.
1. Définir trois plages :
BL = A4:A19
BT = A23:A51
EF = A55:A58
Utiliser la formule :
=SI(H8="BL";SOMMEPROD((BL=G8)*DECALER(BL;0;1));SI(H8="BT";SOMMEPROD((BT=G8)*DECALER(BT;0;1));SOMMEPROD((EF=G8)*DECALER(EF;0;1))))
Il faudra une macro pour éliminer les dates en double.
Cordialement.
Daniel





Avatar
Daniel.C
Regarde le classeur :
http://cjoint.com/?kCqbh5O8iG
Tu peux choisir plusieurs catégories.
Daniel

Daniel,

Pour les listes de validation ce n'est qu'une tentative de résoudre ce
probleme.

Si VBA à une solution, je serais preneur !

Merci d'avance.


Avatar
Apitos
Bonjour Daniel,

Merci pour l'exemple.

Mais d 'une façon générale, j'aimerais boucler sur toutes les
catégories présentes en (J2 :Jn ):
'------------------
For Each Cel In Range([J2], [J500].End(xlUp))
Set CatN° =Définir CatN°
CatN°.Name = "CatN°"
Next Cel
'-------------------
Et prendre en compte le cas d'un choix d'une date seulement, pour
toutes les catégories en (J2:Jn) dans le code suivant :
'--------------------
For i = 0 To Me.ListBox2.ListCount - 1
If Me.ListBox2.Selected(i) Then
For Each c In Range(Me.ListBox2.List(i))
If c.Value = CDate(Me.ComboBox1.Value) Then
Ctr = Ctr + c.Offset(, 1)
End If
Next
End If
Next i
'------------------------

Merci d 'avance.
Avatar
Apitos
Bonjour Daniel,

Merci pour l'exemple.

Mais d 'une façon générale, j'aimerais boucler sur toutes les
catégories présentes en (J2 :Jn ):
'------------------
For Each Cel In Range([J2], [J500].End(xlUp))
Set CatN° =Définir CatN°
CatN°.Name = "CatN°"
Next Cel
'-------------------
Et prendre en compte de calculer seulement en fonction d'une date
choisie, pour toutes les catégories en (J2:Jn) dans le code suivant :
'--------------------
For i = 0 To Me.ListBox2.ListCount - 1
If Me.ListBox2.Selected(i) Then
For Each c In Range(Me.ListBox2.List(i))
If c.Value = CDate(Me.ComboBox1.Value) Then
Ctr = Ctr + c.Offset(, 1)
End If
Next
End If
Next i
'------------------------

Merci d 'avance.
Avatar
Daniel.C
Bonjour.
Le classeur te permet de sélectionner plusieurs catégories. Utilise la
touche CTRL ou MAJ dans la listbox, comme pour sélectionner des
cellules. Les calculs se font uniquement pour la date choisie dans le
combobox. Je reporte dans la feuille en I8, de mémoire, là ou tu avais
mis la formule initiale. Tu peux d'ailleurs supprimer les listes en G8
et H8 qui ne me servent pas.
Daniel

Bonjour Daniel,

Merci pour l'exemple.

Mais d 'une façon générale, j'aimerais boucler sur toutes les
catégories présentes en (J2 :Jn ):
'------------------
For Each Cel In Range([J2], [J500].End(xlUp))
Set CatN° =Définir CatN°
CatN°.Name = "CatN°"
Next Cel
'-------------------
Et prendre en compte de calculer seulement en fonction d'une date
choisie, pour toutes les catégories en (J2:Jn) dans le code suivant :
'--------------------
For i = 0 To Me.ListBox2.ListCount - 1
If Me.ListBox2.Selected(i) Then
For Each c In Range(Me.ListBox2.List(i))
If c.Value = CDate(Me.ComboBox1.Value) Then
Ctr = Ctr + c.Offset(, 1)
End If
Next
End If
Next i
'------------------------

Merci d 'avance.


Avatar
Apitos
Bonjour Daniel,

Pour le calcul global de toutes les categories, j'avais pensé à l'idé e
de selectionner une ligne vide dans la ListBox pour faire comprendre
au programme qu'il faut faire la somme sur toutes les lignes ayant la
même date chosie dans la ComboBox.

Bon, maintenant reste à essayer de trouver l'étendu de chaque
catégorie, automatiquement.
1 2