Eviter les doublons sur une Liste déroulante avec userform

MOLLE

XLDnaute Nouveau
Bonjour à tous,

Je travaille actuellement sur un formulaire qui doit me permettre de saisir des données plus simplement. J'avais déjà utilisé le même formulaire sur un autre projet qui fonctionne très bien et j'ai donc tout repris en modifiant seulement quelques petites choses. Mon soucis, c'est que mes listes déroulantes sont vides malgré que j'ai un tb.additem... qui fonctionnait très bien avant. Est-ce que quelques experts peuvent jeter un œil à mon projet car je ne comprend pas pourquoi ça ne fonctionne pas. Il y a certainement d'autres erreurs mais je n'ai pas pu tester pour le moment. C'est la macro formulaire qui permet de lancer le programme.

Merci par avance,
 

Pièces jointes

  • Critères Epernay.xls
    276 KB · Affichages: 54

Lone-wolf

XLDnaute Barbatruc
Bonjour molle

Pour commencer relit attentivement, le message du post #14. Deuxièmement, pour remplir un combobox sans doublons.

VB:
Private Sub UserForm_Initialize()
    Dim i As Integer
   
    For i = 1 To Range("A65536").End(xlUp).Row
        ComboBox1 = Range("A" & i)
        If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Range("A" & i)
    Next i
End Sub

Troisièmement, crée une private-sub (ex.: Private Sub Noms_Clients() ), met le code de la combo1.

Dans la combo1: If Combobox1 <>"" then Call Nom_Clients. Fait de même pour la combo2.
 

MOLLE

XLDnaute Nouveau
Désolé Lone-wolf, je n'avais pas vu que tu m'avais répondu. Merci pour ton aide. Du coup, j'avais un peu avancé de mon coté. Maintenant, la seule erreur que j'ai, c'est que quand je souhaite récupérer un enregistrement pour le modifier, si j'ai une colonne de vide, il me renvoi une erreur. J'imagine qu'il y a une petite chose à rajouter du type If TB = "" mais je ne sais absolument pas comment faire.
Je remets mon fichier légèrement modifié.

Je n'ai pas tout compris à ce que tu as mis au dessus concernant la création d'un private sub ... A priori j'ai une autre méthode dans mon fichier pour éviter les doublons et ça semble fonctionner même si c'est moins abouti que ta proposition.
 

Pièces jointes

  • Critères Epernay.xls
    384.5 KB · Affichages: 41

Lone-wolf

XLDnaute Barbatruc
Bonjour Molle

Concernant la la private sub recherche()

VB:
Private Sub ComboBox1_Change()
    If ComboBox1 <> "" Then
        Call Rech1
    Else
        Exit Sub
    End If
End Sub

Private Sub Rech1()
Dim J As Long

    Nettoyage    'Lance le programme Nettoyage

    Me.ComboBox2.Clear    'Efface les données de la combobox2
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    With Me.ComboBox2
        For J = 2 To NbLignes
            If Ws.Range("A" & J) = Me.ComboBox1 Then
                .AddItem Ws.Range("B" & J)
                .List(.ListCount - 1, 1) = J
            End If
        Next J
    End With
End Sub


Private Sub ComboBox2_Change()
    If ComboBox2 <> "" Then
        Call Rech2
    Else
        Exit Sub
    End If
End Sub



Private Sub Rech2()
Dim Ligne As Long
Dim I As Integer
Dim TB
    Nettoyage    'Lance le programme Nettoyage
    If Me.ComboBox2.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox2.List(Me.ComboBox2.ListIndex, 1)
    For I = 1 To 33
        Me.Controls("TB" & I) = Ws.Cells(Ligne, I + 2)
    Next I
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 211
Messages
2 086 299
Membres
103 172
dernier inscrit
Aurelyan