recuperation données externe avec listbox

kolivier

XLDnaute Occasionnel
Bonjour le forum.

Avant d'aller plus loin, Je remercie déjà toutes les personnes qui liront ce message, qu'ils aient des idées ou pas. Merci de votre temps.

Mon PB est le suivant, je vous adresse le fichier ci-joint.

http://www.listebebe.com/exemple2.rar

Dans le fichier exemple.xls j'ai un bouton qui lance une macro qui récupére les données présentes dans un autre classeur fichier.xls.
LEs données doivent apparaitre dans le listbox multiple et en double cliquant sur une ligne je devrais voir apparaittre les infos dans les textbox.

Pour le test j'ai mis 15 textbox, mais en fait il y aurait plus d'une centaine d'infos donc s'il exsite une syntaxe de lecture automatique, elle serait la bienvenue.

Je remercie énormément

Bonne journée
 

kolivier

XLDnaute Occasionnel
Merci beaucoup de cette premiere réponse,

voici l'exeple en ZIP

http://www.listebebe.com/exemple2.zip

et voici un descriptif de ce que j'essaie de faire.

'Imaginons un fichier qui contient plusieurs lignes avec une centaines d'informations par ligne.

Imaginons que je souhaite que dans une listbox de mon userform, pour faciliter la lecture, je souhate qu'apparaisse trois colonne, genre NOM / PRENOM / AGE.
Les trois colonnes sont suffisantes pour identifier les paramettres essentiels.

LE PB arrive a ce moment la :

Si je clique sur une ligne de la listbox, il me renvoi dans les textbox uniquement que les trois colonnes comme infos soit
textbox1 = NOM
textbox2 = PRENOM
textbox3 = AGE

MAIS j'aurais aimé qu'apparaissent egalement les autres infos en plus des trois premieres dans les autres textbox adaptés.

Ce que je veux dire c'est qu'en double cliquant sur la listbox, il n'est capable que de rappeler que les informations correspondantes aux colonnes affichées.

Et la est tout mon PB, je ne peux pas afficher dans mon listbox 100 colonnes quand meme.

D'ailler je n'y sui spas arrivé il a bloqué aprés la neuvieme colonne.

Merci de votre grande générosité pour votre temps
 
B

bebere

Guest
bonjour

bonjour kolivier,Michelxld
ce code peut il t'aider
Private Sub ListBox1_Change()
Dim Plg As Variant, I As Integer, L As Integer
With ListBox1
For I = à To .ListCount - 1
If .Selected(I) = True Then
L = I + 2
Exit For
End If
Next I
End With
With Worksheets('DEMANDES')
Plg = .Range('A' & L & ':O' & L)
End With
For I = 1 To UBound(Plg, 2)
Controls('TextBox' & I) = Plg(1, I)
Next I
End Sub
à bientôt
 

kolivier

XLDnaute Occasionnel
Merci BEBERE, cela resoud mon PB en partie et c'est deja beaucoup.

Par contre j'ai mis textbox pour le test mais en fait tous mes textbox sont nommés dont je ne peux pas incrémenter le textbox.

Je vais voir comment adapter ton prgramme, car mes textbox enréalité, s'appelle :
NOM.text
PRENOM.text
DATE.text
STATUT.text
etc...

DOnc c'est presque parfait on code, il faut simplement que je trouve comment enlever ta fonction d'incrementation et la remplacer par une liste de de textbox nommés.

MErci deja beaucoup et je reste toujours en attente de telles brillantes idées :) .
 

Hervé

XLDnaute Barbatruc
bonjour

le plus simple serait de passer par les tag.

les tag sont des zones de stockages que l'on trouve dans les propriétés des ctrl, tu met 1 à la premiere textbox,2 à la deuxieme, etc...


en reprenant le code de bebere, un exemple de boucle sur les controles 'taggé':

Private Sub ListBox1_Change()
Dim Plg As Variant, I As Integer, L As Integer
ctrl As Control


With ListBox1
For I = à To .ListCount - 1
If .Selected(I) = True Then
L = I + 2
Exit For
End If
Next I
End With
With Worksheets('DEMANDES')
Plg = .Range('A' & L & ':O' & L)
End With

