[Excel / VBA] fitrage des valeurs listbox [Résolu]

Messages postés
21
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
24 novembre 2007
- - Dernière réponse : cs_sql84
Messages postés
21
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
24 novembre 2007
- 11 nov. 2007 à 17:55
Bonjour la communauté

je rencontre un problème concernant le filtrage des données affichées dans un listbox (ListBox1), j'ai créer une petite procedure pour initialiser un listbox avec les valeurs issues d'une feuille, je souhaiterais proposer un menu déroulant (ComboBox5) des champs issues d'une autres feuille et qui vont permettre de filtrer les données affichées dans le listbox (extraire uniquement les données qui répondent au choix du Combobox) voir ci-dessous la procedure :

Private Sub UserForm_Initialize()
    Dim TabTemp As Variant
    Dim DerniereValeur As Integer
    DerniereValeur = Range("ecritures!A2").End(xlDown).Row
    'Chargement d'une plage de cellules dans la variable TabTemp
    TabTemp = Range("ecritures!A2:G" & DerniereValeur).Value
    'Définit le nombre de colonnes pour la ListBox.
    ListBox1.ColumnCount = UBound(TabTemp)
    'Chargement du tableau dans la ListBox
    ListBox1.List() = TabTemp
End Sub

Cette methode fonctionne parfaitement, mais cela se corse considérablement lorsque je souhaite filtrer les données : voir procedure ci-dessous

Private Sub ComboBox1_Change()
   Dim InString As Variant
   Dim DataString As Variant
   Dim DerniereValeur As Integer
   DerniereValeur = Range("ecritures!A2").End(xlDown).Row
   DataString = Range("ecritures!A2:G" & DerniereValeur).Value
    'pour plus de simplicite j'ai commencé par Recettes comme masque de recherche au lieu de la valeur issue du ComboBox
    InString = Filter(DataString, "Recettes", True)       
   'Définit le nombre de colonnes pour la ListBox.
   ListBox1.ColumnCount = UBound(InString)
   'Chargement du tableau dans la ListBox
   ListBox1.List() = InString
End Sub

'la j'ai une erreur d'execution '13'
Incompatibilité de type

Je comprend pas ce qui se passe pourtant j'utilise bien deux variables de type identique ???
cela fait deux jours que je suis dessus sans résultat et je commence sérieusement a désespéré, si quelqu'un de la communauté peut m'aider, cela serai vraiment sympa  

Par avance MERCI de votre aide.
Afficher la suite 
A voir également:

4 réponses

Meilleure réponse
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
15
3
Merci
La fonction Filter retourne un tableau.
À première vue, ça devrait être bon avec un Varaiant... (?)

Mais il faut peut-être déclarer tes variables comme des tableaux plutôt que Variant
Dim InString() As String  ' ou As Variant ?

MPi²

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_MPi
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
31
0
Merci
InString est un mot réservé de VB, c'est une fonction, tu ne peux donc pas l'utiliser comme nom de variable.

Il faut que tu nomme ta variable autrement.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Commenter la réponse de cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
31
0
Merci
Oupsss, après vérification c'est InStr le mot réservé, pas InString.

Par contre le problème pourrait bien venir du fait que tes variables soient déclarées en variant, essaye peut-etre de les déclarées en string.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Commenter la réponse de cs_casy
Messages postés
21
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
24 novembre 2007
0
Merci
Salut,
Tout d'abord merci de ta réponse,
j'ai essayer de déclarer les variables comme String mais là j'ai une erreur au niveau de la ligne
DataString = Range("ecritures!A2:G" & DerniereValeur).Value
il me faut bien un Variant car la plage selectionnée contient des données de type différent.
je me demande si le problème ne vient pas du fait que le tableau DataString a plusieurs niveaux ?
comment puis-je savoir combien de niveau contient ce tableau ? as tu une idée.

Merci encore de votre aide
Commenter la réponse de cs_sql84