Tester des conditions sur plusieurs lignes
betou34
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
michel_m Messages postés 16602 Date d'inscription Statut Contributeur Dernière intervention -
michel_m Messages postés 16602 Date d'inscription Statut Contributeur Dernière intervention -
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:
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.
.
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:
- Tester des conditions sur plusieurs lignes
- Flash drive tester - Télécharger - Divers Utilitaires
- Tester son pc - Guide
- Partager des photos en ligne - Guide
- Tester composant pc - Guide
- Tester disque dur - Télécharger - Informations & Diagnostic
3 réponses
Bonjour,
Pour faire ce que tu demandes... il me semble qu'une simple formule basée sur des SI ... devrait suffire ...
Pour faire ce que tu demandes... il me semble qu'une simple formule basée sur des SI ... devrait suffire ...
Bonjour,
Tu pourrais faire cela sans VBA avec des formules basiques...
c'est un exercice qu'on te demande de faire en VBA ?
Tu pourrais faire cela sans VBA avec des formules basiques...
c'est un exercice qu'on te demande de faire en VBA ?
Bonjour,
Tu pourrais essayer ceci
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.
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.