Tester des conditions sur plusieurs lignes

Fermé
betou34 Messages postés 3 Date d'inscription vendredi 22 mai 2015 Statut Membre Dernière intervention 5 juin 2015 - Modifié par jordane45 le 5/06/2015 à 15:40
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 6 juin 2015 à 08:58
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.
.
A voir également:

3 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
5 juin 2015 à 15:42
Bonjour,
Pour faire ce que tu demandes... il me semble qu'une simple formule basée sur des SI ... devrait suffire ...


0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
6 juin 2015 à 08:58
Bonjour,
Tu pourrais faire cela sans VBA avec des formules basiques...

c'est un exercice qu'on te demande de faire en VBA ?
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
Modifié par PlacageGranby le 5/06/2015 à 20:19
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.
-1