à propos d'une listbox

coyote56 Messages postés 22 Date d'inscription mardi 29 mai 2007 Statut Membre Dernière intervention 19 mai 2009 - 11 juil. 2007 à 00:42
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 - 11 juil. 2007 à 16:57
Bonjour, voila, j'aimerai afficher une liste à partir d'un liste, donc j'explique plus clairement :

J'ai une liste où il s'agit d'une liste de niveau (ex : 1, 2, 3 etc...) et lorsque l'on clique sur par exemple, le niveau 1, j'aimerai que à coté, s'affiche dans l'autre liste, la liste des coordonnées des personnes qui ont ce niveau là.

Voici la feuille :

et Voici le code :

Dans liste 1 (niveau) :

Private Sub niveaulist_Click()

Set tableniveau = bd.OpenRecordset("niveau")
tableniveau.MoveFirst
TableClient.Move (niveaulist.ListIndex)

listclient.AddItem TableClient.Fields("Num") & TableClient.Fields("Nom") &  TableClient.Fields("Prénom") & TableClient.Fields("Adresse") & TableClient.Fields("CP") & TableClient.Fields("Ville") & TableClient.Fields("Tel port") & TableClient.Fields("Tel fixe") & TableClient.Fields("email") & TableClient.Fields("organisme")

End Sub

Cependant, cela ne m'affiche que un seul ( le premier) client, comment les afficher tous ?
Et certain ne s'affiche pas.

Pourriez vous m'aider à résoudres mes erreurs.
Merci.

4 réponses

chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
11 juil. 2007 à 01:13
Bonsoir,
c' est normal puisque tu ne fais pas de MoveNext
Mais pour celà et avant tout il faut
>Récupérer le niveau sélectionné
    Dim xNiv As String
    xNiv=niveaulist.Text
>faire une requête qui ne renvoie que les personnes qui ont ce niveau
 Mais pas dans ta table niveau mais ta table clients
 
 Dim TableClient As RecordSet
 Set TableClient= bd.OpenRecordset("SELECT * FROM Clients WHERE NIV='" & xNiv & "'")
>après tu pourras faire une boucle
 listclient.Clear
 With TableClient
  .MoveFirst
Do While Not .Eof
  listclient.AddItem TableClient.Fields("Num") & TableClient.Fields("Nom") &  TableClient.Fields  ("Prénom") & TableClient.Fields("Adresse") & TableClient.Fields("CP") & TableClient.Fields("Ville")   & TableClient.Fields("Tel port") & TableClient.Fields("Tel fixe") & TableClient.Fields("email") &   TableClient.Fields("organisme")
  .MoveNext
Loop
 End With


Tout ça bien sûr dans Private Sub niveaulist_Click()






 











<hr />


Pour faire le portrait d' un poisson:
Peindre d' abord un fond.Versez-y ensuite beaucoup beaucoup d' eau.


* Rolling   
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
11 juil. 2007 à 09:58
Heu.. je te conseillerai de changer ta super grande liste avec des colonnes faites par des labels par un ListView utilisé en mode détail qui est fait exactement pour cà.
0
coyote56 Messages postés 22 Date d'inscription mardi 29 mai 2007 Statut Membre Dernière intervention 19 mai 2009
11 juil. 2007 à 15:12
C'est vrai chui un peu perdu là, bon voici un nouveau code :

Private Sub niveaulist_Click()

Set tableniveau = bd.OpenRecordset("niveau")
tableniveau.MoveFirst
tableniveau.Move (niveaulist.ListIndex)

Do While TableClient.Fields("niveau") = niveaulist.Text
listclient.AddItem TableClient.Fields("Num") &
TableClient.Fields("Nom") &  TableClient.Fields("Prénom") &
TableClient.Fields("Adresse") & TableClient.Fields("CP") &
TableClient.Fields("Ville") & TableClient.Fields("Tel port") &
TableClient.Fields("Tel fixe") & TableClient.Fields("email") &
TableClient.Fields("organisme")
TableClient.MoveNext
Loop

End Sub

Cela fonctionne qu'a moitié car lorsque l'on clique sur un niveau, cela n'affiche que le client (par ordre du numéro)

par exemple, je clique sur niveau 1, rien ne s'affiche, il faut que je clique sur le niveau 3 pour afficher le client numéro 1, le client numéro 2 ensuite qui est niveau 2 etc...
Mais ça affiche le bon client.
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
11 juil. 2007 à 16:57
salut,
tu persistes et tu signes !


> A quoi sert tableniveau  dans ce que tu veux faire ?
> Avec Do While TableClient.Fields("niveau") = niveaulist.Text
A moins que ta table soit triée sur "niveau",  et que le premier soit le bon,
 le traitement s' arrêtera dès que tu te pointes sur un client qui n' a pas ce niveau
alors qu' il y' en a d' autres plus loin dans la table.


tu devras t' en sortir avec ceci:
With TableClient
 .MoveFirst
  Do While Not .Eof
   If .Fields("niveau") = niveaulist.Text Then
      listclient.AddItem .Fields("Num") & .Fields("Nom") &  .Fields("Prénom") & .Fields("Adresse") &      .Fields("CP") & .Fields("Ville") & .Fields("Tel port") & .Fields("Tel fixe") & .Fields("email") &      .Fields("organisme")
   End If
   .MoveNext
Loop
End With


Tu devras aussi suivre le conseil de DS,
car avec une listbox, côté affichage ça sera pas terrible !





<hr />


Pour faire le portrait d' un poisson:
Peindre d' abord un fond.Versez-y ensuite beaucoup beaucoup d' eau.


* Rolling   
0
Rejoignez-nous