Comptabiliser et recherche d'une valeur spécifique sans doublons

Bonjour à toutes et à tous,

Je bloque actuellement sur un code qui devrait pourtant être évident

J'utilise un formulaire pour l'enregistrement d'une commande dans une base de données Excel.

Celui-ci vérifie préalablement le statut de la commande et de son numéro de ligne (existante ou nouvelle).

Un code_suite (numéro ID) est généré automatiquement après validation du formulaire.

Le code_suite est composé du n° de la commande + n° de ligne (000) + incrémentation (0000)

Afin de mieux comprendre le système mis en place, voici un exemple :

Code_suite

218015550010001 FOREUSE

218015550020001 MARTEAU BLANC

218015550020002 MARTEAU BLANC

218015550030001 PERCEUSE JAUNE

218015550030002 PERCEUSE JAUNE

218015550030003 PERCEUSE JAUNE

Nous avons donc 6 enregistrements dans cette commande composée de 3 numéros de lignes.

Avec un nb.si, j'arrive facilement à afficher la quantité d'enregistrements (6) de la commande introduite.

Par contre, je n'arrive pas à afficher la quantité de lignes de la commande (3).

Afficher la quantité me suffirait mais serait-il envisageable d'afficher le résultat dans une listbox à 4 colonnes ?

Pourriez-vous m'éclairer ?

Je vous en remercie d'avance

Bonjour

Tu devrais joindre ton fichier.

Bye !

Bonjour,

Une piste en supposant que les numéros soient en colonne A à partir de A2. Pour mon test, le résultat est inscrit dans la fenêtre d'exécution :

Sub Test()

    Dim Dico As Object
    Dim Plage As Range
    Dim Cel As Range
    Dim Tbl
    Dim Valeur As Variant
    Dim Cle As Variant
    Dim I As Integer
    Dim J As Integer

    'création du dictionnaire
    Set Dico = CreateObject("Scripting.Dictionary")

    'les codes en colonne A de la feuille "Feuil1" à partir de A2, adapter !
    With Worksheets("Feuil1"): Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With

    'tronque les 4 derniers chiffres qui représentent les numéro de lignes (enfin, c'est ce que je suppose...)
    For Each Cel In Plage

        Dico(Left(Cel.Value, Len(Cel.Value) - 4)) = Dico(Left(Cel.Value, Len(Cel.Value) - 4)) & Cel.Value & ";"

    Next Cel

    Valeur = Dico.Items
    Cle = Dico.keys

    For I = 0 To Dico.Count - 1

        'récupère dans un tableau les différentes ligne de la commande en cours
        Tbl = Split(Valeur(I), ";")

        'affiche les résultats dans la fenêtre d'exécution, adapter ici pour la récup des valeurs !
        Debug.Print "Il y a " & UBound(Tbl) & " ligne(s) dans la commande "; Cle(I); " dont voici la liste :"

        For J = 0 To UBound(Tbl) - 1

            Debug.Print vbTab & Tbl(J)

    Next J, I

End Sub

Afficher la quantité me suffirait mais serait-il envisageable d'afficher le résultat dans une listbox à 4 colonnes ?

C'est possible mais je suppose que "218015550010001" est dans une colonne (pour mon test en colonne A) et "FOREUSE" dans une autre mais que veut-tu mettre dans les deux autres ?

Bonjour à toutes et à tous,

Merci pour ton code Theze !

Comme demandé, voici ci-joint le fichier concerné.

Le formulaire USF_CMD permet de vérifier le statut d'une commande (nouvelle ou existante).

Si la commande est existante, je cherche le moyen d'afficher tous les enregistrements relatifs à celle-ci dans la listbox "LB_LISTE".

La base de données a été créée dans un tableau nommé "TABLEAU". Normalement, celui-ci devrait contenir +/- 50.000 lignes.

Dans mon exemple, les enregistrements des 2 commandes sont sont consécutifs. Quid si ils ne le sont pas ?

Merci à vous pour votre aide précieuse !

Rechercher des sujets similaires à "comptabiliser recherche valeur specifique doublons"