Problème d'affichage avec une listbox - Besoin d'aide

Problème d'affichage avec une listbox - Besoin d'aide - VB/VBA/VBS - Programmation

Marsh Posté le 21-04-2006 à 10:14:30    

Bonjour tout le monde,
 
Voilà un petit moment que je commence réaliser des petites applications sous vba avec excel, dans la plupart des cas j'arrive à corriger mes erreurs mais là, j'aurai besoin d'aide ou de conseils.
 
Je travaille actuellement sur une base de données excel importante (en terme de volume) 1 tableau par feuille (le classeur contient 20 feuilles) chaque tableau posséde entre 50 et 100 lignes... En un mot c'est la fête  :sleep:  
Pour faciliter la lecture et la saisie de nouvelles valeurs, j'utilise des userform.
 
Mais voilà, sur l'un des userform, j'ai 2 listbox (listbox1 et listbox2). La valeur de la listbox1 va déterminer la liste utilisée par la listbox2.
 
Lorsque je lance l'application, la liaison listbox1 et listbox2 marche mais le problème est que la listbox2 ne va pas faire apparaître l'ensemble des valeurs de la liste.  
(cette liste est composé d'une soixantaine de noms, et seul les 15 ou 20 premier apparaissent!!!  :fou: )
Ensuite, c'est la valeur retenue par la listbox2 qui commandes l'affichage des textbox (pas de problème de ce cote là.
 
Je ne sais pas si cela vient de ma déclaration de variables ou d'autres chose... Je vous file un petit bout de code, je n'ai pas trouvé ce qui clochait! Maaatin diiiiffffffiiiicccillllleeee!!
 
 
Private Sub ListBox1_change()
 
Dim nom As String
 
nom = Range("A4" ).Address & ":" & Range("A4" ).End(xlDown).Address
     
If ListBox1.ListIndex = 0 Then
    Sheets("Autorisation de travail" ).Select
Else
If ListBox1.ListIndex = 1 Then
    Sheets("CMME" ).Select
Else
........
.......
.......
End if
 
    ListBox2.RowSource = nom
    ListBox2.ListIndex = 0
 
End Sub
 
 
Merci d'avance

Reply

Marsh Posté le 21-04-2006 à 10:14:30   

Reply

Marsh Posté le 21-04-2006 à 10:44:29    

Bon je viens de copier sur un nouveau fichier excel la partie du code et çà fonctionne parfaitement!!!!
 
En revanche, sur l'autre fichier (cf. message au-dessus), la listbox2 n'affiche pas la liste complètement seulement quand
ListBox1.ListIndex=0
 
Et je ne sais pas pourquoi... car çà à l'air de fonctionner pour les autres valeurs de ListBox1.ListIndex
 
Je sens venir une longue journée...

Reply

Marsh Posté le 21-04-2006 à 10:59:19    

Encore moi ;-)
 
J'ai trouvé!!! les variables sont bonnes, le problème vient des conditions (environ 20 pour les changements de feuilles)
 
Bon le truc est de faire un petit bidoullage maison en répétant la définition du "nom" dans chaque condition
 
 
Private Sub ListBox1_change()  
 
Dim nom As String  
 
     
If ListBox1.ListIndex = 0 Then  
    Sheets("Autorisation de travail" ).Select  
    nom = Range("A4".Address & ":" & Range("A4".End(xlDown).Address  
Else  
If ListBox1.ListIndex = 1 Then  
    Sheets("CMME" ).Select  
    nom = Range("A4".Address & ":" & Range("A4".End(xlDown).Address  
Else  
........  
.......  
.......  
End if  
 
    ListBox2.RowSource = nom  
    ListBox2.ListIndex = 0  
 
End Sub  
 
c'est pas le meilleur truc de gonfler le prgm par des répétitions de lignes mais çà fonctionne...
 
Enfin si vous avait une autre solution je suis toujours prenneur
 
voilà voilou

Reply

Marsh Posté le 21-04-2006 à 11:23:40    

Salut nullos59,
 
pour tes condition en chaines comme ici tu devrais le tenter avec Select Case/End select. Par ailleurs, pour ma part c'est la feuille que je mettrais en variable :

Code :
  1. Dim nom as string, Ws as Worksheet
  2. Select Case ListBox1.ListIndex
  3.     Case Is 0
  4.         Set Ws = Sheets("Autorisation de travail" )
  5.     Case Is 1
  6.         Set Ws = Sheets("CMME" )
  7. '... tous tes cas possibles
  8. End Select
  9. nom = ws.range("A4:A" & ws.range("A4" ).end(xldown).row).address
  10. listbox2.rowsource=nom
  11. listbox2.listindex=0

De plus si ton listbox1 renvois en value le nom de ta feuille tu dois pouvoir encore alléger ton code.
A voir ;)

Reply

Marsh Posté le 21-04-2006 à 11:54:20    

Je te remercie Watashi
 
Je vais appliquer ton conseil pour alléger mon code

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed