Faire une liste de clients en fonction des commandes VBA

Bonjour tout le monde,

Je reçois un fichier avec les commandes hebdomadaire. J'aimerais faire une liste des clients qui ont commandé dans une autre feuille. Forcément, j'aimerais ne pas avoir de doublons. Je veux faire ce programme car dans la réalité j'ai beaucoup beaucoup de commandes et les clients changent sans cesse.

Je ne sais pas comment agencer le code VBA pour faire cela. J'ai fait un début de programme mais je n'arrive pas à lui faire dire "si ce client a déjà été ajouté dans la liste, passe à la cellule suivante.

Je vous envoie un fichier pour que vous compreniez.

J'espère avoir été clair, n'hésitez pas à me poser des questions.

Merci,

Simon

17testclients.xlsx (9.97 Ko)

bonjour

fais un TCD que tu filtreras

aucun VBA, ni aucune formule

amitiés

Bonjour jmd,

Merci pour ta réponse. Malheureusement je ne peux pas faire de TCD, mon supérieur n'en veut pas et le fichier est pour lui... J'ai hésité à le mettre dans mon message initial, j'aurais dû

Est-ce possible de faire ça par VBA ?

Merci,

Simon

re

je n'ose pas écrire ce que je pense des idiots (ah, bah si. Je l'ai dit)

Micorsoft fournit des outils tout faits, et il n'en veut pas !

concernant VBA, je passe la parole à d'autres plus calés que moi en ce domaine

courage

amitiés

Re,

Pour sa défense, l'utilisation du fichier en est plus compliqué après car il y a un ajout manuel qui n'est pas très optimal avec un TCD.

Merci pour ton aide, en espérant que quelqu'un sache répondre à mon problème.

Simon

Bonjour,

Une proposition pour récupérer la liste unique des clients.

Cdlt.

12testclients.xlsm (22.83 Ko)
Public Sub CreateCustomerList()
'Déclaration des variables
Dim lo As ListObject, Dict As Object, Cell As Range
    'Initialisation des variables
    Set lo = ActiveSheet.ListObjects(1)
    Set Dict = CreateObject("Scripting.Dictionary")
    'Création liste unique des client
    For Each Cell In lo.ListColumns(2).DataBodyRange
        Dict(Cell.Value) = ""
    Next Cell
    'Restitution des données
    With Worksheets("Liste des clients")
        With .ListObjects(1)
            If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete
            .InsertRowRange.Cells(1).Resize(Dict.Count, 1).Value = Application.Transpose(Dict.keys)
        End With
        .Activate
    End With
End Sub

Jean-Eric,

Merci beaucoup c'est parfait.

Est-il obligatoire d'avoir un tableau pour faire cela ou est-il possible de le faire entre Range("C60") et Range("C112") ?

Merci,

Simon

Re,

Je mets toujours les données sous forme de tableau (structuré).

Depuis Excel 2010, il est préconisé de les utiliser (gestion des données).

Pour ton histoire de C60 et C112, je ne comprends pas tout !...

Le tableau peut être placé n'importe où dans la feuille de calcul !...

La procédure VBA prend en compte cette éventualité.

A te relire.

Cdlt.

Re,

D'accord pour les tableaux.

En fait, mon code copie colle les commandes sur la plage C60 (il y a 4 colonnes donc de C à F). Je n'avais donc pas créé de tableaux. Si je crée un tableau, est-ce que mon code devient ?

Public Sub CreateCustomerList()
'Déclaration des variables
Dim lo As ListObject, Dict As Object, Cell As Range
    'Initialisation des variables
    Set lo = ActiveSheet.ListObjects(1)
    Set Dict = CreateObject("Scripting.Dictionary")
    'Création liste unique des client
    For Each Cell In lo.ListColumns(4).DataBodyRange
        Dict(Cell.Value) = ""
    Next Cell
    'Restitution des données
    With Worksheets("Liste des clients")
        With .ListObjects(1)
            If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete
            .InsertRowRange.Cells(1).Resize(Dict.Count, 1).Value = Application.Transpose(Dict.keys)
        End With
        .Activate
    End With
End Sub

Re,

Si ta feuille ne comporte qu'un tableau, il n'y a rien à modifier.

Il faut simplement éventuellement changer le numéro de colonne du tableau pour les uniques.

For Each Cell In lo.ListColumns(4).DataBodyRange
        Dict(Cell.Value) = ""
    Next Cell

Dans l'exemple le client est en colonne 4 du tableau (pas le numéro de colonne dans la feuille).

A te relire.

Cdlt.

Jean-Eric,

Merci beaucoup c'est super.

Simple petite question, est-ce possible de faire cela sans tableau ? Peut-être que c'est trop compliqué et dans ce cas je ne le ferai pas mais ça m'arrangerait un peu je dois dire

Merci,

Simon

Re,

Une mise à jour !...

Cdlt.

19testclients-1.xlsm (29.52 Ko)

Jean-Eric,

Mille mercis c'est exactement ce qu'il me fallait.

Sujet clos.

Merci encore,

Simon

Rechercher des sujets similaires à "liste clients fonction commandes vba"