Alimentation LISTBOX

Bonjour a tous,

Je suis novice en codage VBA.

Je souhaiterais alimenter mes LISTBOX.

ListBox 20: toutes les colonnes de mon tableau seront visibles et seront filtrees par mes ChoixListBox de 1 a 16. (Multi critères cases a cocher)

Pour le moment j'ai essaye d'alimenter:

- ListBox 20 de la colonne 1 a 6.

- LisBox 5, 6, 10.

Message d'erreur "run-time error 1004"

Pouvez vous m'aider ?

En vous remerciant par avance

@+

Bonjour benji77

Quand vous avez une fenêtre de débogage, cliquer sur le bouton approprié

Ensuite pour avancer dans le code, appuyez sur [F8] et vous verrez que l'erreur est ici

image

Le nom de votre tableau n'est pas correcte

A+

Bonjour,

De plus, l'instruction n'est pas bonne.

NbCol = Range(NomTableau).ListObject.ListColumns.Count

Bonjour BrunoM45,

J'ai modifie le nom du tableau.

Je m'attaque maintenant au 16 Listbox pour effectuer ma recherche incrémentale multi critères.

Je vous remercie de votre soutien,

@+

Salut Thev

Bonjour,

De plus, l'instruction n'est pas bonne.

NbCol = Range(NomTableau).ListObject.ListColumns.Count

Perso, j'aurais dis que l'instruction n'est pas "propre" mais elle est bonne puisqu'elle fonctionne

A+

Bonjour BrunoM45,

Merci pour l'info que j'ai applique.

J'ai incremente mes Listobox mais j'ai ce message d'erreur "Only comments may appear after End Sub, End Function, End property."

Je n'arrive pas a trouver le ou les commentaires faisant défaut(s)

Pouvez vous verifier? mon formulaire s'adaptera a votre ecran

@+

Re,

Je ne sais pas à quel moment vous avez ce message, perso à l'ouverture de votre USF je n'ai rien

En revanche votre Sub Initialize est à optimiser ainsi en typant vos variables

Option Explicit

Dim Col As Long, NbCol As Long, NomTableau As String, TblBD() As Variant, ColVisu() As Variant

Private Sub UserForm_Initialize()
  Dim Ind As Long
  Dim d As Dictionary
  '
  With Application
    .WindowState = xlMaximized
    Zoom = Int(.Width / Me.Width * 80)
    Width = .Width: Height = .Height
    Left = 0: Top = 0
  End With
  NomTableau = "Tableau1"
  ColVisu = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31) ' colonnes à visualiser  (adapter)
  NbCol = Range(NomTableau).ListObject.ListColumns.Count
  TblBD = Range(NomTableau).Resize(, NbCol + 1).Value
  For Ind = 1 To UBound(TblBD): TblBD(Ind, NbCol + 1) = Ind: Next Ind
  ' Pour les colonnes
  For Col = 5 To NbCol
    ' Si la colonne
    If Col = 5 Or Col = 6 Then
      Set d = CreateObject("scripting.dictionary")
      For Ind = LBound(TblBD) To UBound(TblBD)
        d(TblBD(Ind, Col)) = ""
      Next Ind
      Me.Controls("ChoixListBox" & Col - 4).List = d.keys
    End If
    ' Si la colonne
    If Col >= 10 And Col <= 23 Then
      Set d = CreateObject("scripting.dictionary")
      d.CompareMode = vbTextCompare
      For Ind = LBound(TblBD) To UBound(TblBD)
        d(TblBD(Ind, Col)) = ""
      Next Ind
      Me.Controls("ChoixListBox" & Col - 7).List = d.keys
    End If
  Next Col
  Me.ListBox20.ColumnCount = NbCol + 1
  Me.ListBox20.List = TblBD
End Sub

Avec "Option Explicit", vous aurez d'autre variables à définir

A+

Merci du soutien.

J'ai ce message d'erreur quand je sélectionne un critère sur la choixlistbox 3 ou choixlistbox 16.

Me renvois en surligne en jaune:

Quand je clique sur choixlistbox3: Private Sub ChoixListBox3_change ()

Quand je clique sur choixlistbox16: Private Sub ChoixListBox16_change ()

Apres je ne peux plus fermer mon formulaire ....

Avez vous une idee? je pense que oui, vous avez toujours des bonnes idees ...

@+

Re,

A ce niveau

image

A+

Je donne ma langue au chat, je sèche ...

Je vois pas ou est l'erreur, je porte des lunettes, cela ne suffit pas !

Re,

Désolé, j'ai oublié le point d'interrogation, c'était une question

C'est à ce niveau que ça bloque de votre côté ?

