changer la couleur des cellules par macro

usul

XLDnaute Occasionnel
Bonjour
j'ai un fichier excel dans lequel j'ai une douzaine d'onglets
chaque onglet contient des cellules non contigues toutes coloriées avec la même couleur

je souhaiterai par macro que les cellules de tous les onglets qui sont par exemple colorées en bleu clair (index de couleur 34) soient recolorées en jaune pâle (index de couleur 36)

quelqu'un peut me filer le code ?
j'ai essayé de bidouiller mais je ne suis pas doué avec les macros : tout juste capable de changer l'index de couleur

;-)

merci bcp
 

Abel

XLDnaute Accro
Bonjour usul,

Essaie :

for each c in selection
if c.interior.colorindex = 34 then c.interior.colorindex=36
next c

Ceci fonctionne (enfin normalement, je ne l'ai pas testé), sur une zone sélectionnée au préalable.

Si tu veux exécuter la même chose mais sur toute une feuille :

for each c in cells
if c.interior.colorindex = 34 then c.interior.colorindex=36
next c

Mais ça va être long.


S'il y a moyen de délimiter la plage, donne nous le. Il s'agit peut être d'un tableau avec des valeurs.

Abel.

Message édité par: Abel, à: 02/11/2005 16:33
 

Hervé

XLDnaute Barbatruc
Bonsoir usul, abel

usul, tu peux essayer ceci :

Sub Bouton1_QuandClic()
Dim ws As Worksheet
Dim c As Range


   
For Each ws In Worksheets
       
For Each c In ws.UsedRange
           
With c.Interior
                .ColorIndex = IIf(.ColorIndex = 34, 36, .ColorIndex)
           
End With
       
Next c
   
Next ws
   
End Sub


salut
 

usul

XLDnaute Occasionnel
Merci à tous les 2
tout fonctionne impeccable ça m'a permis de voir que j'avais une plage de cellules qui était en MEFC ;-)

Abel je garde ta macro pour des plages de cellules quelquesoit le fichier

Hervé c'est ce qui me fallait pour ce fichier !
avec une question supplémentaire comment introduire
- la limite des 12 premiers onglets avec je suppose qqchose du genre for i = 1 to 12

- la plage de cellule toujours la même sur les 12 onglets
avec je suppose qqchose du genre Range(A1:U60)


Encore merci

Usul
 

Hervé

XLDnaute Barbatruc
Bonjour usul, abel, le forum

comme ceci, usul :

Sub Bouton1_QuandClic()
Dim i As Byte
Dim c As Range

   
For i = 1 To 12
       
With Sheets(i)
           
For Each c In .Range('A1:U60')
               
With c.Interior
                    .ColorIndex = IIf(.ColorIndex = 34, 36, .ColorIndex)
               
End With
           
Next c
       
End With
   
Next i
   
End Sub

salut
 

usul

XLDnaute Occasionnel
Bon vous allez dire que j'abuse mais...

en fait dans ce fichier j'ai besoin d'utiliser la macro d'abel de façon ponctuelle pour certaine plages de cellules après certaines modifications de ces cellules.

bon comment intégrer à sa macro un message pour indiquer quel index de couleur est à remplacé par un autre

si ça peut servir : pour l'instant je tourne sur les index
15 - 34 - 35 - 36 et none

merci bcp
 

Abel

XLDnaute Accro
Bonjour le fil,

Essaie ceci.
J'espère avoir compris ta demande.

Code:
Sub ChangeCouleur()
Dim Plage As Range
Dim Couleur1 As Byte, Couleur2 As Byte
Set Plage = Application.InputBox(prompt:='Sélectionner la zone à modifier', Type:=8)
Couleur1 = InputBox('Donnez l'index de la couleur à remplacer')
Couleur2 = InputBox('Donnez l'index de la couleur de remplacement')
For Each c In Plage
    With c.Interior
        .ColorIndex = IIf(.ColorIndex = Couleur1, Couleur2, .ColorIndex)
    End With
Next c
End Sub

Hervé, je ne connaissais pas le 'iif'. C'est bien pratique.


Abel.
 

usul

XLDnaute Occasionnel
Salut Abel

effectivement c'est ce que je souhaite
mais... ;)
je voudrai ne pas avoir à indiquer la plage de cellule :
que la macro s'execute uniquement sur la plage déjà sélectionnée

ensuite j'ai
erreur d'execution '13'
'incompatibilité de type'
quand je remplis l'index de couleur à changer et que celui-ci est 'none'

merci
 

Abel

XLDnaute Accro
Bonjour usul, Hervé, le forum,

S'il s'agit de remettre blanc ('none'), lorsque la macro demande une couleur, laisse la réponse 'vide'.

Code:
Sub ChangeCouleur()
Dim Couleur1 As Variant, Couleur2 As Variant
Couleur1 = InputBox('Donnez l'index de la couleur à remplacer')
If IsNumeric(Couleur1) Then Couleur1 = Val(Couleur1)
If Couleur1 = '' Then Couleur1 = none
Couleur2 = InputBox('Donnez l'index de la couleur de remplacement')
If IsNumeric(Couleur2) Then Couleur2 = Val(Couleur2)
If Couleur2 = '' Then Couleur2 = none
For Each c In Selection
    With c.Interior
        .ColorIndex = IIf(.ColorIndex = Couleur1, Couleur2, .ColorIndex)
    End With
Next c
End Sub

Ca marche aussi à l'envers. Si tu es sur une cellule sans couleur et que tu veux la colorier.


Abel.

Edition :
Il faut sélectionner la (les) plage avant d'exécuter la macro.

Message édité par: Abel, à: 04/11/2005 12:21
 

usul

XLDnaute Occasionnel
désolé abel mais mon message ne remontait pas donc j'en ai créé un autre

merci pour la modif c'est impec à part le '' ou none ou je laisse vide :
ça ne fonctionne pas !
par contre si je mets le code donné par pascal76 : -4142 c'est effectivement pris en compte

donc tout va bien

encore un grand merci

:)
 

Abel

XLDnaute Accro
Re,

Ouh là ! Ca frise le ZOP là.

'none' est considéré comme une variable laquelle est vide.

C'est pour ça que ça marche quand la deuxième couleur est laissée vide (coup de chance ...).

Remplace ces deux lignes :
If Couleur1 = '' Then Couleur1 = -4142
If Couleur2 = '' Then Couleur2 = -4142

Les variables étant en 'Variant', ±4142 est accepté (trop grand pour le 'Byte').

Abel.
 

Discussions similaires

Statistiques des forums

Discussions
311 741
Messages
2 082 058
Membres
101 883
dernier inscrit
Don esteban