Tester des conditions sur plusieurs lignes

[Fermé]
Signaler
Messages postés
3
Date d'inscription
vendredi 22 mai 2015
Statut
Membre
Dernière intervention
5 juin 2015
-
Messages postés
16527
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
23 octobre 2021
-
Bonjour,
Je suis déjà passé ici il y a quelques semaine et j'ai pu trouver la solution et je remercie tous ce qui m'ont pu m'aider. Là, je suis confronté à un autre problème. Je souhaite faire un test sur toutes les lignes de la colonne 1. Lorsque la ligne i de la colonne 1 remplit une des conditions, alors, dans la ligne i de la colonne 2 sera affectée la valeur correspondante à la condition rempli. J'ai pu écrire quelques programme qui marchent en partie car le problème c'est queseule la première ligne est testé et le le reste des lignes ne le sont pas. Donc, la colonne colonne est seulement remplit par la valeur correspondante à la ligne 1. Je ne sais pas comment faire pour que le test continue jusqu'à la dernière ligne. Voici un exemple à quoi ressemble à peu près mon problème à part que ma base de donnée comporte 4500 lignes à peu près.
colonne 1 colonne 2
12.5
14
16
8.5
11
6
13
12
14
Les conditions sont les suivantes:
si la valeur de la ligne i de la colonne 1 est > 15, alors dans la colonne 2 est inscrit "excellent";
si c'est compris entre 14 et 15.99, alors dans la ligne i de la colonne 2 sera inscrit "bien" et ainsi de suite. Dans mon cas, le code teste seulement la première ligne et reporte la valeur correspondante de la condition dans la ligne 1 de la colonne 2. Les autres lignes de la colonne 2 sont remplies mais avec la valeur correspondante de la condition dans la ligne 1.
Normallement, on doit un résultat de la sorte :
colonne 1 colonne 2
12.5 "assez bien"
14 "bien"
16 "excellent"
8.5 "insuffisant"
11 "moyen"
6 "excecrable"
13 "assez bien"
12 "assez bien"
14 "bien"
Mais lorsqu'on éxécute le programme, on obtient :
colonne 1 colonne 2
12.5 "assez bien"
14 "assez bien"
16 "assez bien"
8.5 "assez bien"
11 "assez bien"
6 "assez bien"
13 "assez bien"
12 "assez bien"
14 "assez bien"

Ci-après les codes que j'ai employé mais qui ne marchent pas tous les deux:

Sub commentaires_notes()
    'Variables
    Dim c As Integer, commentaire As String
   For Each c In Worksheets("Feuil1").Range("A2:A10")
    'Commentaire en fonction de la note
    Select Case c    ' <= la valeur à tester (ici, la note)
    Case Is > 15        
       commentaire = "Excellent"
    Case 14 To 15.99        
       commentaire = "Bien"
    Case 12 To 13.99        
       commentaire = "assez bien"
    Case 10 To 11.99        
       commentaire = " moyen"
    Case 8 To 9.99      
       commentaire = "Mauvais"
    Case Is < 8        
       commentaire = " exécrable"
    End Select
   Next c
    'Commentaire en B1
    Range("B2:B11") = commentaire
    
End Sub

Sub comm_not()
'Variables
 For Each c In Worksheets("Feuil1").Range("A2:A10")
    'Commentaire en fonction de la note
        If c.Value > 16 Then   ' <= la valeur à tester (ici, la note)
            ' <= si la valeur = 6
       commentaire = "Excellent"
        ElseIf c.Value > 14 And c.Value < 16 Then   
       commentaire = "Bien"
        ElseIf c.Value > 12 And c.Value < 14 Then        
       commentaire = "satisfaisant"
        ElseIf c.Value > 10 And c.Value < 12 Then       
       commentaire = "moyen"
       ElseIf c.Value > 8 And c.Value < 10 Then   
       commentaire = "Mauvais"
        ElseIf c.Value < 8 Then      
       commentaire = "exécrable"
      End If
      'Commentaire en B1
    Range("B2:B11") = commentaire
 Next c
End Sub

Sub com_n()
ligne = Range("A2:A11").Row
For i = 2 To ligne Step 1
note = Cells(i, 1).Value
'Commentaire en fonction de la note
    Select Case note    ' <= la valeur à tester (ici, la note)
    Case Is > 15       
       commentaire = "Excellent "
    Case 14 To 15.99        
       commentaire = "Bien"
    Case 12 To 13.99      
       commentaire = "assez bien"
    Case 10 To 11.99       
       commentaire = "moyen"
    Case 8 To 9.99     
       commentaire = "Mauvais"
    Case Is < 8      
       commentaire = "exécrable"
    End Select
 Next i
    'Commentaire en B1
    Range("B2:B11") = commentaire
End Sub


Merci d'avance pour tous ceux qui peuvent m'aider.


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

Merci d'y penser dans tes prochains messages.
.

3 réponses

Messages postés
33737
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 octobre 2021
3 773
Bonjour,
Pour faire ce que tu demandes... il me semble qu'une simple formule basée sur des SI ... devrait suffire ...


Messages postés
16527
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
23 octobre 2021
3 232
Bonjour,
Tu pourrais faire cela sans VBA avec des formules basiques...

c'est un exercice qu'on te demande de faire en VBA ?
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
25
Bonjour,

Tu pourrais essayer ceci
Sub commentaires_notes()
    'Variables
    Dim c As Range, commentaire As String
   For Each c In Worksheets("Feuil1").Range("A2:A10")
    'Commentaire en fonction de la note
    Select Case c.Value    ' <= la valeur à tester (ici, la note)
    Case Is >= 16
       commentaire = "Excellent"
    Case 14 To 15.99
       commentaire = "Bien"
    Case 12 To 13.99
       commentaire = "assez bien"
    Case 10 To 11.99
       commentaire = " moyen"
    Case 8 To 9.99
       commentaire = "Mauvais"
    Case Is < 8
       commentaire = " exécrable"
    End Select
    Cells(c.Row, c.Column + 1).Value = commentaire
   Next c
    
End Sub


En gros ta variable commentaire est écrasé a chaque itération de C
Et à la fin, dans toute ta colonne B, tu inscrit commentaire qui contient la dernière valeur qui lui était assigné.
Donc, il faut écrire le commentaire avant de passer à la prochaine ligne. avant Next C.