J'ai créé une application VBA (voir fichier joint) permettant à mes collaborateurs de trouver facilement une cellule donnée. Son fonctionnement est assez simple : grâce à un userform on sélectionne le N° de commande souhaitée (listebox) puis la date de la commande (combobox). Lorsqu'on clique sur chercher, Excel nous montre la cellule à modifier par l'intersection de la ligne et colonne voulues (choisi précédemment dans l'userform).
Par exemple :
Mon problème, est qu'avec le code actuel, c'est uniquement le dernier enregistrement 860878/9 qui fonctionne. Pour tous les autres, le VBA me renvoi une erreur "13" qui pointe vers cette ligne :
VB:
Ligne = Application.Match(CStr(Me.ListBox1.Text), .[C:C], 0)
Selon moi, c'est CStr qui pose problème. Donc, je le modifie par CLng.
Avec cette modification tous les enregistrements de type nombre fonctionne avec le formulaire. Mais, ce n'est plus le cas avec le 860878/9 (en prenant en compte que dans mon fichier professionnel il y a beaucoup plus d'enregistrements de ce type...).
Ma question est donc la suivante :
Est-il possible de modifier mon code actuel de façon à ce que tous les numéros de commande soient pris en compte dans l'application ? (et que je n'ai plus de message d'erreur).
Dans le même temps :
Est-il possible que ma listbox de mon userform affiche une fois et une seule les données en double ?
Par exemple, la commande 8000 est présente trois fois, est-il possible de l'afficher une seule fois.
Par la suite je vais chercher à faire apparaître dans une autre listbox les différents types d'envoi lorsqu'une valeur de la colonne N° de commande est en double. (si vous connaissez la solution n'hésitez pas).
Merci pour votre aide, à votre disposition pour tous détails.
Baptiste.
Private Sub UserForm_Initialize()
Dim C As Range
Set f = Sheets("Feuil1")
Set MonDico = CreateObject("Scripting.Dictionary")
With f
a = .Range("C4", .Cells(.Rows.Count, 3).End(xlUp)) ' tableau a(n,1) pour rapidité
End With
For i = LBound(a) To UBound(a)
If a(i, 1) <> "" Then MonDico(a(i, 1)) = ""
Next i
Me.ListBox1.List = MonDico.keys
With f
For Each C In .Range("E2", .Cells(2, Columns.Count).End(xlToLeft))
Me.ComboBox1.AddItem C.Value
Next C
End With
End Sub
Pour voir si j'ai bien compris :
Pour le moment l'initialisation que tu me proposes permet uniquement de supprimer les doublons ? Il ne me propose les choix de la colonne type d'envoi.
Je vous joint le fichier mis à jour avec les aides ci-dessus.
ce que je pressens:
1) tu vas vouloir sélectionner un N° de commande dans une listbox 1
2) une seconde ListBox2 va devoir s'alimenter en type d'envoi dispo pour l'élément sélectionné en listbox1 : il s'agit de listbox en cascades
puis avec la date sélectionnée en combobox (pourquoi ne pas rester en listbox ?)
tu cherches le croisement: avec méthode Find comme te le suggérait Lone-Wolf (hello :-D)
Bonsoir,
Les données dans la colonne C (N° de commande) doivent être re-saisies.
Elles ont été formatées texte après la saisie
Voir PJ
*Le fait de ne pas afficher les doublons de commande limite la recherche au premier item trouvé.
Sinon une combobox avec les 3 types d'envoi doit être rajoutée.
Bonsoir Jacky67,
Merci de ton aide ça fonctionne bien mieux ainsi !
*Le fait de ne pas afficher les doublons de commande limite la recherche au premier item trouvé.
Sinon une combobox avec les 3 types d'envoi doit être rajoutée.
Le problème c'est que les enregistrements de mon fichier professionnel ne se limite pas aux trois types d'envoi comme je l'ai mis dans mon fichier. Ça peut-être vraiment n'importe quoi du style :
Bonjour Jacky67,
C'est en effet, notre solution actuelle. Néanmoins, nous voulons mettre en place le système que je vous ai expliqué plus haut afin de gagner en temps et de ne plus interagir avec des filtres.
Un exemple sans formulaire. Je suppose que les nombres des cellules colorées correspondent aux « types » d’envoi. La macro de sélection de la date pourra être facilement complétée pour tenir compte de cet élément.