Je n’ai pas excel 2000 pour vérifier, mais je ne pense pas que la version soit en cause ; tout ce que je t’ai donné fonctionne avec excel 2002, j’ai vérifié.
Ce que j’appelle catalogue, c’est la zone de cellules que tu avais en colonnes F et G et qui décrivaient les couleurs en fonction des valeurs relevées dans la colonne D.
Et dans le code, catalogue n’est pas un nom réservé, c’est simplement celui que j’ai donné à la variable qui va “parcourir” cette zone. J’ai mis “à ajuster”, parce que je ne pensais pas qu’en version finale ton catalogue commence en plein milieu de la page ; je le voyais plutôt en F1 par exemple.
Evidemment dans ce cas ce que je t’ai donné ne risque pas de marcher. Il faut que tu remplaces toutes les références à catalogue par la valeur d’index réelle, comme tu l’as fait dans ton deuxième envoi.
Indépendamment du code, il n’est pas normal que tu sois obligé d’intervenir sur les valeurs de la colonne D, surtout pour supprimer des valeurs d’erreur (NB : ce n’est pas interdit, bien sûr).
D’où sors-tu les valeurs de la colonne D ? d’un copier/coller d’un autre programme ?
Les valeurs me paraissent plus qu’incohérentes.
exemple ligne 4 : présent 6, absent 1, pourcentage 1 … 1% ?
et en suivant le raisonnement de ton tableau, présent 3, absent 3, ça fait du 100% d’absence ?
et présent 1 absent 4 -> 400% ?
pour le code :
Tu déclares i, mais tu ne déclares pas cel ; ce n’est pas cohérent
Pour éviter ça, il faudrait que tu mettes Option Explicit en tête de ton module.
Pourquoi fixer la limite basse à 160 ? tu tiens à coloriser tes cellules jusqu’en ligne 160 ? même vides ?
la bonne méthode, c’est celle que tu as utilisée quelques lignes plus haut : Range(“D65536”).End(xlUp)
que se passe-t-il si cel vaut -0.05 ou 101.5 ?
Pourquoi ne pas utiliser < et > au lieu de <= et >= ?
Avec cette méthode, tu vas exécuter systématiquement tes 15 lignes de if, même si tu as trouvé ton bonheur dans la première.
Ce qu’il faut faire, c’est utiliser un If … Elseif … Endif comme montré plus haut
Avec la méthode du if … ElseIf, si ta valeur est inférieure à 25, tu ne passes pas sur cette ligne là, donc tu peux simplifier ton code :
ElseIf cel.Value < 35 Then cel.Interior.ColorIndex = 17
attention : avec les if … ElseIf … End If, la valeur du then doit être mise sur la ligne suivante
exemple de code :
Option Explicit
Sub couleurs()
Dim i As Integer, cel As Range
For Each cel In Range("D2", Range("D65536").End(xlUp))
If IsError(cel) Then cel.ClearContents
Next
For Each cel In Range("D2", Range("D65536").End(xlUp))
Debug.Print cel.Value ' à supprimer après mise au point
cel.Select ' à supprimer après mise au point
If cel.Value = "" Then
cel.Interior.ColorIndex = 3
ElseIf cel.Value < 0 Or cel.Value >= 101 Then
cel.Interior.ColorIndex = 36
ElseIf cel.Value < 25 Then
cel.Interior.ColorIndex = 47
ElseIf cel.Value < 35 Then
cel.Interior.ColorIndex = 17
ElseIf cel.Value < 40 Then
cel.Interior.ColorIndex = 15
ElseIf cel.Value < 45 Then
cel.Interior.ColorIndex = 39
ElseIf cel.Value < 50 Then
cel.Interior.ColorIndex = 38
ElseIf cel.Value < 55 Then
cel.Interior.ColorIndex = 22
ElseIf cel.Value < 60 Then
cel.Interior.ColorIndex = 26
ElseIf cel.Value < 65 Then
cel.Interior.ColorIndex = 44
ElseIf cel.Value < 70 Then
cel.Interior.ColorIndex = 45
ElseIf cel.Value < 75 Then
cel.Interior.ColorIndex = 46
ElseIf cel.Value < 85 Then
cel.Interior.ColorIndex = 28
ElseIf cel.Value < 95 Then
cel.Interior.ColorIndex = 33
ElseIf cel.Value < 100 Then
cel.Interior.ColorIndex = 4
Else ' cel.Value < 101
cel.Interior.ColorIndex = 27
End If
cel.Offset(0, -3).Interior.ColorIndex = cel.Offset.Interior.ColorIndex
Next
End Sub
Normal, si on se réfère à ce que je t’avais donné, tu as supprimé les premières lignes de test, celles qui concernaient justement les valeurs de B.
Essaie d’abord de bien comprendre comment marche le code ci dessus (et surtout voir s’il correspond à ce que tu en attends), il sera facile de le compléter par la suite si tu ne modifies pas sa structure en profondeur.
Edit:
Qu’elqu’un connaît la solution pour qu’il n’y ait pas de smiley qui apparaisse au milieu du code ?
Edité le 30/12/2011 à 08:49