For I = 1 To UBound(Plg, 2)
For Each ctrl In Me.Controls
If Not ctrl.Tag = '' Then
If CDbl(ctrl.Tag) = I Then
ctrl = Plg(1, I): Exit For
End If
End If
Next ctrl
Next I
End Sub


sinon tu peux passer par un tableau des noms de tes controles, comme ceci :

Private Sub ListBox1_Change()
Dim Plg As Variant, I As Integer, L As Integer
Dim nom

nom = Array('nom', 'PRENOM', 'Date', 'STATUT') 'a adapter

With ListBox1
For I = à To .ListCount - 1
If .Selected(I) = True Then
L = I + 2
Exit For
End If
Next I
End With
With Worksheets('DEMANDES')
Plg = .Range('A' & L & ':O' & L)
End With
For I = 1 To UBound(Plg, 2)
Controls(nom(I - 1)) = Plg(1, I)
Next I

End Sub

petite question, comment as tu fait pour renommer un controles avec le mot DATE, chez moi ca ne passe pas.

salut
 

kolivier

XLDnaute Occasionnel
En fait j'ai le meme souci avec DATE, mais je n'avais pas encore écrit le prog dans mon code.
Donc je viens de voir le PB est le meme, il ne veut pas que je prenne DATE, je l'ai changé par DN
Par contre il m'indique qu'il y a une erreur dan le prog remodifié avec les CONTR

-----

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

Workbooks.Open ('c:\\fichier.xls')
Dim classeurDestination As Workbook
Dim feuilleDestination As Worksheet
Set classeurDestination = Workbooks('fichier.xls')
Set feuilleDestination = classeurDestination.Worksheets('DEMANDES')

Dim Plg As Variant, I As Integer, L As Integer
Dim nom
nom = Array('nom', 'PRENOM', 'DN', 'STATUT') 'a adapter

With ListBox1
For I = à To .ListCount - 1
If .Selected(I) = True Then
L = I + 2
Exit For
End If
Next I
End With
With Worksheets('DEMANDES')
Plg = .Range('A' & L & ':O' & L)
End With
For I = 1 To UBound(Plg, 2)
rem selon lui l'erreur est ICI
Controls(nom(I - 1)) = Plg(1, I)
rem ---------------
Next I
end sub


Merci HERVE de ton intervention
 

Hervé

XLDnaute Barbatruc
re :)

ben non, c'est pas la réplique exact, tu as 15 textbox sur ton usf et seulement 4 noms dans ton tableau de noms.

que sont devenu les textbox4 à 15

For I = 1 To UBound(Plg, 2)
Controls(nom(I - 1)) = Plg(1, I)
Next I

ici, bebere boucle sur les 15 colonnes du tablo, le code s'attend donc à avoir 15 controles à remplir

mais dans le tableau de nom, il ne trouve que 4 noms, au cinquième passage de la boucle, ca bug.

normalement dans ton code tu devrais avoir :

nom = Array('nom', 'PRENOM', 'DN', 'STATUT','textbox4', 'textbox5', etc....)


si, maintenant tu n'a que les 4 premieres textbox qui ont été renommées, tu peux utiliser ceci :

For I = 1 To UBound(Plg, 2)
Select Case I
Case 1 To 4: Controls(nom(I - 1)) = Plg(1, I)
Case Else: Controls('textbox' & I) = Plg(1, I)
End Select
Next I

salut
 

kolivier

XLDnaute Occasionnel
Merci beaucoup HERVE je vais corriger tout ça et je vais tenter de remplir non pas 4, non pas 15 mais 66 cellules. :)

Merci beaucoup je vais faire les modifs de suite.

Bonne journée, si cela ne fonctionne pas a cause de moi, je vous recontacte, mais d'abord je vais tout essayer.

Message édité par: kolivier, à: 26/06/2006 13:00
 

Discussions similaires

Réponses
8
Affichages
376
Réponses
8
Affichages
460

Statistiques des forums

Discussions
312 559
Messages
2 089 603
Membres
104 224
dernier inscrit
Brilma