Je débute VBA et j'ai un petit soucis quant à une manipulation.
VB:
Sub Evaluation()
Dim score As Integer
Dim result As String
score = Range("C3").Value
If score <= 14 Then
result = "Inférieur à la moyenne"
ElseIf score >= 15 Then
result = "Supérieur ou égal à la moyenne"
ElseIf score > 16 Then
result = "Le meilleur"
End If
Range("C11").Value = result
End Sub
Pour résumer, j'ai un tableau avec des notes qui s'étalent de la cellule C3 à C7, je souhaite y ajouter un commentaire selon les conditions If dans les cellules C11 à 15. J'ai bien réussi à exécuter la macro pour 1 cellule unique, mais j'ai du mal à voir comment répéter l'action pour les notes de C4 à C7.
Sub Evaluation()
Dim score As Integer
Dim result As String
i = 3 'ligne de départ des notes
j = 11 'ligne de départ des commentaires
Do While i <= 7 ' valeur de la ligne que tu veux t'arrêter
score = Range("C" & i).Value
If score <= 14 Then
result = "Inférieur à la moyenne"
ElseIf score >= 15 Then
result = "Supérieur ou égal à la moyenne"
ElseIf score > 16 Then
result = "Le meilleur"
End If
Range("C" & j).Value = result
i = i + 1
j = j + 1
Loop
End Sub
Je suis preneur des critiques si c'est pas des mieux coder
PAS DU TOUT !!!!
heu j'attire votre attention
le dessus
VB:
ElseIf score >= 15 Then
result = "Supérieur ou égal à la moyenne"
ElseIf score > 16 Then
result = "Le meilleur"
alors je n'ai pas tester mais pour moi ca va pas
par exemple 17 va donner "Supérieur ou égal à la moyenne"
et c'est tout a fait normal car il > 15
conclusion j'opterais pour un select case du plus grand au plus petit
Code:
select case true
case score>16: = result="Le meilleur"
case score>=15: result = "Supérieur ou égal à la moyenne"
case score<=14:result = "Inférieur à la moyenne"
end select
l'avantage du case c'est que des que la position est trouvé ben le code continu après le end select
il ne peut y avoir de méprise
conclusion
Code:
Sub Evaluation()
Dim score As Integer
Dim result As String
i = 3 'ligne de départ des notes
j = 11 'ligne de départ des commentaires
Do While i <= 7 ' valeur de la ligne que tu veux t'arrêter
score = Range("C" & i).Value
Select Case True
Case score > 16: result = "Le meilleur"
Case score >= 15: result = "Supérieur ou égal à la moyenne"
Case score <= 14: result = "Inférieur à la moyenne"
End Select
Range("C" & j).Value = result
i = i + 1
j = j + 1
Loop
End Sub
la preuve que votre if elseif...end if ne fonctionne pas
Code:
sub test()
dim score&
score=17
If score <= 14 Then
result = "Inférieur à la moyenne"
ElseIf score >= 15 Then
result = "Supérieur ou égal à la moyenne"
ElseIf score > 16 Then
result = "Le meilleur"
End If
msgbox result
end if
Bonsoir le forum
Bonsoir Ibeko, Flown
Edit : Oupss : Bonsoir Patrick
Ou du genre avec Select Case
VB:
Sub Evaluation()
Dim score As Integer
Dim result As String
score = Range("C3").Value
Select Case score
Case Is <= 14
result = "Inférieur à la moyenne"
Case 15 To 16
result = "Supérieur ou égal à la moyenne"
Case Is > 16
result = "Le meilleur"
End Select
Range("C11").Value = result
End Sub
PAS DU TOUT !!!!
heu j'attire votre attention
le dessus
VB:
ElseIf score >= 15 Then
result = "Supérieur ou égal à la moyenne"
ElseIf score > 16 Then
result = "Le meilleur"
alors je n'ai pas tester mais pour moi ca va pas
par exemple 17 va donner "Supérieur ou égal à la moyenne"
et c'est tout a fait normal car il > 15
conclusion j'opterais pour un select case du plus grand au plus petit
Code:
select case true
case score>16: = result="Le meilleur"
case score>=15: result = "Supérieur ou égal à la moyenne"
case score<=14:result = "Inférieur à la moyenne"
end select
l'avantage du case c'est que des que la position est trouvé ben le code continu après le end select
il ne peut y avoir de méprise
conclusion
Code:
Sub Evaluation()
Dim score As Integer
Dim result As String
i = 3 'ligne de départ des notes
j = 11 'ligne de départ des commentaires
Do While i <= 7 ' valeur de la ligne que tu veux t'arrêter
score = Range("C" & i).Value
Select Case True
Case score > 16: result = "Le meilleur"
Case score >= 15: result = "Supérieur ou égal à la moyenne"
Case score <= 14: result = "Inférieur à la moyenne"
End Select
Range("C" & j).Value = result
i = i + 1
j = j + 1
Loop
End Sub
les deux solution Eric C et moi meme sont valables
bien que et je m'adresse a tous (Eric va m'en vouloir )
je ne mélange pas les méthodes Is et array ( "is<14" et 15 to 16 )dans les select case
penser au lecteur qui pourrait eventuellement venir debuguer
@patrick : j'en prends bonne noteet suis bien content que tu détailles (cela prends de ton temps mais tu auras le satisfecit de ton fan club)
Bonne nuit à toutes & à tous
Je ne sais pas si c'est le bon endroit pour reposer une question mais je me retrouve dans une autre impasse.
VB:
Sub Variation()
Dim result As String
If Range("C18").Value - Range("B18") > 0 Then
result = "Hausse ventes"
Else: result = "Baisse ventes"
End If
Range("C19").Value = result
End Sub
J'ai en ligne 18 un total de ventes d'une année à une autre, je souhaite simplement effectuer une soustraction pour en déduire s'il y a une baisse entre l'année n et l'année n+1 et insérer la conclusion dans la ligne juste en dessous.
J'ai bien essayé de reprendre sur la base des réponses précédentes mais la méthode semble différente.
Désolé mais je m'étais absenté. Comme tu tiens à conserver la méthode Select Case, voici une manière de faire.
Bonne fin d'après midi à toutes & à tous.
tu brave toute les règles fondamentales de la prog vba
result = CDbl([C14] - [B14])' la result est un numerique double
Select Case result
Case Is < 0
result = ChrW(8664) '"Baisse ventes"'ici par le biais de "chrw" tu obtiens un STRING !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Case Is > 0
result = ChrW(8663) '"Hausse ventes"'ici par le biais de "chrw" tu obtiens un STRING !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
End Select
[C15] = result
en plus même pas dimé
et malgré que !!!!! au combien VBA est gentil avec toi et ne ne te plante pas une ligne jaune et considere donc result en variant
ce n'est pas une bonne habitude dans le codage
tu me fera 500 lignes " je ne dois pas mélanger les variables numériques et les variable string"
il va y avoir de la fesse rouge !!!!!!
un variant ne doit pas être déclaré quelque chose puis une autre ou une autre
un variant EST!!!!! UNE CHOSE OU UNE AUTREDéfinitivement !!!!!!!!!!!! comprends tu la nuance??? c'est le "puis" et "ou" qui n'est pas acceptable dans une action
IMAGINE ton code fait 2000 lignes et plante le lecteur ou correcteur va pleurer misère pour comprendre l'erreur
tantot c'est une patate,tantot c'est un poireau, tantot c'est un concombre
une vrai salade
VB:
dim result#,resulString$
result = CDbl([C14] - [B14])' la result est un numerique double
Select Case result
Case Is < 0
resulString= ChrW(8664) '"Baisse ventes"'ici par le biais de "chrw" tu obtiens un STRING !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Case Is > 0
resulString= ChrW(8663) '"Hausse ventes"'ici par le biais de "chrw" tu obtiens un STRING !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
End Select
[C15] = resulString
je vois "[c15]" ou "[c14]" ou " [B14]" etc...... dans ton code
tu est dans un module standard !!!! le parent c'est qui ???!!!!!
Aïe Aïe Aïe, c'est vrai que ça pique mais j'ai appliqué de la crème "Nivéa" et cela va mieux ce matin
Bon quand je dis que je bidouille et m'affranchis des règles de codage !!!! Ma finalité même si ce n'est pas vraiment bien est que mon code fonctionne. En plus, ce que vous faîtes en 5 minutes, vous les grands du Vba,, moi je mets beaucoup plus de temps car rien ne fonctionne du premier coup !!!
Bon cela était la partie repentie
Pour la punition :
VB:
Sub punition()
Dim i As Single
For i = 1 To 500
Range("A" & i) = "je ne dois pas mélanger les variables numériques et les variable string"
Next i
End Sub
Ca c'est fait aussi
Pour le nouveau code : Voir le fichier joint
je vois "[c15]" ou "[c14]" ou " [B14]" etc...... dans ton code
tu est dans un module standard !!!! le parent c'est qui ???!!!!!
Petite question : Comment applique t'on une couleur à un caractère unicode, ici ChrW(8664) - Je voulais si le résultat était en baisse alors flèche rouge....
J'ai essayé ChrW(8664).Font.Color - Font.ColorIndex puis j'ai tenté de faire un If ... result = ChrW.... then [C15].Font.colorIndex mais rien.