VBA Macro

Résolu
Ghinoa1 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
 Ghinoa1 -
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 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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
Ghinoa1
 
Merci Messieurs pour vos réponses!
0