Fonction Filter

ptit_lu78 Messages postés 7 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 29 octobre 2004 - 12 oct. 2004 à 16:20
ptit_lu78 Messages postés 7 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 29 octobre 2004 - 15 oct. 2004 à 10:13
Bonjour..
1er post sur ce forum, je vous remercie donc d'avance pour votre indulgence..

Je programme une application Access 2000 avec du vba 6.0 pour la config

Mon probleme est assez simple.. je dois chercher une chaine de caractere présente dans une autre chaine..le fonction filter parait donc evidente.. Malheureusement je n'arrive pas à coder cette fonction..je cherche de la doc sur internet sans succes..

Voilà le code :

"test(1) = Filter(NomVol, Aeroport, True, 0)"

Le debuggeur me renvoie :

"Erreur de compilation
Nombre d'arguments incorrect ou affectation de propriété incorrecte"

Je ne voie vraiment pas d'où ça peut venir..je suis bloqué la-dessus depuis 3 jours...

Voilà..j'espere avoir été complet.. Je suis preneur pour tout conseil ou si quelqu'un connait de la doc..
Merci d'avance,
Lucien

7 réponses

ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
12 oct. 2004 à 21:59
salut

filter sert à renvoyer un tableau contenant les chaines d'un tableau source (SourceArray) qui contiennent (ou pas (suivant Include)) une chaine de caractère spécifiée...en gros, en entrée tu as ton tableau de chaines et ta chaine à rechercher et en sortie tu as le même tableau sans les chaines qui ne contiennent pas ta chaine à rechercher...

ce la permet de "trier" un tableau et pas une seule chaine...
donc déjà : test = Filter(NomVol, Aeroport, True, 0) si nomvole est un tableau et test aussi

par contre, la fonction Instr te renvoie la position d'une chaine dans une autre...ou 0 sinon...

ShareVB
0
ptit_lu78 Messages postés 7 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 29 octobre 2004
13 oct. 2004 à 09:57
Bonjour..

Merci pour ton aide.. Mais malheureusement, j'ai déjà essayé avec des tableaux et ça ne marche pas..
Je te passe le code complet de la fonction..

"Private Function RechercheTaxeAeroport(NomVol As String, TableauTaxeSupplément() As TaxeSupplément) As Integer

Dim Test() As String
Dim Testvol() As String
Dim Compteur As Integer
Dim Aeroport As String
Dim I As Integer

Compteur = 0

While Compteur < 20
Aeroport = Split(TableauTaxeSupplément(Compteur).description)(2)
Aeroport = UCase(Aeroport)

Testvol = Split(NomVol)

Test = Filter(Testvol, Aeroport, True, 0)
Compteur = Compteur + 1
Wend

End Function"

la valeur 20 pour Compteur est juste arbitraire et n'est là que pour vérifier le fonctionnement de la fonction.. Si j'utilise la fonction filter à la place de Instr c'est que j'ai besoin de l'option Include = True.. J'ai besoin de savoir si NomVol contient tout ou une partie de Aeroport..

J'espeer que ca eclairera le probleme d'avantage et encore merci pour votre aide..
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
13 oct. 2004 à 15:31
Je sais pas si ca peut t'aider: j'utilise ADO et les bases de données access, et avec Instr, on peut comparer les champs d'un recordset.
Tu pourrais peut-être aussi utiliser Like en le parametrant comme ceci:

if "aeroport" like rst(i ) then include=false
if "aeroport*" like rst(i) then include = true

rst(i) contenant le nom des vols
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
13 oct. 2004 à 16:52
salut

si tu veux juste savoir si NomVol contient tous les aéroports tu peux faire :

for i = 0 to ubound(TableauTaxeSupplément)
if instr(NomVol, Split(TableauTaxeSupplément(i).description)(2)) <= 0 then
'on a un aeroport qui n'est pas dans NomVol
else
'on a aeroport dans NomVol
end if
next

ShareVB
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ptit_lu78 Messages postés 7 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 29 octobre 2004
14 oct. 2004 à 09:47
Merci beaucoup pour votre aide..

Mais j'ai décidé d'aborder le probleme d'une autre façon..
J'utilise la méthode bourrine qui consiste à carrement rajouter un champ aéroport dans les deux tables dans lesquelles j'effectuais mes requetes..
Sinon je suis toujours interressé de savoir pourquoi cette fonction FIlter ne fonctionne pas...pur curiosité informatique..

Vous avez tous proposé des solutions qui, je le suis sur, sont valables mais aucun de vous ne me dit pourquoi ma fonction Filter ne marche pas et comment faire marcher cette fichue fonction (c'était le véritable but de cette question sur ce forum)..

En tout cas merci pour votre aide et votre temps..
Lucien
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
14 oct. 2004 à 16:51
salut

par contre, je peux te donner un exemple qui marche pour Filter

Dim t() as string,t1() as string
Dim chaine as string

chaine = "anger paris paris2 bordeaux toulouse"
t = split(chaine)

t1 = filter(t,"paris",True,vbTextCompare)'ca donne t1(0) "paris", t(1) "paris2"

t1 = filter(t,"paris",False,vbTextCompare)'ca donne t1(0) "anger", t1(1) "bordeaux", t1(2) = "toulouse"

par contre, et c'est peut etre la solution de ton problème si tu utilises 0 (vbBinaryCompare) en dernier param de filter "A" <> "a" alors que si tu utilises vbTextCompare "a" = "A"

ShareVB
0
ptit_lu78 Messages postés 7 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 29 octobre 2004
15 oct. 2004 à 10:13
Merci beaucoup ShareVB..
0
Rejoignez-nous