VBA Macro

Résolu/Fermé
Ghinoa1 Messages postés 1 Date d'inscription vendredi 25 juillet 2014 Statut Membre Dernière intervention 25 juillet 2014 - 25 juil. 2014 à 17:09
 Ghinoa1 - 27 juil. 2014 à 12:37
Bonjour,

j'ai un souci au niveau de la répétabilité de l'opération suivante que j'aimerai faire pour les 50 premières lignes et non pas seulement la ligne 5.

Sub Mention()

Dim Note As Integer
Dim Mention As String
Note = Range("B5")
If Note = 0 Then
Mention = "Nul"
ElseIf Note >= 1 And Note < 6 Then
Mention = "Moyen"
ElseIf Note >= 6 And Note < 11 Then
Mention = "Passable"
ElseIf Note >= 11 And Note < 16 Then
Mention = "Bien"
ElseIf Note >= 16 And Note < 20 Then
Mention = "Très Bien"
Else
Mention = "Excellent"
End If
Range("C5") = Mention

End Sub

Merci d'avance pour l'aide :)
A voir également:

3 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
25 juil. 2014 à 17:32
Bonjour Ghinoa1 et bienvenue sur le Forum,


Tu peux écrire :

Sub Mention()

Dim Note As Integer
Dim Mention As String
Dim n°L As Long

For n°L = 5 To 50  ' ou 1 to 50 
  Note = Cells(n°L, "B")
  If Note = 0 Then
    Mention = "Nul"
  ElseIf Note >= 1 And Note < 6 Then
    Mention = "Moyen"
  ElseIf Note >= 6 And Note < 11 Then
    Mention = "Passable"
  ElseIf Note >= 11 And Note < 16 Then
    Mention = "Bien"
  ElseIf Note >= 16 And Note < 20 Then
    Mention = "Très Bien"
  Else
    Mention = "Excellent"
  End If
  Cells(n°L, "C") = Mention
Next n°L

End Sub
 
1
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié par michel_m le 25/07/2014 à 19:18
Bonjour

Pourquoi du VBA ?

par formule à tirer vers le bas
=SI(B5="";"";INDEX({"nul";"moyen";"passable";"bien";"très bien";"excellent"};EQUIV(B5;{0;1;6;11;16;20};1)))

on pourra également le faire en réalisant un tableau de concordance note/mention et utiliser RECHERCHEV

Si on tient au VBA, utiliser SELECT CASE plutôt que IF....ELSIF où d'ailleurs linterval >=...< est inutile car on progresse dans les notes et l'opérateur "inférieur à" suffit

autre procédure VBA histoire de traduire ma formule par du VBA pour collaborer quand même

Option Explicit
'------
Sub mentionner()
Dim Lig As Byte, Note As Variant, Echelon As Byte

Application.ScreenUpdating = False
For Lig = 5 To 50
Note = Cells(Lig, "B")
If Note <> "" Then
Echelon = Evaluate("Match(" & Note & ", {0,1,6,11,16,20}, 1)")
Cells(Lig, "C") = Choose(Echelon, "nul", "moyen", "passable", "bien", "très bien", "excellent")
End If
Next
End Sub
Michel
1
Merci Messieurs pour vos réponses!
0