Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Recherche valeur client identique et somme du montant

  • Initiateur de la discussion Initiateur de la discussion ted1057
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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"
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
698
Réponses
0
Affichages
627
Réponses
6
Affichages
558
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…