VBA Macro

Résolu
Ghinoa1 Messages postés 1 Statut Membre -  
 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 :)

3 réponses

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    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
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  3. Ghinoa1
     
    Merci Messieurs pour vos réponses!
    0