Selon une combobox insérer une listbox

Bonjour,

Je reviens vers vous car autrefois j'eus aide dans la construction de mes userforms et des fonctionnalités. Pas très expérimentée alors je tâche d'apprendre petit pas par petit pas, en reprenant déjà ce que j'ai acquis.

Cette fois ci j'ai souhaité créer un formulaire avec 1 combobox, 1 listbox (en fonction du choix de la combobox) et pouvoir Si dans une case à cocher, c'est une case précise que cela me renvoie les données dans une feuille du classeur. En somme une case à cocher = une feuille du classeur. Mais malheureusement n'y étant pas parvenu, j'ai repris la méthode toute simple, un userform par feuilles.

En adaptant à ma base de données nommée ATU, et en ayant par contre la combobox faisant référence à la colonne D(liste de communes) qui doit être triée par ordre alphabétique et sans doublons, je rencontre des soucis. Tout d'abord j'ai réussi à filtrer ma combobox mais pas à la trier. Ensuite je n'obtiens pas ma listbox rempli, ni mes textbox, cela me ressort en jaune surlignée la ligne suivante:

Me.Controls("TextBox" & i) = ""
        Me.Controls("TextBox" & i) = Ws.Cells(Ligne, i).Value

Je ne comprends pas car dans mes précédents formulaires auxquels j'ai des codes identiques , seules les valeurs changent, ça fonctionne. J'ai tout tenté avec d'autres méthodes en cherchant via les forums, mais je ne saisie pas tout et là j'obtiens des code erreur dés le départ. J'ai donc essayé avec ce que j'ai sous la main. Voici mon code entier:

Option Explicit
Dim Ws As Worksheet
Dim nblignes As Integer
Dim Communes As Object, Habitant As Object
Dim Lignes(), Ligne As Long

Private Sub UserForm_Initialize()
Dim D As Object
Dim i As Integer

Set Ws = Sheets("ATU")
    nblignes = Ws.Range("d65536").End(xlUp).Row

With Me.ListBox1
        .ColumnCount = 2
        .ColumnWidths = "75;150"
    End With

    InitCombo1
End Sub

Sub InitCombo1()
    Dim i As Integer, j As Long
    Dim commune As String, N° As String
    Dim TextBox_lignes()

    Set Communes = CreateObject("Scripting.dictionary")
    For j = 2 To nblignes
        commune = Ws.Range("D" & j).Value

        If Not Communes.Exists(commune) Then Set Communes(commune) = CreateObject("Scripting.dictionary")
    Next j
    With Me.ComboBox1
        .Clear
        If Communes.Count > 0 Then .List = Application.Transpose(Communes.Keys)
    End With
End Sub
Private Sub ComboBox1_Change()
    Dim j As Long
    Dim N° As Variant
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub

    Nettoyage
    Set Habitant = Communes(Me.ComboBox1.Value)
    Me.ScrollBar1.Min = 0: Me.ScrollBar1.Max = UBound(Lignes): Me.ScrollBar1.Value = Me.ScrollBar1.Min
    ScrollBar1_Change

End Sub

Private Sub ScrollBar1_Change()
    Dim i As Integer

    Ligne = Lignes(ScrollBar1.Value)
    For i = 1 To 14
        Me.Controls("TextBox" & i) = Ws.Cells(Ligne, i).Value
    Next i

End Sub

Sub Nettoyage()
Dim i As Integer

    For i = 1 To 14
        Me.Controls("TextBox" & i) = ""
        Me.Controls("TextBox" & i) = Ws.Cells(Ligne, i).Value
    Next i
End Sub
Private Sub CommandButton1_Click() 'BOUTON "AJOUTER"
Dim Ligne As Integer
Dim i As Integer

    If MsgBox(" Ajout ?", vbYesNo, "Demande de confirmation") = vbNo Then Exit Sub

    Ligne = Ws.Columns("D").Find("").Row 'Permet de se positionner sur la dernière ligne de tableau NON VIDE
    For i = 1 To 14
           Ws.Cells(Ligne, i) = Me.Controls("TextBox" & i).Value

