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. 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.
  2. 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.
  3. 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