=>fanou06
Aimer comprendre, c'est déjà l'essentiel prémisse
Et si tu comprends ce tu aimes, alors ton CHH devrait produire quelques endomorphines une fois que tu auras étudié ce petit exemple.
Bonsoir le forum J'ai des soucis dans le réalisation de ma liste de validation sans doublons Pour éviter les formules matricielles, j'ai nommé mes formules pour chaque colonne CODE pour la feuille BASE et FORMULE pour ma feuille PRODUITS la colonne S de la feuille BASE est évolutive donc...
Bonjour @soan ,
N'ayant très peu de temps pour chercher sur ce sujet et Fanou n'ayant pas mis un résultat à sa recherche, peux-tu m'aider stp ? Je cherche à avoir une liste déroulante sans doublon pour la colonne fournisseur puis ensuite choisir par article. Merci d'avance.
j'ai téléchargé ton fichier, mais il n'y a pas de noms de fournisseurs ! c'est à toi de les mettre afin qu'un contributeur ne perde pas son temps à inventer des données ! et où veux-tu ta liste déroulante ? dans un UserForm ? il n'y en n'a pas dans ton fichier ! alors peut-être que tu n'as pas transmis le bon fichier ? ou peut-être que tu veux un contrôle de liste déroulante directement sur la feuille de calcul ? c'est à toi de mieux préciser ta demande ! de plus, comme je suis déjà débordé, je n'aurai pas le temps de m'en occuper.
autre chose : c'est beaucoup mieux que tu crées une autre discussion, qui sera ton propre sujet. en même temps, tu as ces 4 avantages : plus de contributeurs verront ta demande ; tu auras plus de chances de recevoir des réponses ; ton sujet pourra être inscrit automatiquement dans les discussions similaires (en bas de la page web) ; tu pourras marquer un des posts de réponse en tant que solution.
j'ai téléchargé ton fichier, mais il n'y a pas de noms de fournisseurs ! c'est à toi de les mettre afin qu'un contributeur ne perde pas son temps à inventer des données ! et où veux-tu ta liste déroulante ? dans un UserForm ? il n'y en n'a pas dans ton fichier ! alors peut-être que tu n'as pas transmis le bon fichier ? ou peut-être que tu veux un contrôle de liste déroulante directement sur la feuille de calcul ? c'est à toi de mieux préciser ta demande ! de plus, comme je suis déjà débordé, je n'aurai pas le temps de m'en occuper.
autre chose : c'est beaucoup mieux que tu crées une autre discussion, qui sera ton propre sujet. en même temps, tu as ces 4 avantages : plus de contributeurs verront ta demande ; tu auras plus de chances de recevoir des réponses ; ton sujet pourra être inscrit automatiquement dans les discussions similaires (en bas de la page web) ; tu pourras marquer un des posts de réponse en tant que solution.
Bonjour @soan, Pas de soucis, merci de ton retour, j'avais fait très vite, trop vite. C'était juste de dire qu'en cellule B2 de l'onglet réception cela propose une liste déroulante de la colonne A onglet Table sans doublon.
Bonne journée.
moi aussi, j'avais fait trop vite ! j'avais ensuite compris que les fournisseurs sont ceux de la feuille "TABLE", en A2:A13 ; et cela même si bizarrement, l'intitulé de la colonne est "TARIF ACHAT" et pas "FOURNISSEUR" ; de plus, même si c'est des fournisseurs fictifs, ça n'a vraiment pas l'air de noms de fournisseurs ! exemples : HA ressemble à l'abréviation comptable pour le Journal des Achats ; DE ressemble à l'abréviation de DEUTCH (Allemand) ; SP ressemble à l'abréviation de SPAIN (Espagne) ; pour FRECH, serait-ce ton abréviation de FRENCH (français) ? BRI = BRITAIN (Angleterre) ? et pour DEY et BEAU ? mystère ! ainsi, pour des noms de fournisseurs fictifs, tu mets un code de Journal comptable et des abréviations de pays ou de langues ? (c'est plutôt un peu surprenant, mais après tout, pourquoi pas ? )
j'ai quand même fait le fichier joint ; sur la feuille "RECEPTION", fais Ctrl e ➯ affichage du formulaire "Liste des Fournisseurs" ; tu peux vérifier que la liste déroulante des Fournisseurs contient la liste des fournisseurs sans doublon ; ce n'est pas exactement ta demande, mais tu peux t'en inspirer pour faire ce que tu attends ; en fait, tu peux utiliser une partie du code VBA pour l'adapter à une règle de validation pour chaque cellule de ta colonne B(de la feuille "RECEPTION"), mais ça fait longtemps qu'j'ai pas manipulé de règles de validation par VBA, alors je te laisse voir ça avec un autre contributeur, et dans une autre discussion que celle-ci. bonne chance !
code VBA du UserForm "ListFRS" :
VB:
Option Explicit
Private Sub UserForm_Initialize()
Dim T, d, n&, i&: Application.ScreenUpdating = 0
Set d = CreateObject("Scripting.Dictionary")
With Worksheets("TABLE").ListObjects("Tableau2")
If .DataBodyRange Is Nothing Then Exit Sub
n = .ListRows.Count: If n = 0 Then Exit Sub
T = .Parent.[A2].Resize(n)
End With
For i = 1 To UBound(T)
If T(i, 1) <> "" Then d(T(i, 1)) = ""
Next i
cbFournisseurs.List = d.Keys
End Sub
pour éviter les doublons, j'ai utilisé la technique du dictionnaire ;
c'est un objet de la bibliothèque "Scripting.Dictionary".
moi aussi, j'avais fait trop vite ! j'avais ensuite compris que les fournisseurs sont ceux de la feuille "TABLE", en A2:A13 ; et cela même si bizarrement, l'intitulé de la colonne est "TARIF ACHAT" et pas "FOURNISSEUR" ; de plus, même si c'est des fournisseurs fictifs, ça n'a vraiment pas l'air de noms de fournisseurs ! exemples : HA ressemble à l'abréviation comptable pour le Journal des Achats ; DE ressemble à l'abréviation de DEUTCH (Allemand) ; SP ressemble à l'abréviation de SPAIN (Espagne) ; pour FRECH, serait-ce ton abréviation de FRENCH (français) ? BRI = BRITAIN (Angleterre) ? et pour DEY et BEAU ? mystère ! ainsi, pour des noms de fournisseurs fictifs, tu mets un code de Journal comptable et des abréviations de pays ou de langues ? (c'est plutôt un peu surprenant, mais après tout, pourquoi pas ? )
j'ai quand même fait le fichier joint ; sur la feuille "RECEPTION", fais Ctrl e ➯ affichage du formulaire "Liste des Fournisseurs" ; tu peux vérifier que la liste déroulante des Fournisseurs contient la liste des fournisseurs sans doublon ; ce n'est pas exactement ta demande, mais tu peux t'en inspirer pour faire ce que tu attends ; en fait, tu peux utiliser une partie du code VBA pour l'adapter à une règle de validation pour chaque cellule de ta colonne B(de la feuille "RECEPTION"), mais ça fait longtemps qu'j'ai pas manipulé de règles de validation par VBA, alors je te laisse voir ça avec un autre contributeur, et dans une autre discussion que celle-ci. bonne chance !
code VBA du UserForm "ListFRS" :
VB:
Option Explicit
Private Sub UserForm_Initialize()
Dim T, d, n&, i&: Application.ScreenUpdating = 0
Set d = CreateObject("Scripting.Dictionary")
With Worksheets("TABLE").ListObjects("Tableau2")
If .DataBodyRange Is Nothing Then Exit Sub
n = .ListRows.Count: If n = 0 Then Exit Sub
T = .Parent.[A2].Resize(n)
End With
For i = 1 To UBound(T)
If T(i, 1) <> "" Then d(T(i, 1)) = ""
Next i
cbFournisseurs.List = d.Keys
End Sub
pour éviter les doublons, j'ai utilisé la technique du dictionnaire ;
c'est un objet de la bibliothèque "Scripting.Dictionary".
bonne journée à toi aussi.
Bonjour @soan, merci j'ai bien compris, ça va le faire dans un premier temps, merci beaucoup. Alors pour le coup les noms de fournisseurs c'est uniquement les 2 premières lettres du véritables fournisseurs Fallait pas aller chercher si loin, la prochaine fois j'y mettrai des noms de Padawan Très bonne journée
tu as écrit : « Alors pour le coup les noms de fournisseurs c'est uniquement les 2 premières lettres du véritable fournisseur Fallait pas aller chercher si loin... »
merci beaucoup pour l'explication !
tu as écrit : « j'ai bien compris, ça va le faire dans un premier temps »
@soan
il est intéressant quand on rempli des combo ou listbox avec des plages ou tableaux structurés
de savoir que pour y avoir accès ou que l'on soit dans les feuilles , l'accès par la collection range est plus simple
j'entends par la que
pour y avoir accès dans ton events intialise tu met With Worksheets("TABLE").ListObjects("Tableau2")
et oui en en effet par la collection listobjects on est obligé de préciser la feuille parent
tandis qu'avec la collection range on en a pas besoins car la range "tableau2" il ne peut y en avoir qu'une
exemple msgbox range("Tableau2").range.address
non seulement tu a ton tableau mais en même temps tu a le databodyrange( sans l’entête)
et tu peux lancer cet ligne de n'importe ou sans préciser le parent
si tant est qu'un dictionnaire pour une liste de moins de 500 items soit nécessaires
ici je n'en vois pas l'utilité
je vous propose donc une version sans listobject , sans dictionnaire mais sans doublons quand même
VB:
Private Sub UserForm_Initialize()
Dim T, i&, x
T = Range("Tableau2").Resize(, 1).Value 'on prend la colonne(1) de tableau2 dans une variable tableau
If UBound(T) > 1 Then 'si il y a databodyrange le range le renvoie aussi donc un simple test du ubound(t) fait l'affaire
For i = 1 To UBound(T) 'on boucle sur la variable tableau
x = Application.Match(T(i, 1), T, 0) 'on teste simplement le match qui nous donne la position de l'item dans le tableau(t)
' tout simplement si x= la variable(i) incrémenté par la boucle alors cette chaîne n'est pas encore passé donc on l'ajoute a la liste
If x = i and t(i,1)<>"" Then cbFournisseurs.AddItem T(i, 1)
Next i
End If
End Sub
et voila plus de dico plus de listobject simplement le value d'un range inséré dans la liste avec test match pour les doublons
a noter que toujours sans listobject j'aurais pu obtenir cette colonne directement par son nom
exemple MsgBox Range("tableau2[TARIF ACHAT]").Address