Mise en forme conditionnelle problématique

Bonjour le forum

Voici mon souci.

J'ai une macro qui applique une couleur sur des cellules situées sur la même ligne que des doublons.

Du premier à l'avant dernier doublon la ligne devient orange, la ligne du dernier doublon est colorée en vert.

Voici le code:

Sub traitement()
Dim LastLig As Long

With Feuil1
    LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
    With .Range("A3:K" & LastLig)
        .FormatConditions.Delete
        .FormatConditions.Add(Type:=xlExpression, Formula1:= _
        "=ET($B2=$B3;$B3<>$B4)").Interior.ColorIndex = 35
        .FormatConditions.Add(Type:=xlExpression, Formula1:= _
        "=OU(ET($B2<>$B3;$B3=$B4);ET($B2=$B3;$B3=$B4))").Interior.ColorIndex = 40
    End With
End With

End Sub

A la suite de ce traitement je veux effacer le contenu des cellules qui n'ont pas de couleur de la colonne K.

Voici le deuxième code:

Sub EffaceContenu()
Dim cell As Range
Set myRange = ActiveSheet.Range("K2:K300")
For Each cell In myRange
If cell.Interior.ColorIndex = 2 Then
    cell.ClearContents
    cell.Interior.ColorIndex = xlNone
Else
End If
Next
End Sub

Mon souci est que toutes les cellules de la colonne sont effacées.

Je me trompe peux-être mais je pense que les couleurs créées par la mise en forme conditionnelles sont "virtuelles".

En effet si je sélectionne une cellule colorée et que j'effectue un clic droit / format de cellule/ remplissage,

il n'y a aucune couleur!!!!!

Et donc ma macro N°2 ne voit pas de couleurs et efface toute la colonne.

Existe il un moyen d'appliquer réellement la couleur aux cellules concernées ?

Mes macros sont peux-être inadaptées ?

J'ai besoin de votre aide.

Merci

Bonjour

jp65 a écrit :

Je me trompe peux-être mais je pense que les couleurs créées par la mise en forme conditionnelles sont "virtuelles".

Non tu ne te trompes pas

Une solution (que je trouve compliqué - juste mon avis) est celle-ci https://forum.excel-pratique.com/cours-astuces/fonction-qui-retourne-la-couleur-active-d-une-mfc-t29247.html

Une autre solution que je propose est pour moi plus simple

Lors de la création de la MEFC par la macro, il faut rajouter les formules dans 2 colonnes (qui peuvent être masquées)

Ensuite ta 2ème macro parcourt ces colonnes et agit selon ce que tu souhaites

1ère macro : Ajout

Sub traitement()
Dim LastLig As Long

  With Feuil1
    LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
    With .Range("A3:K" & LastLig)
      .FormatConditions.Delete
      .FormatConditions.Add(Type:=xlExpression, Formula1:= _
          "=ET($B2=$B3;$B3<>$B4)").Interior.ColorIndex = 35
      .FormatConditions.Add(Type:=xlExpression, Formula1:= _
          "=OU(ET($B2<>$B3;$B3=$B4);ET($B2=$B3;$B3=$B4))").Interior.ColorIndex = 40
    End With
    .Range("L3:L" & LastLig).Formula = "=AND($B2=$B3,$B3<>$B4)"
   .Range("M3:M" & LastLig).Formula = "=OR(AND($B2<>$B3,$B3=$B4),AND($B2=$B3,$B3=$B4))"
  End With
End Sub

2ème macro : Complétement différente

Sub EffaceContenu()
Dim Cell As Range, MyRange As Range

  Set MyRange = Range("L2:L" & Cells(Rows.Count, 1).End(xlUp).Row)
  For Each Cell In MyRange
    If Cell <> True And Cell.Offset(0, 1) <> True Then
      Cell.Offset(0, -1).ClearContents
      Cell.Offset(0, -1).Interior.ColorIndex = xlNone
    End If
  Next Cell
End Sub

A tester

Bonjour à tous

Banzai64 comme d'habitude tes solutions fonctionnent immédiatement.

Je te soumet un autre code qui en l'état n'est pas totalement fonctionnel mais dont le but est le même que mon premier post.

Le but initial de la macro est d'effacer les doublons. J'ai tenté de l'adapter pour coloriser les doublons.

La recherche s'effectue sur les 3 colonnes A B C .

Sub OrdreRespectéDictionary()
  Set MonDico = CreateObject("Scripting.Dictionary")
  'Application.ScreenUpdating = False
  i = 2
  Do While Cells(i, "A") <> ""
   If Not MonDico.Exists(Cells(i, "A") & Cells(i, "B") & Cells(i, "C")) Then
      MonDico(Cells(i, "A") & Cells(i, "B") & Cells(i, "C")) = ""
       i = i + 1
   Else
     Rows(i).Interior.ColorIndex = 40
     i = i + 1

   End If
Loop
End Sub

Meci encore

Re

Après fouillage sur le net j'ai fait évoluer la macro.

Cette fois toutes les lignes contenant les doublons sont colorées en orange sauf la ligne correspondante

au dernier doublon de la série.

Sub GardeDernier()
  Set MonDico = CreateObject("Scripting.Dictionary")
  Application.ScreenUpdating = False
  i = [A65000].End(xlUp).Row
  Do While i > 2
    temp = Cells(i, "A") & Cells(i, "B")
    If Not MonDico.Exists(temp) Then
      MonDico(temp) = ""
      i = i - 1
    Else
      Rows(i).Interior.ColorIndex = 40 '40 = orange
      i = i - 1
   End If
  Loop
End Sub

Il me manque encore à colorer cette ligne du dernier doublon de la série.

A suivre

Bonjour

sans ton fichier

Préambule : Le tableau trié : Une clé sur la colonne A et l'autre sur la colonne B

A tester

Sub GardeDernier()
  Set MonDico = CreateObject("Scripting.Dictionary")
  Application.ScreenUpdating = False
  i = [A65000].End(xlUp).Row
  Do While i > 2
    temp = Cells(i, "A") & Cells(i, "B")
    If Not MonDico.Exists(temp) Then
      MonDico(temp) = ""
      If temp = Cells(i - 1, "A") & Cells(i - 1, "B") Then
        Rows(i).Interior.ColorIndex = 34
      End If
      i = i - 1
    Else
      Rows(i).Interior.ColorIndex = 40 '40 = orange
     i = i - 1
   End If
  Loop
End Sub

Aie

C'est vrai que je n'ai pas joint de fichier. Je vais essayer de me faire pardonner par une pirouette.

"Banzai64 je ne joins pas de fichier car ton expertise transforme les mots que je jette en phrases compréhensibles. "

Ta dernière réponse va d'ailleurs dans le sens de la pommade que je viens de te passer car bien évidemment ta solution fonctionne.

Néanmoins pour aider ceux qui pourraient être intéressés par ce post, je joint un fichier exemple.

Banzai64 une fois de plus un grand merci pour ton aide.

Rechercher des sujets similaires à "mise forme conditionnelle problematique"