Macro couleurs ne fonctionne pas !

dave38 -  
Bidouilleu_R Messages postés 1209 Statut Membre -
Bonjour, je voudrais comprendre pourquoi la macro suivante ne fonctionne pas, en fait elle ne fait rien, alors qu'elle devrait colorier les lignes en diverses couleurs pour lesquelle une cellule contient "P", "A", ou "G"...
Merci de votre aide très précieuse !

Sub COULEURS()

Dim cl
Dim Target As Range

Dim plage1 As Range
Set plage1 = Range("J4:Z500")
For Each cl In plage1
If cl.Value = "P" Then
Rows(cl.Row).Interior.ColorIndex = 38
End If
Next cl

Dim plage2 As Range
Set plage2 = Range("K4:Z500")
For Each cl In plage2
If cl.Value = "A" Then
Rows(cl.Row).Interior.ColorIndex = 6
End If
Next cl

Dim plage3 As Range
Set plage3 = Range("L4:Z500")
For Each cl In plage3
If cl.Value = "G" Then
Rows(cl.Row).Interior.ColorIndex = 37
End If
Next cl

End Sub
A voir également:

7 réponses

UsulArrakis Messages postés 7683 Statut Contributeur 3 194
 
salut
tu n'as pas de message d'erreur ?
je ne suis pas spécialiste mais ça ne devrait pas c au lieu de cl
par exemple dans : For Each cl In plage1
0
Bidouilleu_R Messages postés 1209 Statut Membre 295
 
bonjour,
je viens de tester ta macro : elle fonctionne.
quand tu contrôles un "P" dans une cellule tu met la ligne en couleur

If cl.Value = "P" Then
Rows(cl.Row).Interior.ColorIndex = 38

Que voulais tu faire exactement? mettre un fond à la cellule ou bien à toute la ligne?
pour la cellule seule utilise

cl.Interior.colorindex=38

par contre cela n'est pas logique .
car si une valeur est lue "P" en colone J4 ( la ligne prend une couleur "38") et une autre "A" el K4 alors la précedente couleur sera effacée. d'où ma question ci-dessus et ma suggestion.

Set plage1 = Range("J4:Z500") sinon écrit : Set plage1 = Range("J4:J500")

Set plage2 = Range("K4:Z500") : Set plage2 = Range("K4:K500") ....etc
Set plage3 = Range("L4:Z500")

si mon explication ne correspond pas à l'attente souhaitée .... il faut expliciter la demande.
A+
0
dave38
 
Re,

Merci pour ces précisions
Oui, en effet elle fonctionne, mais que dans 2 fichiers sur 3...et là c'est pour le fichier qui ne fonctionne pas que j'interroge les spécialistes !!

Où dois je la mettre (dans quel module, quel emplacement...) pour que dès que l'utilisateur met un "G" ou un "P" ou un "A", qu'il enregistre et qu'il ferme le fichier, l'utilisateur suivant voit la ligne entière coloriée ?
Peut être est parce que le fichier s'ouvre sur un autre onglet et que par csqt la macro ne s'applique pas sur le bon onglet?
Faut il un "open_auto" ou qqch comme cela ?
MERCI 1000 fois !
0
Bidouilleu_R Messages postés 1209 Statut Membre 295
 
Ha! ce n'est pas la même question.... : )

Oui, en effet elle fonctionne, mais que dans 2 fichiers sur 3...et là c'est pour le fichier qui ne fonctionne pas que j'interroge les spécialistes !!

ça c'est de la pommade !

1 ) ton module couleur doit se trouver :
a) dans chaque fichiers 1 , 2, 3...
b) dans un fichier unique qui dialoguera avec ces trois fichiers ou plus.

2) le plus simple
copier le module dans chaque fichier et ajouter
dans thisworkbook (double click sur thisworkbook)

Private Sub Workbook_Open()
COULEURS
End Sub

et là à l'ouverture le module executera la procedure COULEURS

C'est aussi plus simple à debogguer en cas de pb!

A+
0
dave38
 
Aaaargggggghhhhhh !!

Merci Bidouilleu R.

Excel me retourne un vieux "incompatibilité de type" (erreur 13)...
en me surlignant la ligne suivante :

If cl.Value = "P" Then

qu'est ce qui n'irait pas, suite à ce message très générique ?

merci de votre aide cordiale !

Dave38
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bidouilleu_R Messages postés 1209 Statut Membre 295
 
Tu dis...

Excel me retourne un vieux "incompatibilité de type" (erreur 13)...
en me surlignant la ligne suivante :

If cl.Value = "P" Then


au début de ton code tu écrit Dim cl
ajoute pour me faire plaisir Dim cl as variant ( par défaut il est as variant)
Incompatibilité de type intervient de deux manières :
1) tu essaies de mettre dans une variable un type qui est est trop grand ou qui ne convient pas
ex ( i as integer et plus loin i=1.23)
ici je ne pense pas que ce soit le cas.
2) quand une variable est utilisée dans un module au niveau procédure et aussi en globale.

ton code fonctionne chez moi. j'ai retesté
maintenant si l'erreur est toujours présente
retire dim cl as variant

et écrit

public Cl as variant ' déclaré en globale

sub couleurs()

....
' le même code
...
end Sub

tiens moi au courant.
Bon week end.
0
dave38
 
Bonjour Bidouilleu R,

ça ne fonctionne pas, que ce soit avec le dim cl as variant ou le "public cl as variant" déclaré en global...
as tu une ultime solution STP ? encore merci ...!

Sub COULEURS()

Dim plage As Range
Dim cl As Variant
Dim Target As Range

Set plage = Range("J4:Z500")
For Each cl In plage
If cl.Value = "P" Then
Rows(cl.Row).Interior.ColorIndex = 38
End If
Next cl

Dim plage2 As Range
Set plage2 = Range("K4:Z500")
For Each cl In plage2
If cl.Value = "A" Then
Rows(cl.Row).Interior.ColorIndex = 6
End If
Next cl

Dim plage3 As Range
Set plage3 = Range("L4:Z500")
For Each cl In plage3
If cl.Value = "G" Then
Rows(cl.Row).Interior.ColorIndex = 37
End If
Next cl

Dim plage4 As Range
Set plage4 = Range("I4:Z500")
For Each cl In plage4
If cl.Value = "Att" Then
Rows(cl.Row).Interior.ColorIndex = xlNone
End If
Next cl

End Sub
0
Bidouilleu_R Messages postés 1209 Statut Membre 295
 
Bonjour,

Je répète le code VBA que tu possède n'a pas d'erreur.
je te propose de vérifier 2 choses.
1er test.

1) tu crées un nouveau classeur
2) tu insères un module ( alt f11...)
3) tu recopies le code vba que tu possèdes
4) tu places les valeurs P, G, A dans les cellules correspondantes pour un test
5) enregistre et teste ( fais le test avec seulement ce nouveau classeur ouvert)

2eme test

tu fais alt F11 (microsof visual basic editor)

click sur outils / références et regarde s'il n'y a pas une référence invalide.
s'il y une référence invalide tu trouveras le mot manquant au début de la ligne.

Précise aussi ta version d'excel . je suppose que tu utilises excel 2003.

A+
0