Remplacement d'une couleur définie par une autre
Bonjour
Je change quelques fois les couleurs de plusieurs cellules dans mon tableau. Comme les couleurs de ces cellules ne sont pas contigües, cela me prend beaucoup de temps et des risques d’erreurs car il faut que je le fasse cellule par cellule, ou au mieux par petits groupes de cellules.
Il n’existe pas de moyen sur Excel de dire que je veux remplacer la couleur de fond des cellules qui sont par exemple bleues par la couleur rouge sur une zone prédéfinie.
Je me demande si cela serait éventuellement possible avec une macro ?
Si on considère un tableau qui comporte de nombreuses couleurs de fond et que ces couleurs sont éparpillées.
Serait-il possible à l’aide d’une macro :
En délimitant en 1er une zone avec la souris
Puis en second, en pointant à l’intérieur de cette zone ainsi délimitée une cellule dont on veut remplacer la couleur
Puis pour finir, en choisissant dans le sélecteur de couleur du bandeau accueil la nouvelle couleur que l’on souhaite affecter à toutes les cellules dont la couleur de fond correspond à la couleur sélectionnée précédemment en 2
Salut le forum
Code à copier dans un module
Sub Change_Color()
Dim Plg As Range
Dim Cel As Range
Dim OldColor As Long
Dim NewColor As Long
Set Plg = Application.InputBox("Sélectionnez la plage de travail :", Type:=8)
If Plg Is Nothing Then MsgBox "Sélection annulée": Exit Sub
Set Cel = Application.InputBox("Sélectionnez la couleur d'une cellule :", Type:=8)
If Cel.Count <> 1 Then MsgBox "Sélection annulée": Exit Sub
OldColor = Cel.Interior.ColorIndex
Cel.Activate
Application.Dialogs(xlDialogPatterns).Show
NewColor = Cel.Interior.ColorIndex
For Each Cel In Plg
With Cel.Interior
If .ColorIndex = OldColor Then .ColorIndex = NewColor
End With
Next Cel
Set Plg = Nothing
Set Cel = Nothing
End SubMytå
Bonjour
Merci pour cette macro
C’est bien ce que je cherche
Mais le résultat est étrange :
Si je sélectionne un groupe de cellules
Dans celles-ci il y a par exemple des cellules rouges
Je clique sur une de ces cellules rouges comme couleur à modifier
Je demande comme couleur un vert
Le résultat :
La couleur de la cellule servant comme référence de couleur à modifier, devient bien verte, mais pas le bon vert !
Les autres cellules rouges, elles aussi changent de couleur, mais se retrouvent dans un autre vert et qui n’est toujours pas le bon !
Re le forum
En remplaçant ColorIndex par Color cela devrait résoudre le problème
Sub Change_Color()
Dim Plg As Range
Dim Cel As Range
Dim DiagButton As Boolean
Dim OldColor As Long
Dim NewColor As Long
On Error Resume Next
Set Plg = Application.InputBox("Sélectionnez la plage de travail :", Type:=8)
If Plg Is Nothing Then MsgBox "Opération annulée": Exit Sub
Set Cel = Application.InputBox("Sélectionnez la couleur d'une cellule :", Type:=8)
If Cel.Count <> 1 Then MsgBox "Opération annulée": Exit Sub
On Error GoTo 0
OldColor = Cel.Interior.Color
Cel.Activate
DiagButton = Application.Dialogs(xlDialogPatterns).Show
If DiagButton = False Then MsgBox "Opération annulée": Exit Sub
NewColor = Cel.Interior.Color
For Each Cel In Plg
With Cel.Interior
If .Color = OldColor Then .Color = NewColor
End With
Next Cel
Set Plg = Nothing
Set Cel = Nothing
End SubMytå
Bonjour
Cette fois, plus de problème de couleur
Le fonctionnement est parfait
Merci beaucoup
Il subsiste cependant une petite erreur :
Si on annule la procédure à n’importe quelle étape, au lieu de sortir de la macro, on se retrouve avec une erreur d’exécution « 424 » Objet requis.
Re le forum
Chrige a écrit :Si on annule la procédure à n’importe quelle étape, au lieu de sortir de la macro, on se retrouve avec une erreur d’exécution « 424 » Objet requis.
Impossible de reproduire le problème, utilises-tu le code de la dernière version ?
Mytå
Bonjour
Je n’avais pas pris la nouvelle version, tu m’avais dis « Essaye en remplaçant ColorIndex par Color »
Je m’étais borné juste à cela, cela fonctionnait bien, mais pas pour l’annulation
Maintenant j’ai pris l’intégralité de ta dernière macro et effectivement l’annulation se passe très bien.
Par contre, j’ai un peu modifié ta macro, car je trouvais plus pratique pour moi de sélectionner comme nouvelle couleur, une couleur déjà présente dans mon tableau.
Cela fonctionne très bien aussi, mais pas très bien pour l’annulation à cette étape seulement.
En effet l’annulation se fait bien, mais je n’arrive pas comme après les 2 premiers ImputBox, à l’affichage « Opération annulée »
Ce n’est pas très important, mais je voudrais bien comprendre pourquoi et où fait une erreur
Sub Couleur_Fond_Remplacement_mG()
' Couleur_Remplacement Macro
Dim Plg As Range
Dim Cel As Range
Dim DiagButton As Boolean
Dim OldColor As Long
Dim NewColor As Long
On Error Resume Next
Set Plg = Application.InputBox("Sélectionnez la plage de travail :", Type:=8)
If Plg Is Nothing Then MsgBox "Opération annulée": Exit Sub
Set Cel = Application.InputBox("Sélectionnez la couleur d'une cellule :", Type:=8)
If Cel.Count <> 1 Then MsgBox "Opération annulée": Exit Sub
On Error GoTo 0
OldColor = Cel.Interior.Color
Cel.Activate
On Error Resume Next
Set Cel = Application.InputBox("Sélectionnez une nouvelle couleur :", Type:=8)
If Cel.Count <> 1 Then MsgBox "Opération annulée": Exit Sub
On Error GoTo 0
NewColor = Cel.Interior.Color
For Each Cel In Plg
With Cel.Interior
If .Color = OldColor Then .Color = NewColor
End With
Next Cel
Set Plg = Nothing
Set Cel = Nothing
End SubRe le forum
Il faut vide le contenu de Cel avant de l'utiliser à nouveau.
Sub Couleur_Fond_Remplacement_mG()
' Couleur_Remplacement Macro
Dim Plg As Range
Dim Cel As Range
Dim OldColor As Long
Dim NewColor As Long
On Error Resume Next
Set Plg = Application.InputBox("Sélectionnez la plage de travail :", Type:=8)
If Plg Is Nothing Then MsgBox "Opération annulée": Exit Sub
Set Cel = Application.InputBox("Sélectionnez la couleur d'une cellule :", Type:=8)
If Cel.Count <> 1 Then MsgBox "Opération annulée": Exit Sub
OldColor = Cel.Interior.Color
Set Cel = Nothing
Set Cel = Application.InputBox("Sélectionnez une nouvelle couleur :", Type:=8)
If Cel.Count <> 1 Then MsgBox "Opération annulée": Exit Sub
On Error GoTo 0
NewColor = Cel.Interior.Color
For Each Cel In Plg
With Cel.Interior
If .Color = OldColor Then .Color = NewColor
End With
Next Cel
Set Plg = Nothing
Set Cel = Nothing
End SubMytå
Merci
Il fallait donc que je mette
« Set Cel = Nothing »
Au lieu de
« Cel.Activate »
Si j’ai bien compris, cela n’influe pas sur le résultat de la macro
Puisque elle fonctionnait très bien
Mais cela l’empêche de sortir proprement en cas d’annulation.
Merci encore pour ton aide
La macro est maintenant totalement opérationnelle
Bonne soirée.