Bonjour Bichon, John et tout le forum...
J'ai le code suivant à te proposer. J'utilise la méthode Find pour aller rechercher le nom de ton fichier directement sur la feuille Baseopt.:
Private Sub CommandButton5_Click()
Dim i As Byte
'tu peux mettre Byte au lieu d'Integer si tu es sûr d'avoir moins de 255 données
'Integer si tu as entre 255 et 32 767 données, Long si plus de 32 767
'C'est une habitude à prendre pour optimiser.
'Nb: je l'ai appris sur le forum il y a 1 semaine!
Dim NomClasseur As String
For i = 1 To ListBox2.ListCount
If ListBox2.Selected(i - 1) Then
'Allons rechercher l'élément sur la feuille Baseopt:
NomClasseur = Worksheets("Baseopt").Cells.Find(What:=ListBox2.List(i - 1), After:=ActiveCell, LookIn _
:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:= _
xlNext, MatchCase:=False).Cells(1, 2)
'Ouvrons le fichier correspondant:
Workbooks.Open FileName:="F:\Metachut\Optmet\Fiches\" & NomClasseur
End If
Next i
Optbase.Hide
End Sub
Quelques remarques:
1- je ne comprends pas trop l'intérêt d'avoir 2 ListBox sur ton Userform:
L'utilisateur est obligé de sélectionner l'élément sur la ListBox1, de cliquer sur le bouton "Selectionner" pour envoyer l'élément sur la ListBox2, de resélectionner à nouveau l'élément dans la ListBox2, et enfin de demander à visualiser la fiche.
N'aurait-il pas été plus simple de demander à visualiser directement la fiche de l'élément séléctionné en ListBox1? Les listBox sont faites pour cela: donner la possibilité de sélectionner un élément dans une liste.
Dans ce cas, tu supprimes la ListBox2, tu supprimes aussi les boutons séléctionner et déselectionner, et tu mets ce code plus simple:
Private Sub CommandButton5_Click()
Dim i As Byte
Dim NomClasseur As String
For i = 1 To ListBox1.ListCount
If ListBox1.Selected(i - 1) Then
NomClasseur = Worksheets("Baseopt").Range("B5").Cells(i, 1)
' les données sont rentrées dans ListBox1 dans l'ordres de la colonne A
' Le nom de classeur du ième élément de la listbox1 est donc à la ième ligne à partir de B5 de Baseopt
Workbooks.Open FileName:="F:\Metachut\Optmet\Fiches\" & NomClasseur
End If
Next i
Optbase.Hide
End Sub
Ceci dit, tu as peut-être une raison d'utiliser la deuxième ListBox, et dans ce cas, prends le premier code ci-dessus.
2- Tu m'as envoyé des mails directement après ton premier fil qui traitait du même sujet. Perso, ça ne me dérange pas tant que cela reste exceptionnel et limité. Mais imagines si tout le monde fait pareil! Et surtout, je ne suis pas en permanence sur mon ordi (dèjà trop souvent pour Mme LaurentTBT!). Il me faut donc pas mal de temps pour répondre, tu l'as vu. Alors reste sur le forum, cela permettras à d'autres de te dépanner plus vite, comme John. Nombreux sont les pros du forums qui tirent plus vite que leur ombre!
3- Essayes de faire un effort pour te faire comprendre, car le premier fil et tes mails étaient durs à suivre. Il est vrai que c'est parfois très difficile d'expliquer clairement les problèmes.
4- Du coup, je suis parti dans une mauvaise direction, en pensant à des ListBox multicolonnes. Ce qui explique le List(i-1,n-1) à oublier dans le cas concret présent.
5- Et c'est le plus important: Ne prend surtout pas ombrage de ce que j'écris en §2 et 3. Ce ne sont pas des remontrances mais des conseils généraux qui ne s'appliquent d'ailleurs pas qu'à toi. Car comme l'a dit Thierry très récemment, on est là avant tout pour s'entraider, et quelques règles simples (cf la Charte) permettront un gain d'éfficacité à tous...