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 !