Recherchev via combobox pour incrémenter plusieurs textbox

Bonjour,

j'ai eu beau chercher sur tous les forums, je n'ai pas trouvé la solution à mon point de blocage... Le sujet est traité mais mon expérience insuffisante sur VBA fait que je n'arrive pas à compiler plusieurs codes pour atteindre mon but...

je joins un fichier pour illustrer mon besoin:

Contexte: (ce qui est en vert fonctionne, ce qui est en rouge n'est pas encore codé)

j'ai simplifié mon fichier pour que ce soit plus clair. J'ai donc une base de donnée simple avec le "nom prénom" et l'intitulé d'une formation

Pour certaines personnes, elles peuvent avoir suivi plusieurs formations et donc apparaître sur plusieurs ligne

J'ai un USF qui a pour objectif d'être une synthèse par collaborateur: lorsque je cherche le collaborateur à partir de la combobox, dès que je clique sur mon bouton de recherche, j'aurai besoin que l'ensemble des formations suivies apparaissent dans mes textbox

Si quelqu'un peut m'accompagner sur cette recherche svp...

99help.xlsm (15.50 Ko)

Bonjour,

Le code est dans la Sub évènementielle "ComboBox1_Change()" pour remplir les TextBox mais je pense q'une ListBox serait plus appropriée :

Private Sub UserForm_Initialize()

    ComboBox1.ColumnHeads = True

    ComboBox1.RowSource = "feuil1!A2:A900"

End Sub

Private Sub ComboBox1_Change()

    Dim Plage As Range
    Dim Cel As Range
    Dim Adr As String
    Dim I As Integer

    With Worksheets("Feuil1"): Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With

    Set Cel = Plage.Find(ComboBox1.Text, , xlValues, xlWhole)

    If Not Cel Is Nothing Then

        Adr = Cel.Address

        ListBox1.Clear

        Do

            'attention, il faut gérer la possibilité qu'il y est plus de trois formations donc erreur avec trois TextBox
            I = I + 1
            Me.Controls("TextBox" & I).Text = Cel.Offset(, 1).Value

            'ici, avec une ListBox qui me semble plus appropriée !
            ListBox1.AddItem Cel.Offset(, 1).Value

            Set Cel = Plage.FindNext(Cel)

        Loop While Cel.Address <> Adr

    End If

End Sub

merci pour la réactivité!!

J'ai transcris le code directement mais le message d'erreur 'do sans boucle' apparaît, je ne vois pas pourquoi.

J'ai ajouté la fin de commande End Sub, sans succès.. et End if (ayant vu un If sur les lignes plus haut) mais pas plus concluant...


erreur de ma part, j'ai fait un peu trop vite...

ça fonctionne, c'est parfait je vous remercie

Je vais voir de mon côté comment faire pour augmenter le nombre de formation possible,

si besoin je ne manquerai pas de vous solliciter!

Décidemment je répond vraiment trop vite...!

la listbox est effectivement bien plus appropiée

Toutefois, dans mon fichier d'origine, j'ai prévu d'ajouter les éléments de date à laquelle la formation a été passée et de ce fait j'avais prévu de copier le code en l'adaptant à la colonne suivante dans ma ma base de donnée et en ajoutant d'autres textbox en face de celles me faisant l'inventaire des intitulés de formation.

Peut on du coup imaginer faire apparaître, dans la listbox, la date à laquelle a été passée l'information, sachant que cette donnée sera fournie en colonne C (il s'agirait de concatener l'information des 2 colonnes B et C en fait...)

Re,

Le code ci-dessous défini 3 colonnes à la ListBox dont une cachée qui contient le numéro de la ligne où se trouve la valeur :

Private Sub UserForm_Initialize()

    ComboBox1.ColumnHeads = True
    ComboBox1.RowSource = "feuil1!A2:A900"

    With ListBox1

        '3 colonnes dans la ListBox dont la dernière cachée (=0) pour contenir le numéro de ligne si besoin d'avoir accès aux valeurs
        .ColumnCount = 3
        .ColumnWidths = "95;95;0"

    End With

End Sub

Private Sub ListBox1_Click()

    MsgBox "La valeur se trouve sur la ligne '" & ListBox1.Column(2, ListBox1.ListIndex)

End Sub

Private Sub ComboBox1_Change()

    Dim Plage As Range
    Dim Cel As Range
    Dim Adr As String
    Dim I As Integer

    With Worksheets("Feuil1"): Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With

    Set Cel = Plage.Find(ComboBox1.Text, , xlValues, xlWhole)

    If Not Cel Is Nothing Then

        Adr = Cel.Address

        ListBox1.Clear

        Do

            'attention, il faut gérer la possibilité qu'il y est plus de trois formations donc erreur avec trois TextBox

            'ici, avec une ListBox qui me semble plus appropriée !
            With ListBox1

                .AddItem Cel.Offset(, 1).Value
                .Column(1, I) = Cel.Offset(, 2).Value 'la date en colonne C
                .Column(2, I) = Cel.Row 'numéro de la ligne où se trouve les valeurs cherchées

            End With
            I = I + 1

            Set Cel = Plage.FindNext(Cel)

        Loop While Cel.Address <> Adr

    End If

End Sub

merci à nouveau,

je vais mettre en oeuvre ce code au plus vite

Bonjour,

je suis toujours sur mon fichier et j'ai un souci avec le code suivant:

Private Sub CommandButton1_Click()

Dim Plage As Range

Set Plage = Sheets("Visites médicales").Range("F4:F900")

TextBox5 = Plage(1 + ComboBox1.ListIndex, 1)

Set Plage = Sheets("Effectif").Range("E2:E900")

TextBox2 = Plage(1 + ComboBox1.ListIndex, 1)

Set Plage = Sheets("Effectif").Range("C2:C900")

TextBox3 = Plage(1 + ComboBox1.ListIndex, 1)

Set Plage = Sheets("Effectif").Range("D2:D900")

TextBox4 = Plage(1 + ComboBox1.ListIndex, 1)

Cette commande me permet de remplir les textbox de mon userform avec les dates à partir de la valeur que j'inscrit dans la comboBox.

Mais, si dans les onglets concernés ("visites médicales", Effectif, ...) les personnes ne sont pas rangées dans le même ordre (alphabetique) alors la valeur que je retrouve dans les textbox n'est pas la bonne: la valeur qui s'inscrit ne dépend pas de la valeur en tant que telle mais de son emplacement (sa ligne) dans l'onglet...

Je n'arrive pas à fair en sorte que la recherche se fasse en fonction de la valeur et non pas de l'emplacement de la valeur dans le premier onglet

Si vous pouviez me donner à nouveau un coup de pouce...

Rechercher des sujets similaires à "recherchev via combobox incrementer textbox"