Interior.ColorIndex

M

Montana

Guest
Bonjour à tous!

J'ai un problème avec une macro qui marchait très bien hier encore, je ne sais pas ce que j'ai bien pu faire comme modification...

Je préviens tout d'abord : je suis novice en visual basic, je débute tout juste, et disons que je "bricole" avec ce que je trouve sur le web, pour arriver à ce que je veux.
Je ne connais donc pas vraiment la logique du language.

Là voici : (Excel 2000)

SubCPCMREPOS()
Dim c As Range
For Each c In Range ("C2:AG42")
If UCase(c) = "R" Then
c.Font.ColorIndex = 3
ElseIf UCase(c) = "CP" Then
c.Font.ColorIndex = 10
ElseIf UCase(c) = "CM" Then
c.Interior.ColorIndex = 43 --------------->c'est ici que ca bug
End If
Next
End Sub

Oui oui, c'est bien une mise en forme conditionnelle que je veux, et si je passe par une macro, c'est que j'ai déjà 3 mises en forme cond. et que je ne peux pas en ajouter.

Voici le message d'erreur lorsque j'execute : Erreur d'execution "1004"
Impossible de définir la propriété de colorIndex de la classe interior.

Essayant tout plein de trucs sans succès depuis des heures, je finit donc par faire appel à vous, car ce forum d'où je tire bien des exemples m'a l'air très sympa.

Dans l'attente d'un peu de secours ...... @+ !
 
G

Gérard DEZAMIS

Guest
Bonsoir Montana

Ton code fonctionne très bien CP est écrit en vert Clair R en Rouge et CP a le fond un peu vert caca d'oie mais ...

Place ton code dans ta feuille avec :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim c As Range
For Each c In Range("C2:AG42")
If UCase(c) = "R" Then
c.Font.ColorIndex = 3
ElseIf UCase(c) = "CP" Then
c.Font.ColorIndex = 10
ElseIf UCase(c) = "CM" Then
c.Interior.ColorIndex = 43 ' --------------->c'est ici que ca bug
End If
Next
End Sub
et surtout n'oublie pas de mettre une ' avant les tirets de -----> c'est ici ...

Tout fonctionne bien chez moi ainsi !

@+ GD

child029.gif
 
M

Montana

Guest
Ah, merci, il me semble bien en effet qu'avant (probablement lorsque ca fonctionnait) quelque chose du genre :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

ou peut être avec boolean ou un "machin" comme ca.

Alors j'ai fait la modif... mais maintenant comment qu'y faut faire pour exécuter cette macro, parce que je retrouve plus dans mes macros "CPCMREPOS" ??

Autre question pendant que j'y suis : cette macro, je l'ai copié pour la mettre dans le "workbook" de mon classeur, parce que je veux qu'elle s'éxecute automatiquement.
J'ai donc trouvé comment y fallait faire pour qu'elle s'éxecute automatiquement à l'ouverture de celui-ci. Ca, c'est pas le problème...le problème c'est qu'à l'ouverture de mon classeur, je voudrais executer 2 macros ! celle ci + une autre pour activer la protection chaque feuille.
En gros j'ai essayé de compiler 2 macros (alors je part dans des trucs, moi!)

Mais j'avais réussi, sauf pour le c.Interior.ColorIndex = 43 , ( la fameuse couleur cacadoigt)...
Alors maintenant il faut que je rajoute aussi Private Sub Worksheet_SelectionChange(ByVal Target As Range) pour que ca marche?

Bon, je voulais pas rentrer trop dans les détails, mais du coup je sais pas comment faire...

Voilà ce que j'ai dans le workbook, après bien des essais et modifications pour que ca fonctionne

Private Sub Workbook_Open()
For i = 1 To Sheets.Count
Sheets(i).Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Next i
For i = 1 To Sheets.Count
Sheets(i).Select
Dim c As Range
For Each c In Range("C2:AG42")
If UCase(c) = "R" Then
c.Font.ColorIndex = 3
ElseIf UCase(c) = "CP" Then
c.Font.ColorIndex = 10
ElseIf UCase(c) = "CM" Then
c.Font.ColorIndex = 1
ElseIf UCase(c) = "CM" Then
c.Interior.ColorIndex = 43
End If
Next
Next
End Sub

Comme ca, ca marche, sauf que CM n'est pas colorié en vert caca doigt.
Si je place private sub Worksheet_SelectionChange(ByVal Target As Range),
je suis obligé de mettre un end sud à ma première macro, du coup, la seconde ne marche pas...

Au secours !!!
 
G

Gérard DEZAMIS

Guest
Bonsoir Montana

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
permet au code de s'appliquer à chaque changement de valeur d'une cellule de la feuille (Worksheet) où est placé ce code


Private Sub Workbook_Open() lance une macro à l'ouverture du Classeur.
Ces deux formulations ne sont pas incompatibles. Tu places la première dans la feuille et la seconde dans le classeur et le tour est joué....

J'ose espérer ne pas dire de bétise ....

@+

GD
child029.gif
 
Y

ya_v_ka

Guest
salut tous

