Bonjour @soan ,Bonsoir @fanou06, Staple,
si tu y arrives : parfait ! sinon, joins ton fichier
(sans données confidentielles), et je le ferai pour toi.
(ma solution sera en VBA. )
soan
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.Bonjour Marjo2,
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.
soan
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
@Marjo2
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
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