Programmer en vba

Fermé
liha20 Messages postés 3 Date d'inscription vendredi 21 août 2009 Statut Membre Dernière intervention 21 août 2009 - 21 août 2009 à 17:12
eriiic Messages postés 24597 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 22 septembre 2024 - 21 août 2009 à 21:56
Bonjour,
depuis hier suis bloqué sur un boulot, en fait je dois écrire un programme qui me permettra de classer des pays selon les points qu'ils ont accumulé. Et je le fais sur exel en particulier j'utilise les macros exel. g écris mon algorithme en VBA mais quand j'excute ca me dit "else sans if" alors que je vois l'erreur.
voici mon algorithme:

Sub cahieruemoa()
Dim Ci As Single
Dim classe As String
Range(c65) = Ci
Range(d65) = classe
If 1 <= Ci < 5 Then classe = "C"
ElseIf 5 <= Ci < 10 Then classe = "C+"
ElseIf 10 <= Ci < 15 Then classe = "C++"
ElseIf 15 <= Ci < 20 Then classe = "B"
ElseIf 20 <= Ci < 25 Then classe = "B+"
ElseIf 25 <= Ci < 30 Then classe = "B++"
ElseIf 30 <= Ci < 35 Then classe = "A"
ElseIf 35 <= Ci < 40 Then classe = "A+"
Else: classe = "A++"
End If
End Sub

aider moi svp.

6 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
21 août 2009 à 17:28
bonjour,

essaies plutôt une autre structuration de tes conditions
par exemple

CI = Range("C65")
Select Case CI
    Case Is < 1
        classe = ""
    Case Is < 10
        classe = "C"
    '.....etc
    
    Case Is < 40
        classe = "A+"
    Case Else
        classe = "A++"
End Select

Range("D65") = classe
End Sub


nota dans ton "algo" si CI est ibnférieur à 1 tu as classe=A++... donc j'ai opté pour "rien" ("")
0
liha20 Messages postés 3 Date d'inscription vendredi 21 août 2009 Statut Membre Dernière intervention 21 août 2009
21 août 2009 à 18:03
excuse moi de te deranger mais aprés le case je met ci ou pas?
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
21 août 2009 à 18:38
ben non sinon je l'aurais écrit !!!
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
21 août 2009 à 18:08
Bonjour, ce serait effectivement mieux avec le select, mais pour répondre à ta question...
If 1 <= Ci < 5 Then 
    classe = "C" 
ElseIf 5 <= Ci < 10 Then  classe = "C+" 
ElseIf 10 <= Ci < 15 Then classe = "C++" 
ElseIf 15 <= Ci < 20 Then classe = "B" 
ElseIf 20 <= Ci < 25 Then classe = "B+" 
ElseIf 25 <= Ci < 30 Then classe = "B++" 
ElseIf 30 <= Ci < 35 Then classe = "A" 
ElseIf 35 <= Ci < 40 Then classe = "A+" 
Else: classe = "A++" 
End If 

Tu ferme directement ton 1er If
A+
0
liha20 Messages postés 3 Date d'inscription vendredi 21 août 2009 Statut Membre Dernière intervention 21 août 2009
21 août 2009 à 19:03
excuse moi michel ,g fais ce que tu ma dit mais quand j'exécute le programme ca marche mais sur ma feuille d'exel je vois rien qui s'affiche.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
21 août 2009 à 19:21
Ci joint une maquette de ton projet à adapter: j'ai ajouté un déclenchement lors du changement de valeur de Ci
https://www.cjoint.com/?ivtt5S6HcP
0
eriiic Messages postés 24597 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 22 septembre 2024 7 235
21 août 2009 à 21:56
Bonsoir,

et pour ton code original je pense que c'est là que ça coince :
If 1 <= Ci < 5 Then
au lieu de :
If 1 <= Ci and Ci < 5 Then

eric
0