larsene67
Messages postés18Date d'inscriptionmardi 27 juin 2006StatutMembreDernière intervention 8 novembre 2006
-
7 juil. 2006 à 09:33
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDerniè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...
A voir également:
Passer une condition à une sub comme paramètre string
larsene67
Messages postés18Date d'inscriptionmardi 27 juin 2006StatutMembreDerniè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...
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 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
larsene67
Messages postés18Date d'inscriptionmardi 27 juin 2006StatutMembreDerniè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?
larsene67
Messages postés18Date d'inscriptionmardi 27 juin 2006StatutMembreDerniè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...
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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