Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Visualiser element de listbox correspondant a un fichier (voir zip)

  • Initiateur de la discussion bichon
  • Date de début
B

bichon

Guest
Bonjour a tous les Exceliens et les exceliennes
alor voila en gros jai une base a 2 colonnes, la colonne A est le nom que je ve dans la listbox
la colonne B est le nom du fichier correspondant dans le dossier courant
mais le plus simple c'est que vous regardiez par vous meme le zip
en gros mon problème est que j'ai mis le code qui selectionne la colonne B
mais quand je l'ouvre avec le bouton visualiser il met chemin introuvable
alors que le chemin est bon
il doit y avoir un probleme soit dans le code du bouton
soit dans celui de la userform pour inserer la base dans la premiere listbox
voila

merci d'avance

bichon
 

Pièces jointes

  • liste2colonnes.zip
    14 KB · Affichages: 27
  • liste2colonnes.zip
    14 KB · Affichages: 27
  • liste2colonnes.zip
    14 KB · Affichages: 26
J

john

Guest
Salut,

Tu devrais essayer de taper ceci :

ListBox2.List(i - 1) à la place de ListBox2.List(i - 1,n-1), car déjà n à la valeur

nul et je ne pense pas que dans le listbox2.list qu'il y aille plusieurs éléments (i-1,n-1).

Moi en tout cas ça fonctionne comme je l'ai inscris là.

Bonne fin de journée.

John
 
B

bichon

Guest
salu jon
j'ai essayé ce que tu m'a dis
mais ca ouvre le fichier avec le nom de la colonne A
alors que je veux l'ouvrir avec le nom de la colonne B
voila
merci
 
J

john

Guest
Salut,

Autant pour moi, je n'avais pas compris qu'il te fallait le fichier qui se trouvait en colonne B.

Voilà le prg qui est fait. J'ai fais pas mal de tests et ça à l'air de fonctionné.

Tiens moi au courant de l'évolution des choses.

Bonne soirée.

John
 

Pièces jointes

  • liste2colonnes.zip
    14.1 KB · Affichages: 27
  • liste2colonnes.zip
    14.1 KB · Affichages: 29
  • liste2colonnes.zip
    14.1 KB · Affichages: 28
J

john

Guest
Re,

Sorry, je crois que j'ai dis une bêtise, le textbox utilise bien plusieurs arguments comme ceci : textbox1.list(i,n) mais uniquement quand le textbox utilise des colonnes, sinon un seul argument est nécessaire listbox.list(i)

Bonne soirée.

John
 
J

john

Guest
Re sorry,
plus haut je dis "J'ai fais pas mal de tests et ça à l'air de fonctionné."
bien évidemment vous aurez corrigé vous même ce n'est pas fonctionné avec "é" mais avec "er" donc ça donne
"J'ai fais pas mal de tests et ça à l'air de fonctionner."

Mia coulpa.

John
 
L

LaurentTBT

Guest
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...
 
L

LaurentTBT

Guest
Je viens juste de penser à un détail:
Les ListBox ont une propriété MutliSelect : Si elle est = fmMultiSelectSingle, l'utilisateur ne peut sélectionner qu'un seul élément de la list. Dans ce cas, la propriété Value du ListBox est justement égale à cet élément. Par conséquent, il n'y a pas besoin de faire une boucle sur tous les éléments pour connaitre l'élément sélectionné. Ce qui donne beaucoup plus simple:

Private Sub CommandButton5_Click()
Dim NomClasseur As String
'Allons rechercher l'élément sur la feuille Baseopt:
NomClasseur = Worksheets("Baseopt").Cells.Find(What:=ListBox2.value, 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
Optbase.Hide
End Sub

En revanche, si tu veux permettre à l'utilisateur de sélectionner plusieurs éléments, mets la propriété Multiselect de ta ListBox à fmMultiSelectMulti, et dans ce cas, la boucle est nécessaire (et tous les classeurs correspondants s'ouvriront).
 
@

@+Thierry

Guest
Bonjour ce fil, et le Forum

Et oui Laurent, il est parfois un peu triste d'avoir à tout le temps jouer le Lien supprimé ou le Lien supprimé sur ce Forum.

En ce qui concerne les mails persos, moi c'est très simple depuis un Lien supprimé, mon Outlook est muni de règles strictes... Si ça correspond pas Directe Panier !

Et pour JP, comme tu sembles être interressé par ce forum, essaie un minimum de respecter un peu nos règles, surtout en ce qui concerne ces questions identiques tout azimut... et pas souvent très claires... Et en plus en morceaux répétitifs Lien supprimé qui est pratiquement un doublon de celui-ci, et par conséquent que je laisse tomber.

Bonne Journée
@+Thierry
 
B

bichon

Guest
Bonjour a tous
tout d'abord je tiens a m'excuser aupres du gendarme thierry (rires ..) pour mes questions pas tres
claires et qui se ressemble mais tout le monde c'est que ca s'assemble
donc voila
2eme chose merci a laurent pour son aide ca marche sans problèmes j'ai pris la solution d'ouvrir les classeurs
dans la permiere liste
Je joint un fichier joint en fait c'est la suite de l'autre je fais un nouveau sujet comme c'est le meme
thieery sera content lol
donc voila maintenant que j'ai selectionner un element dans la 2 eme liste je met les element de cette liste
dans une autre userform et la j'ai essayai les codes de laurent mais ca ne marche pas tre bien
(cf zip) en fait il ouvre celui qui etait selectionné dans la list2 precedente
moi j'aimerai faire exactement la meme fonction que celle a laurent mais a ce niveau
je ne comprend pas pourquoi elle ne marche pas
merci a vous qui tenterai de me depaner
merci

bichon
 
L

LaurentTBT

Guest
Salut Jp.

Attention aux copier-coller un peu rapides!

Dans ta nouvelle userform "Zone", ta listbox s'appelle ListBox1, et non plus ListBox2. Tu as copiés exactement le même code que pour ouvrir depuis la ListBox2 de Optbase. Il faut donc remplacer ListBox2 par ListBox1.

Je te conseil d'ailleurs de donner un nom différent à cette nouvelle ListBox1, tout sera peut-être plus compréhensible.

Mais je ne vois toujours pas l'intérêt. Maintenant, tu utilise un 3ème listeBox pour faire la même chose. C'est un exercice de style pour apprendre à manier ces ListBox ou quoi?

Au fait, je suis un peu curieux, mais ces balises de détresses, elles servent en aéronautiques?
 
B

bichon

Guest
oui en fait entre les 2 userforms ya une autre userform c'est pour cela que tu comprend pas trop bien mais j'ai egalement essayé de changer la listbox1 mais il me sors indice en dehors de la plage

sinon oui c'est des options pour de l'aeronautique car j'effectue un stage chez eux et donc voila

pour l'indice tu pense que ca vient d'ou?
le code est le meme enfin la meme forme quoi c'est pas grave qu'on change de userform?


merci laulau
 
L

LaurentTBT

Guest
Oups, ValentinTBT, 2 ans, vient de me faire un on/off de la mutliprise...
Je termine donc vite fait ce pb, puis je m'occupe du bout d'chou. Si ma réponse ne suffit pas, il te faudra patienter jusqu'à ce soir, ou attendre un autre excelien pour répondre à ton secours, même si tes balise de détresse emettent en continu!!

Bon, c'est pas évident de corriger du code, je n'ai pas l'habitude.
Il fallait tout simplement remplacer Optbase.ListBox2 par Zone.ListBox1
 

Discussions similaires

Réponses
13
Affichages
291
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…