Macro conditions multiples [Résolu]

Messages postés
32
Date d'inscription
mardi 27 novembre 2007
Statut
Membre
Dernière intervention
13 novembre 2017
- - Dernière réponse : cs_Jack
Messages postés
14008
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
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
32
Date d'inscription
mardi 27 novembre 2007
Statut
Membre
Dernière intervention
13 novembre 2017
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 201 internautes nous ont dit merci ce mois-ci

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