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

Chrige comme nouveau membres.

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 Sub

Mytå

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 Sub

Mytå

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 Sub

Re 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 Sub

Mytå

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.

Rechercher des sujets similaires à "remplacement couleur definie"