Microsoft 365 Recherche valeur client identique et somme du montant

ted1057

XLDnaute Occasionnel
Bonjour à tous,

Je souhaite faire une macro VBA qui me permettrait de rechercher sur une liste de client. Chaque client étant affecté à un département unique.
Le montant total des commandes de ce client et le nombre de commande passée - résultat 1
le nombre de commande par département et le montant total des commandes - résultat 2

Ci-joint un fichier avec les résultats recherchés

Merci de votre aide

Cordialement,
 

Pièces jointes

  • test-somme.xlsx
    9.5 KB · Affichages: 8

ted1057

XLDnaute Occasionnel
Bonjour VGENDRON,
Merci de ta réponse.
Je souhaite en VBA car cette partie concerne une partie du traitement des données que je réalise. Après, j'avoue de ne pas être fan du couple formule et VBA dans un fichier surtout quand il destiné à une tierce personne qui ne maitrise pas bien EXCEL.

Pour le résultat-2 il y a eu une erreur de faite avant l'enregistrement
 

vgendron

XLDnaute Barbatruc
un essai par macro

VB:
Sub Resultat()

Dim Dico As Object 'déclaration d'un objet

Set Dico = CreateObject("scripting.dictionary") 'création de l'objet "dictionnaire'

With ActiveSheet.ListObjects("t_Data") 'avec la Table structurée "t_Data"
    For i = 1 To .ListRows.Count 'pour chaque ligne
        client = .DataBodyRange(i, 1) 'nom du client
        If Not Dico.exists(client) Then 'si la clé n'existe pas
            Dico.Add client, .DataBodyRange(i, 2) & "," & .DataBodyRange(i, 3) & ",1" 'on l'ajoute avec en valeur la concaténation du montant,département,nb de commande
            
        Else 'une entrée existe déjà ==> on met donc à jour la valeur
            Data = Split(Dico(client), ",") 'on sépare la valeur dans un tableau "Dat"
            Data(0) = Data(0) + .DataBodyRange(i, 2) 'mise à jour du montant total
            Data(2) = Data(2) + 1 'incrémentation du nombre de commande
            Dico(client) = CStr(Data(0) & "," & Data(1) & "," & Data(2)) ' on met la valeur à jour
        End If
    Next i
End With

Range("M5").Resize(Dico.Count) = Application.Transpose(Dico.keys) ' on inscrit la liste des clients
Range("N5").Resize(Dico.Count) = Application.Transpose(Dico.items) ' on inscrit les valeurs associées

Range("N5").Resize(Dico.Count).Select 'on utilise la conversion pour séparer selon la virgule utilisée pour créer les éléments de la valeur du client
Selection.TextToColumns Destination:=Range("N5"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
    Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
    :=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
        

Set Dico = Nothing
End Sub

PS: les données à traiter doivent etre mises sous la forme d'une table structurée avec le nom "t_Data"
 

Discussions similaires

Réponses
5
Affichages
403

Statistiques des forums

Discussions
315 090
Messages
2 116 102
Membres
112 661
dernier inscrit
ceucri