Problème de combobox et listbox

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

  1. Modérateur
    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

    1. Contributeur
      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.
      1. 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."
      2. 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.
      3. Je précise, j'enlève la variable tmp dans la déclaration des variables
      4. Contributeur
        @TitiPointCom67garde
        option explicit
        , partage ton code, et donne-nous le message d'erreur et le numéro de la ligne où l'erreur se produit.
    2. 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
      1. Contributeur
        aucun message d'erreur, juste un plantage?
      2. 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.