' Affiche une boîte de message
MsgBox (" enregistré")
Unload Me ' Vide et ferme l'Userform ( formulaire)
UserForm1.Show vbModeless  'Affiche le  formulaire
Application.ScreenUpdating = True
End Sub

'Pour le bouton Modifier
Private Sub CommandButton2_Click()
Application.ScreenUpdating = False
Dim i As Integer
Dim Ctrl As Control

    If Me.ComboBox1.ListIndex = -1 Then Exit Sub

    For i = 1 To 14
        If Me.Controls("TextBox" & i).Visible = True Then Ws.Cells(Ligne, i) = Me.Controls("TextBox" & i).Value

    Next i
    MsgBox ("Modification, enregistrees")

    Unload Me ' Vide et ferme l'Userform ( formulaire)
    UserForm1.Show vbModeless 'Affiche le formulaire
    Application.ScreenUpdating = True
End Sub

Private Sub CommandButton3_Click() 'bouton "QUITTER"
Unload Me 'vide et ferme l'UserForm en cours
End Sub

Sans doute que pour des personnes plus expérimentées dans le thème cela sera une évidence, pour moi un véritable casse tête.

D'avance merci

Bonjour Mistinguette, bonjour le forum,

Le code c'est bien... Le fichier c'est mieux...

Je vous joint un fichier que j'ai légèrement modifier pour les confidentialités des données. Merci bien de votre compréhension.

Merci de votre aide

Bonjour Minstinguette, bonjour le forum,

J'avais commencé à bosser sur ton projet quand je me suis rendu compte que les bases étaient différentes dans leur structure. Du coup j'ai abandonné car ça n'avait plus de sens... En pièce jointe le peu que j'ai fait.

Bonjour ThauThème et le forum,

Je vous remercie de vous être penchée sur mon souci, j'ai également abandonné de travailler su un simple et unique userform pour les différentes feuilles du classeur, car malheureusement je ne peux pas créer une structure de base de données identiques pour celles ci.

Partant d'un seul userform par page et souhaitant créer une listbox selon le choix de la combobox sans doublons et triée, comment puis je faire?

D'avance merci

Re,

Je n'aurais malheureusement pas le temps car je suis absent pour tout le week-end. Je reste attentif à ton fil et si personne ne te propose de réponse je regarderai à mon retour ce que l'on pourrait faire...

Merci, je continue à chercher aussi de mon coté…

Bonjour Mistinguette, bonjour le forum,

En pièce jointe ton fichier modifié "full comment". Je n'ai codé que l'UserForm7, tu adapteras pour l'UserForm1.

L'onglet de travail, variable OT, est défini par l'UserForm6. La ligne LI est la première ligne vide du tableau si tu n'as pas utilisé la partie Recherche/Rappel Dossier sinon elle est définie par la Commune et le RD...

Bonjour Thau Théme et le forum,

Merci beaucoup pour vos lumières et votre proposition, néanmoins ça ne fonctionne pas, j'ai réussi à rentrer dans le fichier mais dés que je lance les userforms ça me mets un message d'erreur comme quoi la variable n'est pas définie. Ensuite lorsque je ressorts et que je retente à nouveau, cela m'indique en surbrillance dans le "workbook" la partie d'ouverture automatique de mon formulaire d'accueil le userform6.

Je rentre en réunion, mais vais tacher demain de comprendre …

Que me conseillerez vous pour aller au plus simple et ainsi exploiter au mieux les formulaires?

D'avance merci.

Re,

Chez moi ça fonctionne. En pièce jointe la version 1.02. avec le code pour l'UserForm1.

Que te conseiller ? J'ai commenté tous les codes pour t'aider je ne peux pas faire plus... La propriété [Tag] des contrôles permet de récupérer les données du tableau vers l'UserForm et/ou d'envoyer les données de l'UserForm dans le tableau.

Merci bien Thau Thème cela va bien m'aider.

Rechercher des sujets similaires à "combobox inserer listbox"