ListIndex ne fonctionne pas 1 fois sur 2

Bonjour à toutes et à tous,

Tout nouveau sur le forum, je m'appelle Rémi et habite en Normandie. J'utilise beaucoup Excel et profite de mes quelques connaissances informatiques pour me faciliter la vie avec VBA :)

J'ai aujourd'hui un problème que je n'arrive pas à solutionner et je n'en peux plus... J'ai fouillé le net y compris sur les sites anglais mais rien n'y fait.

Je ne peux hélas vous joindre mes fichiers car confidentiels, alors je vais essayer d'être le plus efficace possible et vous joindre tout de même des captures et du code (à la fin) :

- Un bouton sur une de mes feuilles ouvre un premier userform:

image

- Ce userform a des contrôles, et lorsque l'on clique sur le bouton "Renseigner les heures", cela initialise et ouvre un nouveau userform. L'initialisation du 2ème userform dépend des choix fait sur le premier.

image

- Dans ce deuxième userform je renseigne pour un ou une équipe de salariés les heures de travail effectuées pour chaque jour de la semaine ainsi que le chantier affecté au salarié/équipe. Chaque salarié renseigné dans la deuxième textbox blanche voit son nom ajouté à la listbox orange, contenant le nom des salariés de l'équipe.

- Je suis actuellement en train de créer une procédure qui doit récupérer les noms (dans le userform) et identifiants (sur une feuille excel) des salariés afin d'enregistrer leurs données dans une feuille Excel.

- Pour l'instant je me suis simplifié la tâche, je m'intéresse uniquement au cas ou il y a un seul salarié.

SAUF QUE VOILA.

Lorsque j'exécute ma procédure, je récupère le nom du salarié via la textbox, je l'ajoute dans la listbox et je le sélectionne, via LISTINDEX.

Sauf que, très précisément une fois sur deux, ça ne marche pas. C'est à dire que listindex me surligne en bleu le nom du salarié dans la listbox, mais une fois sur deux il n'est pas sélectionné, VBA voit une String vide. Si je force la sélection à la main, tout roule niquel...

Sub CommandButton1_click()

Dim cellule As Range

UserForm2.liste_equipe.Clear

'J'ajoute le salarié à la LISTBOX de l'équipe et je le sélectionne (comme il est seul dans la LISTBOX, son index est à 0)

UserForm2.liste_equipe.AddItem (UserForm2.nom_salarie.Value)

UserForm2.liste_equipe.ListIndex = 0

'On parcoure la liste des salariés situés sur une feuille Excel

For Each cellule In Sheets("Données").Range("A1:A50")

'Pour chaque salarié de l'entreprise situé sur la feuille Excel, on regarde si le nom dans le USERFORM correspond

If CStr(cellule.Value) = UserForm2.liste_equipe.Value Then

'Procédure à mettre ici. Pour l'instant, vérification avec MSGBOX

MsgBox ("Le salarié correspond et il se trouve sur la ligne " & cellule.Row)

End If

Next cellule

End Sub

Désolé c'était un peu long mais je préfère vous donner toutes les billes afin d'avoir le plus d'infos possible !

J'ai aussi tenté userform2.liste_equipe.Selected(0) = True mais cela fait pareil

Merci pour vos retours, ils me seront d'une immense aide !!

Rémi

Bonjour rrobert et

Pour votre problématique, d'après ce que je lis dans le code...
quel intérêt de mettre une Listbox si ce n'est que pour ce servir d'un seul nom ?

Pourquoi ne pas utiliser un simple Textbox ?

@+

Bonjour BrunoM45,

Pour un seul nom, aucun intérêt. Mais en réalité il y en aura plusieurs, d'où l'existence d'une listbox et non une TextBox.

C'est juste qu'il y aura certains cas où un seul nom sera ajouté à la ListBox et je souhaite ne pas avoir une textbox plus une listbox. Comme ça peu importe le nombre de noms dans la listbox, mon programme bouclera sur la même listbox.

Re ok,

Perso, je mémoriserais le nom du salarié avec une variable publique que je récupèrerais ensuite dans l'USF2 pour l'appliquer

Ceci dit, sans fichier anonymisé... il est compliqué de savoir

@+

Salut BrunoM45, rrobert

comme est dit sans fichier anonymisé... il est compliqué de savoir :

perso je pense qu avec ce code il est impossible de rencontrer des erreurs

Le code est simple : Tu ajoute le salarié à la LISTBOX de l'équipe depuis une textbox :

même si la textbox est vide la procédure va ajouter une entrée et la sélectionne comme une entré qui contient de vide :

UserForm2.liste_equipe.AddItem (UserForm2.nom_salarie.Value)
UserForm2.liste_equipe.ListIndex = 0

essayer avec cette manière :

Private Sub nom_salarie_Change()

    Dim cel As Range

   UserForm2.liste_equipe.Clear

   schr = UserForm2.nom_salarie.Text

   For Each cel In Sheets("Données").Range("A1:A50")

       If cel.Value Like schr & "*" And cel.Value <> "" Then
          UserForm2.liste_equipe.AddItem schr
          UserForm2.liste_equipe.ListIndex = 0
         'MsgBox ("Le salarié correspond et il se trouve sur la ligne " & cel.Row)
       End If

   Next cel
End Sub

Rechercher des sujets similaires à "listindex fonctionne pas fois"