Macro conditions multiples

Résolu
podzob56 Messages postés 32 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 13 novembre 2017 - 25 juin 2008 à 16:45
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 25 juin 2008 à 17:00
Bonjour j'ai créé une macro et elle ne fonctionne pas (la fonction renvoi toujours 5 en réponse)
voila le code: (toutes les variables sont des nombres)

Function SISI(PERaction_PERindex, CL1, CL2, CL3, CL4, CL5, CL6)


If CL1 < PERaction_PERindex < CL2 Then
SISI = 5
Else
If CL2 < PERaction_PERindex < CL3 Then
SISI = 4
Else
If CL3 < PERaction_PERindex < CL4 Then
SISI = 3
Else
If CL4 < PERaction_PERindex < CL5 Then
SISI = 2
Else
If CL5 < PERaction_PERindex < CL6 Then
SISI = 1
Else
If PERaction_PERindex > CL6 Then
SISI = 0
Else
SISI = "erreur"
End If
End If
End If
End If
End If
End If




End Function

Merci d'avance pour vos réponses

3 réponses

podzob56 Messages postés 32 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 13 novembre 2017
25 juin 2008 à 16:57
j'ai trouvé:
Function SISI(PERaction_PERindex, CL1, CL2, CL3, CL4, CL5, CL6)


If CL1 < PERaction_PERindex And PERaction_PERindex < CL2 Then
SISI = 5
Else
If CL2 < PERaction_PERindex And PERaction_PERindex < CL3 Then
SISI = 4
Else
If CL3 < PERaction_PERindex And PERaction_PERindex < CL4 Then
SISI = 3
Else
If CL4 < PERaction_PERindex And PERaction_PERindex < CL5 Then
SISI = 2
Else
If CL5 < PERaction_PERindex And PERaction_PERindex < CL6 Then
SISI = 1
Else
If PERaction_PERindex > CL6 Then
SISI = 0
Else
SISI = "erreur"
End If
End If
End If
End If
End If
End If




End Function
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
25 juin 2008 à 16:58
Salut
VB ne sait pas faire des comparaisons à plusieurs valeurs.
Il faut donc découper les tests :
   If CL1 < PERaction_PERindex And PERaction_PERindex < CL2 Then

Une autre syntaxe peut être plus claire dans ton cas : le Select :
Function SISI(PERaction_PERindex, CL1, CL2, CL3, CL4, CL5, CL6) As Integer
   Select Case PERaction_PERindex
       Case CL1 To CL2: SISI = 5
       Case CL2 To CL3: SISI = 4
       Case CL3 To CL4: SISI = 3
       Case CL5 To CL6: SISI = 2
       Case Is > CL5:   SISI = 1
       Case Else:       SISI = -1
   End Select
End Function

Il faut déclarer le type de variable retourné par la fonction.
Ici, tu renvoie des chiffres et du texte : Pas très cohérent
Un Variant aurait pu faire l'affaire, mais ce n'est pas élégant et il faut voir aussi le code qui appelle cette fonction ...
La fonction renverra -1 en cas d'erreur : A toi de le gérer lors de la réception du résultat

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés


<hr />
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
25 juin 2008 à 17:00
PS : je me suis brélé les pinceaux dans le noms de variables et les valeurs --> A retravailler
0
Rejoignez-nous