Somme de données unique d'une autre colonne

Bonjour

Je souhaiterai faire une somme de valeurs qui correspondent chacune à un lot listé dans la colonne suivante. Il s’agit d’une forme de sous-total, mais j’aimerai que toutes les valeurs uniques de cette deuxième colonnes soient listées dans une autre colonne et que la somme des données soient dans la même cellule (concaténée).

De plus il faut que la somme ne se fasse qu’a condition qu’il n’y ai pas de date dans la dernière colonne.

J’ai mis un fichier en exemple
Ca commence à être trop complexe pour moi.
n’hésitez pas s’il manque d’infos

Merci
Xavier
test.xlsx (8,9 Ko)

Bonsoir,
Une proposition avec un TCD.
Cordialement
test(3).xlsx (12,6 Ko)

Merci Zebulon,

Mais je recherche une formule qui pourrait me donner le résultat dans les cellules jaunes car celà fait déjà partie d’un fichier et je souhaiterais que le calcul se fasse automatiquement sans manipulation de ma part.
Une fois les résultats affichés, il seront sélectionnés une fois semaines pour etre envoyés par mail via VBA

Si d’autres propositions ou au moins proches de ce que je recherche je suis preneur.

Bonne soirée.
Xavier

Hello
À tester, (avec rajout d’une colonne intermédiaire, pour afficher automatiquement un zéro si pas de date de renseignée)

test.xlsx (10,4 Ko)

Ou alors mettre des zéros dans la colonne date.

test.xlsx (10,2 Ko)

À noter que la fonction unique n’est disponible qu’à partir d’office 2021 il me semble

Hello Taz,

Je venais d’avoir la même idée. Si il n’y avait pas de formule directe.

Merci :wink:

Xavier

re,
Une version sans colonne cachée.
Cordialement
test(4).xlsx (10,1 Ko)

1 « J'aime »

j’avais tenté aussi la même formule, mais pour le paramètre vide, j’avais mis un "=" "" de trop, du coup ça ne fonctionnait pas, comme quoi une simple petite erreur dans un argument fait capoté le tout…

Merci Zebulon,

Est-ce possible, c’est toujours mieux sans colonne cachée, mais dans ce cas tous les lots sont listés meme ceux à 0. est-ce possible sans de n’afficher que ceux pour lesquels la date n’est pas encore rentrée?

Merci
Xavier

Bonjour,
As tu testé le fichier du post 5 ?
Cordialement

Avec le fichier de @zebulon pas besoin de zéros dans les cellules

test.xlsx (10,2 Ko)

Zebulon,

Oui j’ai essayé la version test4

Le tableau permet une gestion de stock sous excel mais une fois semaine j’envoie un récap pour la déduction dans SAP. La date est celle à laquelle j’ai transmis les infos pour la déduction Je ne veux pas voir apparaitre tous les lots déjà encodés au moins une fois même si je comprends bien que si la date est remplie la valeur est 0 mais au fil du temps on va avoir une liste importante pour des lots qui n’existent plus et dont la valeur sera 0.
Avec la colonne cachée et la formule si on n’affiche les lots que si la date n’est pas remplie et donc il n’affiche dans le résumé que les lots présents là ou la date n’a pas été encodée.

Il y a peut etre moyen avec votre formule de ne faire apparaitre que les lots avec une valeur et pour laquelle la date n’a pas été encodée. Sinon il faudra reste sur l’idée de la colonne masquée.
Merci pour votre recherche
Xavier

Ben, je pense qu’il faut rajouter un paramètre dans le somme.si.ens qui vérifie que la quantité soit supérieur à 0.

test.xlsx (10,2 Ko)

Re,
Si ta version d’excel le permet, une solution avec Power query. Simple à mettre en place.
Cordialement
Xavier_Deplanque.xlsx (17,8 Ko)

si on utilise déjà VBA pour l’envoyer vers SAP, pourquoi tout en VBA ?

Sub Lots()
     Dim Dict, aA, i, n
     Set Dict = CreateObject("scripting.dictionary")
     Dict.comparemode = vbTextCompare
     With Sheets("feuil1")
          aA = .Range("A1").CurrentRegion.Resize(, 3).Value2
          For i = 1 To UBound(aA)
               If Len(aA(i, 2)) > 0 And aA(i, 1) <> 0 And Len(aA(i, 3)) = 0 Then Dict(aA(i, 2)) = Dict(aA(i, 2)) + aA(i, 1)     'un code, Qte<>0, date = ""
          Next

          n = Dict.Count                     'nombre de codes
          With .Range("I2").Resize(n)
               .Resize(100, 2).ClearContents     'vider cette plage
               If n = 1 Then Dict.Add [Rnd], 0     'ajouter un "dummy s'il n'y a qu'un key
               If n > 0 Then
                    For i = 1 To n
                         'Debug.Print dict.items()(i - 1), " de ", dict.keys()(i - 1)
                         Dict(Dict.keys()(i - 1)) = Dict.items()(i - 1) & " de " & Dict.keys()(i - 1)     'combiner key et item
                    Next
                    .Offset(, 1).Value = Application.Transpose(Dict.items)     'coller les items
               End If
          End With
     End With

End Sub

Hello Cow,

Super boulot merci, mes connaissances en VBA ne sont pas aussi poussées. Juste pour l’explication ces fichiers comme d’autres sont pour le boulot et meme si j’ai confiance en ce que je fais, je veux que l’encodage reste accessible a tous en cas de problème avec mon codage ou tout ajout dans le fichier. L’envoi via VBA ne sera qu’un plus mais pourra etre fait via une sélection dans la fauille. Mais merci encore pour ton aide