Problème de combobox et listbox

Fermé
TitiPointCom67 Messages postés 38 Date d'inscription vendredi 25 août 2017 Statut Membre Dernière intervention 12 septembre 2017 - Modifié le 25 août 2017 à 02:48
yg_be Messages postés 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 - 25 août 2017 à 11:01
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 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
25 août 2017 à 02:51
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 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 Ambassadeur 1 554
25 août 2017 à 10:23
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 vendredi 25 août 2017 Statut Membre Dernière intervention 12 septembre 2017
25 août 2017 à 10:44
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 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 1 554 > TitiPointCom67 Messages postés 38 Date d'inscription vendredi 25 août 2017 Statut Membre Dernière intervention 12 septembre 2017
25 août 2017 à 10:51
as-tu déclaré
dim temp as string
?
0
TitiPointCom67 Messages postés 38 Date d'inscription vendredi 25 août 2017 Statut Membre Dernière intervention 12 septembre 2017
25 août 2017 à 10:53
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 vendredi 25 août 2017 Statut Membre Dernière intervention 12 septembre 2017
25 août 2017 à 10:54
Je précise, j'enlève la variable tmp dans la déclaration des variables
0
yg_be Messages postés 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 1 554 > TitiPointCom67 Messages postés 38 Date d'inscription vendredi 25 août 2017 Statut Membre Dernière intervention 12 septembre 2017
25 août 2017 à 11:01
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 vendredi 25 août 2017 Statut Membre Dernière intervention 12 septembre 2017
25 août 2017 à 10:30
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 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 1 554
25 août 2017 à 10:44
aucun message d'erreur, juste un plantage?
0
TitiPointCom67 Messages postés 38 Date d'inscription vendredi 25 août 2017 Statut Membre Dernière intervention 12 septembre 2017
25 août 2017 à 10:48
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