Fonction Evaluate dans VBA

[Fermé]
Signaler
Messages postés
17
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
5 juin 2013
-
Messages postés
15886
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
1 septembre 2021
-
Bonjour,

Je souhaite créer une fonction vba de comparaison entre deux plages.
L'idée est de rendre l'opérateur de comparaison ("=", ">", "<",...) comme argument de la fonction.
J'utilise Evaluate pour avoir le résultat.

Toutefois quand j'essaye cette méthode la fonction Evaluate bug et affiche l'erreur 2015.

Auriez vous une solution ?

Voici la ligne source de mes tracas :

If Evaluate(plage1(i, 1) & critere & plage2(i, 1)) Then

(critère est déclaré comme string, plage1 et plage2 comme range)


Fethi

12 réponses

Messages postés
15886
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
1 septembre 2021
1 525
Bonjour,

j'ai essayer avec ce code et ca marche

Sub test1()
Dim plage1 As Range
Dim plage2 As Range

Set plage1 = Worksheets("feuil1").Range("A1:A10")
Set plage2 = Worksheets("feuil1").Range("B1:B10")

critere = ">"
For i = 1 To 10
    If Evaluate(plage1(i, 1) & critere & plage2(i, 1)) Then
        MsgBox "ok"
    Else
        MsgBox "pas ok"
    End If
Next i
End Sub


a voir
Messages postés
24161
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
13 août 2021
6 873
Bonjour,

un fichier exemple et le libellé du message serait un plus...
Déposer le fichier xls (réduit au nécessaire et anonymisé, avec les explications et éventuellement le résultat attendu) sur cjoint.com et coller ici le lien fourni.

eric

Messages postés
17
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
5 juin 2013

J'ai essayé la procédure dans un nouveau classeur pour vous l'envoyez mais cela fonctionne correctement.
Et quand je vais la même chose dans mon classeur cela Beug.
Je ne comprend pas

Fethi
Messages postés
24161
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
13 août 2021
6 873
evaluate attend une chaine de caractères.
Met un point d'arret sur ta ligne et contrôle ce que tu lui passes en paramètre.
On ne connait toujours pas le libellé de l'erreur...
eric
Messages postés
17
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
5 juin 2013

j'ai bien une chaine de caractère. J'ai même mis cstr() au cas où mais sans succès.

En gros :

Evaluate((plage1(i, 1) & "=" & plage2(i, 1))) ==> Beug : erreur 2015
Evaluate((plage1(i, 1) & critere & plage2(i, 1))) ==> Beug : erreur 2015
Evaluate((plage1(i, 1) = plage2(i, 1))) ==> fonctionne
Messages postés
24161
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
13 août 2021
6 873
...
On ne connait toujours pas le libellé de l'erreur...
Messages postés
17
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
5 juin 2013

comment on fait pour savoir cela ?
Messages postés
24161
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
13 août 2021
6 873
Il n'y a rien d'autre que erreur 2015 dans le message qui s'affiche ?
Messages postés
15886
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
1 septembre 2021
1 525
Re,

quel excel avez-vous??????
Messages postés
17
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
5 juin 2013

Je suis sous Excel pro 2003 (sp3)
Messages postés
15886
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
1 septembre 2021
1 525
Bonjour,

quand vous avez l'erreur 2015, est-ce que vous avez une valeur nulle ou un caractere alphabetique dans une des deux variables plage1 et plage2

A+
Messages postés
17
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
5 juin 2013

plage1 et plage2 ont des valeurs numérique. et critere un texte.

plage1 est déclaré comme range car je fais reférence à une plage nommée dans excel.
plage2 est déclaré comme variant car j'utilise une petite macro pour récupérer certaines valeurs d'une zone.
critère est déclaré comme string et prend comme argument : "=", ">", "<",...

Voici la fonction

Function sommeplagesi(plage1 As Range, critere As String, Optional plage2 As Variant) As double

Dim i As Long
Dim sommeplage As double

sommeplage = 0

If UBound(plage2, 1) >= 1 Then
For i = 1 To UBound(plage2, 1)
If Evaluate(plage1(i, 1) = plage2(i, 1)) Then
sommeplage = plage2(i, 1) + sommeplage
Else
sommeplage = plage2(i, 1) * plage1(i, 1) + sommeplage
End If
Next i
Else
For i = 1 To UBound(plage1.Value, 1)
If Evaluate(plage1(i, 1).Value & critere) Then
sommeplage = sommeplage + plage1(i, 1)
End If
Next i
End If

sommeplagesi = sommeplage



End Function

à la place du égale dans Evaluate j'aimerai mettre : & critere &
==>
Evaluate(vplage1(i, 1) & critere & plage2(i, 1))
Messages postés
15886
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
1 septembre 2021
1 525
Re,

vous ne repondez pas a la question que j'ai posee, ni a celle d'eriiic sur l'affichage de l'erreur 2015.

d'apres microsoft erreur 2015 est une erreur de excel2000 qui correspond a une erreur 13: incompatibilite de type. pour excel superieur a 2000

Avec excel2007-2010 (je n'ai plus excel2003)
j'arrive a visualise cette erreur 2015 par cette artifice:

'si une des deux valeurs est nulle alors x=erreur 2015
x = Evaluate(plage1(i, 1) & critere & plage2(i, 1))



Si vous voulez de l'aide, il faut y mettre un peu de bonne volonté


A+
Messages postés
17
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
5 juin 2013

La description de l'erreur est : Incompatibilité de type

pourtant chaque argument à une valeur

x = Evaluate(plage1(i, 1) & critere & plage2(i, 1)) ==> Beug
x = Evaluate(plage1(i, 1) = plage2(i, 1)) ==> FONCTIONNE
Messages postés
15886
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
1 septembre 2021
1 525
Re,

pourtant chaque argument à une valeur de meme type ou pas

"Vous ne nous dites pas tout" (A R)

si votre fichier n'a pas de donnees confidentielles, mettez le a dispo en cliquant sur le lien suivant https://www.cjoint.com/

n'oubliez pas de copier/coller le lien cree
Messages postés
17
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
5 juin 2013

J'ai pas accès au lien c'est restreint par ma boite.
As tu un mail ?
Messages postés
15886
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
1 septembre 2021
1 525
Re,

passez par les messages prives de cmm, pour que je puisse vous donner une adresse