euh malgrès mes maigres connaissances, deux fois elseif x = "CM" de suite, si le premier est bon il passe à end if de suite et n'esxecute pas le 2e, ca parrait normal... faudrait soit les mettres ensemble soit changer la 2e condition...


;-)

ya'v
 
M

Montana

Guest
Ca y est, j'ai compris !!!

Ca va vous sembler tout con mais je ne savais pas qu'on pouvait mettre du code DANS UNE FEUILLE;
Moi je créais UN MODULE, c'est pour ca que ca marchait pas, et je ne comprenais pas pourquoi
"Private Sub Worksheet_SelectionChange(ByVal Target As Range) "
ne changeait en rien la couleur des cellules lorsque je les modifiais....

Maintenant si je mets ca dans une feuille, c'est NICKEL.

Et oui, comme je vous l'ai dit, je patauge un peu beaucoup mais le fait d'y arriver, c'est génial. Y faudrait peut être que je commence par apprendre les bases avant de venir vous embêter...

ya v ka : je pense que tu as raison en effet, j'ai mis CM en bleu pour voir, et effectivement quand je valide ca ne se met pas en noir...mais c'est pas grave, je crois que ca ne me sert pas à grand chose d'ailleurs.
Non par contre ce que j'aurais voulu, c'est que si, dans ma feuille de calcul je met un "R" (il se met en rouge), mais par erreur, que je corrige, ca reste en rouge...c'est chiant.

En tout cas un grand MERCI pour votre aide, et très probablement à bientot !!
 
L

Lapou

Guest
Bonjour tout le monde !!!

Je me permets de 'infiltrer dans ce fil pour poser une tite question ;-)

J'utilise ce code qui me permet de surligner en vert la (ou les) lignes avec des cellules sélectionnées :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cell As Range
Range("A1:M1500").Interior.ColorIndex = xlNone
Range("A" & ActiveCell.Row & ":AD" & ActiveCell.Row).Interior.ColorIndex = 43
If Target.Row >= 2 And Target.Row <= 10000 Then
If Target.Count = 1 Then
Target.EntireRow.Columns("A:AD").Interior.ColorIndex = 43
Else
For Each cell In Target
cell.EntireRow.Columns("A:AD").Interior.ColorIndex = 43
Next
End If
End If
End Sub

Cependant, avec ce code je n'arrive plus à faire de copier/coller !!!

Et en plus je souhaiterais que, si H1 = "Mineur"; H1 et J1 deviennent jaune, si H1 = "Majeur"; H1 et J1 deviennent orange et si H1 = "Critique"; H1 et J1 deviennent rouge.

Le fait qu'il y ait un xkNone complique un peu la chose mais je pense que pour les meilleurs d'entres vous ça devrait aller ;-)

En tout cas merci pour votre précieuse aide.

Bon début de semaine
 
M

Montana

Guest
Personne pour répondre à Lapou ???

Je reviens sur mon message....
En effet ce code fonctionne très bien, une fois collé dans chaque feuille.

Mais un second obstacle survient : j'ai toujours une macro qui sert à protéger chaque feuille (=protection de feuilles et non pas du classeur, la protection n'est pas de meme nature).
Celle-ci est programmé pour s'éxécuter à chaque ouverture de mon classeur.

MAIS, à cause de cette protection, dès que je me déplace de cellule en cellule, la meme erreur qu'avant revient :
Erreur d'execution "1004"
Impossible de définir la propriété de colorIndex de la classe interior.

Débogage : ma ligne C.INTERIOR.COLORINDEX=43 est surlignée en jaune
Si je remplace INTERIOR par FONT, alors là pas de soucis.

Je dit bien à cause de la macro qui fait la protection de feuille, parce que si je l'ote, là c'est nickel, tout fonctionne, plus aucun message d'erreur

Je précise que les cellules en question ne sont pas "verrouillées", seules les cellules qui contiennent des calculs le sont, je ne comprend donc pas pourquoi cette protection n'accepte pas un INTERIOR. COLORINDEX, alors quelle accepte le FONT.COLORINDEX.

Y aura -til quelqu'un pour relever le défi?
Où dois laisser tomber cette mise en forme?

Merci d'avance!
 
L

Lapou

Guest
Première solution pour le copier/coller :

Remplacer par ce code :

Private Declare Function OpenClipboard& Lib "user32" _
(ByVal hwnd&)
Private Declare Function CloseClipboard& Lib "user32" ()

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
OpenClipboard 0&
Range("A3:M1500").Interior.ColorIndex = xlNone
Range("A" & ActiveCell.Row & ":AD" & ActiveCell.Row).Interior.ColorIndex = 43
If Target.Row >= 2 And Target.Row <= 10000 Then
If Target.Count = 1 Then
Target.EntireRow.Columns("A:AD").Interior.ColorIndex = 43
Else
For Each cell In Target
cell.EntireRow.Columns("A:AD").Interior.ColorIndex = 43
Next
End If
End If
CloseClipboard
End Sub

:)
 

Discussions similaires

Réponses
2
Affichages
571

Statistiques des forums

Discussions
313 132
Messages
2 095 559
Membres
106 295
dernier inscrit
Reija05