[Excel / VBA] fitrage des valeurs listbox

Résolu
cs_sql84 Messages postés 21 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 24 novembre 2007 - 11 nov. 2007 à 16:26
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.

4 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
11 nov. 2007 à 17:27
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²
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
11 nov. 2007 à 17:05
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
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
11 nov. 2007 à 17:08
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
0
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
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
0
Rejoignez-nous