Problème de combobox et listbox

TitiPointCom67 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
J'essaie d'adapter du code que j'ai trouvé sur internet de manière à pouvoir lister dans une listbox les personnes habitant dans une commune.
La liste totale s'affiche bien dans la listbox, la liste de choix s'affiche bien dans le combobox, mais quand je clic sur la combobox pour effectuer le tri, un message d'erreur s'affiche et je n'arrive pas à comprendre pourquoi.
Il me dit que la variable BD est vide.

Merci d'avance


Private Sub UserForm_Initialize()
  Set f = Sheets("INSCRIPTIONS")
  ColVisu = Array(1, 2, 5, 6, 7, 8, 9, 13, 11, 10, 14, 15, 20) ' Colonnes à visualiser
  Ncol = UBound(ColVisu) + 1
  Set d = CreateObject("Scripting.Dictionary")
  BD = f.Range("A2:U" & f.[A65000].End(xlUp).Row)
  '---- ComboBox trié
  For i = LBound(BD) To UBound(BD)
     If BD(i, 1) <> "" Then d(BD(i, 1)) = ""
  Next i
  'ComboBox1.List = d.keys   ' sans tri
  Tmp = d.keys
  Tri Tmp, LBound(Tmp), UBound(Tmp)
  Me.ComboBox1.List = Tmp
  '-- en têtes de colonne ListBox
  x = 16
  y = Me.ListBox1.Top - 10
  For Each k In ColVisu
    Set Lab = Me.Frame1.Controls.Add("Forms.Label.1")
    Lab.Caption = f.Cells(1, k)
    Lab.Top = y
    Lab.Left = x
    x = x + f.Columns(k).Width * 1#
    temp = temp & f.Columns(k).Width * 1# & ";"
  Next
  temp = Left(temp, Len(temp) - 1)
  Me.ListBox1.ColumnCount = UBound(ColVisu) + 1
  Me.ListBox1.ColumnWidths = temp
  Me.Frame1.Width = 860
  Me.Frame1.ScrollWidth = Me.ListBox1.Width + 1
  Me.Frame1.ScrollBars = 1
  '---- Contenu ListBox initial
  Dim Tbl(): ReDim Tbl(1 To UBound(BD), 1 To Ncol)
  For i = 1 To UBound(BD)
      c = 0
      For Each k In ColVisu
        c = c + 1: Tbl(i, c) = BD(i, k)
      Next k
  Next i
  TriMultiCol Tbl, LBound(Tbl), UBound(Tbl), 1
  Me.ListBox1.List = Tbl
  Me.Label4.Caption = Me.ListBox1.ListCount & " Ligne(s)"
End Sub

Private Sub ComboBox1_click()
  Dim Tbl(): j = 0
  For i = 1 To UBound(BD) ' PLANTAGE A CE NIVEAU
    If BD(i, 1) = Me.ComboBox1 Then
      j = j + 1: ReDim Preserve Tbl(1 To Ncol, 1 To j)
      c = 0
      For Each k In ColVisu
        c = c + 1: Tbl(c, j) = BD(i, k)
      Next k
    End If
  Next i
  Me.ListBox1.Column = Tbl
  Me.Label4.Caption = Me.ListBox1.ListCount & " Ligne(s)"
End Sub


EDIT : Ajout des balises de code

3 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Où as tu déclaré ta variable BD ? Elle est en "Public" ?? Sinon... c'est normal qu'il ne la connaisse pas.... vu que tu lui assignes une valeur dans une autre sub que celle où tu as le plantage....

Si tu ne comprends pas... renseigne toi sur ce qu'est la portée des variables

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour, je suggère d'ajouter
option explicit
en haut de module, cela va te forcer à déclarer toutes tes variables, et t'aidera grandement à clarifier la situation et éviter des erreurs ultérieures.
0
TitiPointCom67 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,
Lorsque je déclare toutes les variable suite à l'ajout de option explicite, j'ai un message qui me dit
"Erreur d'exécution
Impossible de définir la propriété ColumnWidths. Le type ne correspond pas."
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > TitiPointCom67 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention  
 
as-tu déclaré
dim temp as string
?
0
TitiPointCom67 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention  
 
Si j'enlève la variable tmp le plantage se déplace à la ligne
Me.ListBox1.List = Tbl
et le message d'erreur est
Erreur d'exécution 380
Impossible de définir la propriété Column. Valeur de propriété non valide.
0
TitiPointCom67 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention  
 
Je précise, j'enlève la variable tmp dans la déclaration des variables
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > TitiPointCom67 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention  
 
garde
option explicit
, partage ton code, et donne-nous le message d'erreur et le numéro de la ligne où l'erreur se produit.
0
TitiPointCom67 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour et merci,
j'avais effectivement oublié de déclarer les variables.
Cependant j'ai toujours un problème, maintenant ça plante au niveau de la ligne
Me.ListBox1.List = Tbl
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
aucun message d'erreur, juste un plantage?
0
TitiPointCom67 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention  
 
Si, il y a un message :
Erreur d'exécution 380
Impossible de définir la propriété Column. Valeur de propriété non valide.
0