A+

Re,

ok, il n’y a pas de mal !

Oui, tout à fait, c’est au niveau « Sub affiche () » que je bloque comme mon formulaire 😉😂.

Vous cliquez sur un critère Listbox 3 ou Listbox 6 et là ça bug !

Me renvois en surligne en jaune:

Quand je clique sur choixlistbox3: Private Sub ChoixListBox3_change ()

Quand je clique sur choixlistbox16: Private Sub ChoixListBox16_change ()

Apres je ne peux plus fermer mon formulaire ....

votre clairvoyance m’aiderait !

@+

Re,

Je vous l'ai dis au début, c'est la base du VBA

"Option Explicite" vous oblige à déclarer des variables et c'est très bien ainsi

Pour savoir ou il en manque, il faut compiler votre VBAProject

image

Et du coup, vous aurez

image

Il faut donc définir cette variable ainsi que celles qui suivent

Dim dchoisis1 As Dictionnary

Ou alors virer "Option Explicite", mais ce n'est pas propre

A+

Re,

ok BrunoM45, merci !

Oui, vous l’avez dit. Je ne savais pas faire, j’apprends.

Je ferais les correctifs demain !

Bonne soirée (j’ai 2 heures de décalage horaire / à chez vous)

@+

Bonjour a tous, Bonjour BrunoM45, Bonjour Thev,

Ce matin j'ouvre mon fichier et tout fonctionne comme si de rien n'etait ... je comprends pas, hier j'avais les bugs!

Je continue et vous tiens au courant.

@+

Re,

J'essaie actuellement de trier mes ListBox 1 a 16 en ordre croissant sans doublon.

J'ai essayer de placer cette fonction:

Function Sans_Doublons_Trié_to_ListBox(Lb As MSForms.ListBox)

Set f = Sheets("DATABASE")
' Selon la ListBox
Set MonDico = CreateObject("Scripting.Dictionary")
Select Case Lb.Name
' Définir la plage
Case "ChoixListBox1"
a = f.Range("E3:E" & f.[E65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité
Case "ChoixListBox2"
a = f.Range("F3:F" & f.[F65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité
Case "ChoixListBox3"
a = f.Range("J3:J" & f.[J65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité
Case "ChoixListBox4"
a = f.Range("K3:K" & f.[K65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité
Case "ChoixListBox5"
a = f.Range("L3:L" & f.[L65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité
Case "ChoixListBox6"
a = f.Range("M3:M" & f.[M65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité
Case "ChoixListBox7"
a = f.Range("N3:N" & f.[N65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité
Case "ChoixListBox8"
a = f.Range("O3:O" & f.[O65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité
Case "ChoixListBox9"
a = f.Range("P3:P" & f.[P65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité
Case "ChoixListBox10"
a = f.Range("Q3:Q" & f.[Q65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité
Case "ChoixListBox11"
a = f.Range("R3:R" & f.[R65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité
Case "ChoixListBox12"
a = f.Range("S3:S" & f.[S65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité
Case "ChoixListBox13"
a = f.Range("T3:T" & f.[T65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité
Case "ChoixListBox14"
a = f.Range("U3:U" & f.[U65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité
Case "ChoixListBox15"
a = f.Range("V3:V" & f.[V65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité
Case "ChoixListBox16"
a = f.Range("W3:W" & f.[W65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité

' Etc...
End Select
' Créer une instance de dictionnaire
For i = LBound(a) To UBound(a)
If a(i, 1) <> "" Then MonDico(a(i, 1)) = ""
Next i
'--avec tri
temp = MonDico.keys
Call Tri(temp, LBound(temp), UBound(temp))
Lb.List = temp
End Function

Edit modo : code à mettre entre balises avec le bouton </> merci d'y faire attention la prochaine fois

et de la rappeler avec un Call dans le USF initialize.

Pouvez vous m'aider ?

@+

Bonjour,

J'ai développé une fonction : liste_triée_sans_doublons. Il suffit de l'appliquer à la génération des ListBox. ci-joint fichier

Re,

Merci de votre soutien technique Thev !

Je souhaite aussi ranger les chiffres a virgule dans l'ordre croissant.

@+

Je souhaite aussi ranger les chiffres a virgule dans l'ordre croissant.

Pour cela, il faudrait que vos chiffres soient au format nombre et non au format texte. De plus, avec votre version en anglais, pour les mettre au format nombre, vous devez utiliser le "." et non la "," comme séparateur décimal.

Ok Thev, merci!

je vais modifier mon Excel des colonnes a chiffre.

@+

Rechercher des sujets similaires à "alimentation listbox"