Bazar de mélange de collection, propriétés, conditions en vba-excel

larsene67 Messages postés 18 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 8 novembre 2006 - 10 juil. 2006 à 11:22
larsene67 Messages postés 18 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 8 novembre 2006 - 10 juil. 2006 à 11:56
bon ,maintenant, je commence à patauger, si quelqu'un pouvait m'aider sur ce bout de code que je n'arrive pas à faire marcher:
(suite de http://www.vbfrance.com/infomsg_RECUPERER-PROPRIETE-ELEMENT-COLLECTION-TRAVERS-PARAMETRE-FONCTION-VBA_775175.aspx#3 )
Public Liste As New Collection
Public regEx As New VBScript_RegExp_55.RegExp 'New RegExp

Sub sub1()
Dim machin As New Classe1

machin.nom = "CHRIST"
machin.prénom = "Jesus"
machin.age = "33 ans"
Liste.Add machin
Set machin = Nothing

machin.nom = "LUCAS"
machin.prénom = "GEORGES"
machin.age = "50 ans"
Liste.Add machin
Set machin = Nothing

machin.nom = "DES BATIGNOLES"
machin.prénom = "Marie-thérese"
machin.age = "75 ans"
Liste.Add machin
Set machin = Nothing

machin.nom = "DES BATIGNOLES"
machin.prénom = "Marie-thérese"
machin.age = "73 ans"
Liste.Add machin
Set machin = Nothing
'condition "Liste(i).nom "DES BATIGNOLES" and Liste(i).age = "75 ans"
Condition = Chr(34) & "Liste(i).nom" & Chr(34) & "=" & Chr(34) & "DES BATIGNOLES" & Chr(34)
result = sub2(Liste, Condition)

End Sub

Private Function sub2(Liste As Collection, ByVal Condition As String)
Dim r As New ScriptControl
r.Language = "vbscript"
Set regEx = New RegExp
regEx.Pattern = "(Liste\(i\))(\.\S+)"

For i = 1 To Liste.Count
    sub2 = regEx.Replace(Condition, CallByName(Liste(i), "$2", VbGet))
    If r.Eval(sub2) Then
        MsgBox sub2
    End If
Next i

End Function

2 réponses

larsene67 Messages postés 18 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 8 novembre 2006
10 juil. 2006 à 11:37
bon, je trouve pas comment modifier ma question, alors je reposte le code, plus prooche de ce que je veux faire:

Public Liste As New Collection
Public regEx As New VBScript_RegExp_55.RegExp 'New RegExp

Sub sub1()
Dim machin As New Classe1

machin.nom = "CHRIST"
machin.prénom = "Jesus"
machin.age = 33
Liste.Add machin
Set machin = Nothing

machin.nom = "LUCAS"
machin.prénom = "GEORGES"
machin.age = 50
Liste.Add machin
Set machin = Nothing

machin.nom = "LUCAS"
machin.prénom = "Gérard"
machin.age = 50
Liste.Add machin
Set machin = Nothing

machin.nom = "DES BATIGNOLES"
machin.prénom = "Marie-thérese"
machin.age = 75
Liste.Add machin
Set machin = Nothing

machin.nom = "DES BATIGNOLES"
machin.prénom = "Marie-thérese"
machin.age = 73
Liste.Add machin
Set machin = Nothing

machin.nom = "DES BATIGNOLES"
machin.prénom = "Marie-thérese"
machin.age = 120
Liste.Add machin
Set machin = Nothing

'si la ligne precedente a le meme nom, et l'age est inférieur à 100ans, on la vireCondition "Liste(j).nom Liste(i).nom Or Liste(i).age > " & Chr(34) & "100" & Chr(34)
sub2 Liste, Condition

Debug.Print Liste.Count
End Sub

Private Function sub2(Liste As Collection, ByVal Condition As String)
Dim r As New ScriptControl
r.Language = "vbscript"
Set regEx = New RegExp
regEx.Pattern = "(Liste\(i\))(\.\S+)"

Do While i <= Liste.Count
    For j = 1 To i - 1
        Condition2 = regEx.Replace(Condition, CallByName("$1" & "($2)", "$3", VbGet))
        If r.Eval(Condition2) Then
            Liste.Remove (i)
            i = i - 1
            Exit For
        End If
    Next j
    i = i + 1
Loop

End Function
0
larsene67 Messages postés 18 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 8 novembre 2006
10 juil. 2006 à 11:56
Encore un essai qui ne marche toujours pas :(:( :

Private Function sub2(Liste As Collection, ByVal Condition As String)
Dim r As New ScriptControl
r.Language = "vbscript"
Set regEx = New RegExp
Set Regex2 = New RegExp
regEx.Pattern = "(Liste)(\([ij]\))(\.)(\S+)"
Regex2.Pattern = regEx.Pattern

Do While i <= Liste.Count
    For j = 1 To i - 1
        For Each tmp In regEx.Execute(Condition)
            tmp2 = Regex2.Replace(tmp, "$1$2")
            tmp3 = Regex2.Replace(tmp, "$4")
            tmp4 = Regex2.Replace(Condition, CallByName(tmp2, tmp3, VbGet))
            Condition = regEx.Replace(Condition, tmp4, VbGet)
        Next tmp
        If r.Eval(Condition) Then
            Liste.Remove (i)
            i = i - 1
            Exit For
        End If
    Next j
    i = i + 1
Loop

End Function
0
Rejoignez-nous