Macro conditions multiples [Résolu]

Signaler
Messages postés
32
Date d'inscription
mardi 27 novembre 2007
Statut
Membre
Dernière intervention
13 novembre 2017
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
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

Messages postés
32
Date d'inscription
mardi 27 novembre 2007
Statut
Membre
Dernière intervention
13 novembre 2017

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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
68
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)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
68
PS : je me suis brélé les pinceaux dans le noms de variables et les valeurs --> A retravailler