Passer une condition à une sub comme paramètre string

Résolu
larsene67 Messages postés 18 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 8 novembre 2006 - 7 juil. 2006 à 09:33
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 7 juil. 2006 à 22:10
Bonjour,

J'ai un programme qui repete regulierement une boucle conditionelle mais avec une condition différente.
 Afin de simplifier celui-ci, j'ai voulu creer une sub contenant cette boucle, et lui passer la condition comme paramêtre string.
Le problème est que cette chaine contient une collection, et que le programme me fais une erreur "type incompatible"
Pourriez-vous m'aider?

Sub zzz(Condition)


Dim Liste As New Collection
Dim r As New ScriptControl
r.Language = "vbscript"


'sert à trier une copie de la collection "Options"
'For i = 1 To Options.Count
'    Liste.Add Options(i)
'Next i
'Pour l'exemple, on va dire:
Liste.Add "ligne1"
Liste.Add "ligne2"
Liste.Add "ligne3"
Liste.Add "ligne4"


i = 1
Do While i <= Liste.Count
    If r.Eval(Condition) Then
       Liste.Remove (i)
           i = i - 1
    End If
    i = i + 1
Loop


End Sub


Sub test()
tmp = "ligne1"
zzz ("Liste(i)=" & Chr(34) & tmp & Chr(34))
End Sub




Merci d'avance pour votre coup de main...

10 réponses

larsene67 Messages postés 18 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 8 novembre 2006
7 juil. 2006 à 10:05
Bon, ton idée m'a quand même mis sur la voie, et j'ai trouvé ceci:

Do While i <= Liste.Count
    ConditionBis = Replace(Condition, "Liste(i)", Chr(34) & Liste(i) & Chr(34))
    If r.Eval(ConditionBis) Then
       Liste.Remove (i)
           i = i - 1
    End If
    i = i + 1
Loop

Du coup, maintenant cela passe, bien que je trouve cela un peu lourd...
En tout cas, merci du coup de main, et si quelqu'un à une solution plus light, n'hésiter pas à m'en faire part...
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
7 juil. 2006 à 09:41
Salut,

Essaie cette boucle (dans la condition tu doit remplacer i par sa valeur dans la boucle sinon cela ne sert a rien)
Do While i <=  Liste.Count 
    Condition =  Replace (Condition, "(i)", i) 
    If r.Eval(Condition) Then 
       Liste.Remove (i) 
           i  = i - 1 
    End If 
    i = i + 1 
Loop 
 

<small> Coloration syntaxique automatique [AFCK]</small>
       

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée, Règlement/FONT>
0
larsene67 Messages postés 18 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 8 novembre 2006
7 juil. 2006 à 09:57
Raté :(
En fait, le remplacement devrait être
Condition = Replace(Condition, "(i)", "(" & i & ")")

Pour que ma condition contienne toujours la reference à ma collection
Liste(1)
mais même dans ce cas, cela me fait toujours la même erreur de "type incompatible".

Dans ton exemple, le code ne fais plus d'erreur, mais compare une variable
Liste1 à une chaine "ligne1", ce qui n'est pas ce que je veux :(

Merci quand même, mais aurriez-vous d'autres idées?


 
0
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
7 juil. 2006 à 10:56
Préciser dans le titre si c'est du VB6 ou VB.Net !

Redman
0

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

Posez votre question
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
7 juil. 2006 à 10:59
Salut,

OneHacker: Vous êtes ici :
Thèmes / Visual Basic 6 / Langages dérivés / VBA / Passer une condition à une sub comme paramètre string

Qu est ce qu il te faut de plus????

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée, Règlement/FONT>
0
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
7 juil. 2006 à 11:01
Ben maintenant que j'ai cliqué sur le lien je le vois pardi ! Mais mettez le dans le titre qu'on lui puisse savoir car c'est pénible à force !

Redman
0
larsene67 Messages postés 18 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 8 novembre 2006
7 juil. 2006 à 11:06
Je trouve pas où modifier le titre :(
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
7 juil. 2006 à 11:08
Pas besoin de cliquer sur le lien c'est marque en haut de la page!!!! faut savoir apprécier les nouvelles version du forum....

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée, Règlement/FONT>
0
larsene67 Messages postés 18 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 8 novembre 2006
7 juil. 2006 à 15:41
Merci du coup de main, mais ca ne suffit pas, car en fait, dans mes conditions, j'ai des trucs du genre
Liste(i).Denomination

Et là, ca complique un peu.

Bon, j'ai ouvert un autre sujet pour cette partie, si on m'y répond, et en y mélangeant savamment un peu de regex.replace à la place de replace, j'éspère y arriver...

(voir suite au:
http://www.vbfrance.com/infomsg_RECUPERER-PROPRIETE-ELEMENT-COLLECTION-TRAVERS-PARAMETRE-FONCTION-VBA_775175.aspx )
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
7 juil. 2006 à 22:10
OneHacker -> tu es loin d'être le premier tant à être gêné par ce détail (amoindri depuis les "réformes"), que tant à avoir remonté l'information. par contre, tu es le seul à le faire remarquer (de surcroit avec un manque de tact... voulu?
) aux membres n'y étant au final pour rien !

perso je suis déjà content de voir de moins en moins de topics laissés dans la première rubrique venue!
chaques choses en son temps, ton message est bien passé (une dernière fois pour toute ; espérons....)

<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
Rejoignez-nous