VBA Excel fonction filter

Résolu/Fermé
Supercilio - 21 mars 2007 à 14:48
 TapetteHurlante - 28 avril 2014 à 17:40
Malgré l'aide dans VBA je n'arrive pas à manier la syntaxe de la fonction filter associée aux objets string. De l'aide SVP
A voir également:

4 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
21 mars 2007 à 19:31
bonjour

Ta question est très vague : peux-tu préciser ce que tu voudrais
et qui te poses problème ?

Il y a des tas de façons d'utiliser les filtres en vba
alors il faut être plus concret pour avoir une aide.

0
D'abord merci de m'avoir répondu

Le problème en fait c'est que j'utilise un classeur Excel comme base de données de chaînes de caractères. Et j'aimerais via un code afficher celles qui contiennent une portion de chaîne donnée, peut importe son emplacement dans la chaîne mère

Je me suis dit que la fonction filter semblait faire l'affaire, vu que dans ses arguments y'a toutes les infos nécessaires. Mais j'arrive pas à la manipuler.

Je sais pas si je suis assez clair...
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
22 mars 2007 à 21:12
bonjour

Je sais pas si je suis assez clair...

il me manque bien quelques éléments mais on va faire sans.

j'utilise un classeur Excel comme base de données de chaînes de caractères

cette base de données, je suppose que tu la nommes "données"
et que la première ligne est une ligne de titres de rubriques.

j'aimerais via un code afficher celles qui contiennent une portion de chaîne donnée

tu définis une zone que tu nommes "Criteres"
la première ligne contient le titre de chaque colonne de sélection
et il y a autant de lignes que tu veux faire de sélections simultanées.

peut importe son emplacement dans la chaîne mère

pour cela il suffit de précéder et suivre ton critère par "*" : ex "*choix*"


Je considère que tu affiches les résultats sur une autre feuille
ou un autre colonne et tu nommes "resultat" la première cellule à afficher.

Si cette mise en place est réalisée, la ligne de code suivante devrait suffire pour obtenir le résultat.

    Range("données").AdvancedFilter _
        Action:=xlFilterCopy, _
        CriteriaRange:=Range("Criteres"), _
        CopyToRange:=Range("resultat"), Unique:=False


le code est édité sur 4 lignes pour la lisibilité des fonctions.

Si tu mets les critères sur la même feuille que les résultats,
il est facile de changer ta sélection et de voir le résultat.

Si tu mets ton code dans
Private Sub Worksheet_Change(ByVal sel As Range)

If Not Application.Intersect(sel, Range("Criteres")) Is Nothing Then
    Worksheets("Feuil1").Range("données").AdvancedFilter _
        Action:=xlFilterCopy, _
        CriteriaRange:=Range("Criteres"), _
        CopyToRange:=Range("resultat"), Unique:=False
End If
End Sub
tu peux l'exécuter automatiquement au changement de critère.

tu remplaces "Feuil1" par le nom de ta feuille de données.

Merci de nous tenir au courant.
0
J'ai essayé de manipuler ton code mais je suis confronté à certaines difficultés.

Je vais réduire mon problème pour le rendre plus compréhensible

Admettons que dans les 10 premières cellules d'une feuille excel ( de A1 à A10), j'ai rentré 10 chaînes de caractères.

Parmi ces 10 chaînes, j'aimerais affiché dans une boites de dialogue
seulement celles qui contiennent une sous chaîne donnée

Voilà un exemple de 3 chaînes

"informatique"
"économie"
"formation"

J'aimerais afficher seulement celles qui contiennent la sous chaîne"form"

Une boite de dialogue (via une listbox par ex) devrait alors afficher :

"informatique"
"formation"

Y'aurait pas moyen de solutionner le problème avec la fonction filter ?
0
Le problème que je rencontre avec la fonction filter est le suivant:

A partir d'un tableau de chaînes à 1 dimension, la fonction est censée renvoyer un sous ensemble du tableau initial, comprenant uniquement les chaînes qui ont satisfait aux conditions de comparaison (argument match, la fameuse sous chaîne)

Or un sous ensemble de tableau reste bien un tableau

Et pourtant quand je compile, Ca me donne un message d'erreur qui ne veut pas affecter le résultat de filter à un tableau...En revanche elle veut bien l'affecter à un scalaire, et dans ces conditions elle affiche seulement la première chaîne du tableau qui a satisfait au condition et pas les autres...
0
franckao Messages postés 1 Date d'inscription mercredi 22 février 2012 Statut Membre Dernière intervention 22 février 2012
22 févr. 2012 à 09:02
Bonjour, même après quelques années voici ma solution :

Selection.AutoFilter Field:="numérodecolonne", Criteria1:="form*"
0
J'ai réglé le problème

Il fallait affecter le résultat de filter à un variant

Merci pour les propositions

A+
0
TapetteHurlante
28 avril 2014 à 17:40
Précision pour ceux qui veulent utiliser la fonction Filter en VBA (et non en Excel)

Le premier argument est un tableau de chaines
Le second est la chaine à chercher dans le tableau
Le troisième (optionnel) est True pour obtenir les correspondances ou False pour les non-correspondances
Le dernier (optionnel lui aussi) est pour indiquer la méthode de comparaison à utiliser
0