Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 SI remplissage cellule (MFC) ALORS transposer la réponse dans une colonne

Chaine

XLDnaute Nouveau
Bonjour à tous,
Je sollicite votre aide.

J'ai réalisé une comparaison de données et souhaite suivre, dans une colonne <INDICATEUR>, si dans la ligne des données ne sont pas identiques (misent en surbrillance en JAUNE).

En colonnes C:BJ :
- des données comparées (réf A à comparer avec réf B)
- avec mise en surbrillance Jaune (fond de cellule) appliqué via une MFC si les valeurs diffèrent (si réf A <> réf B alors jaune sinon sans mise en forme)

En colonne C <Indicateur> :
- Colonne de résultat, je souhaite savoir si dans la ligne on retrouve une cellule en surbrillance Jaune (fond de cellule)
- Résultat attendu : si JAUNE alors 1 sinon O dans la colonne INDICATEUR

N’ayant pas trouvé de formules répondant à ce besoin, je me suis tournée vers le VBA. Mais mes connaissances sont limitées.

J’ai testé le code ci-dessous. Mais,
- Le résultat de ce code est donné dans un MsgBox car je ne sais pas lui demander d’afficher un résultat dans une colonne donnée (peut-être avec « Range »).
- Mon 2éme problème, c’est que la MFC n’applique pas de véritable code couleur sur le cellule, je m’explique :

En recherche le code via ce VBA (n°2) j’obtiens :
- Si j’applique le JAUNE avec la couleur de remplissage (menu polie>remplissage(sceau)) j’obtiens le code 65535
- Si c’est une cellule surbrillée par un Mise en Forme Conditionnelle, j’obtiens 16777215 (soit le même code qu’une cellule sans remplissage)

Quelle pourrait-être la solution pour identifier les lignes misent en surbrillance par une MFC ?
Et Comment transposer la réponse dans la colonne INDICATEUR.
Merci d’avance pour votre aide.

VBA (n°1)
Sub Rechercher_Format_Cellule()
Dim LeCellFormat As CellFormat
Dim Trouve As Range, Adr As String
Dim Sh As Worksheet, Rg As Range
'Nom feuille à adapter
Set Sh = Worksheets("Feuil1")
Set LeCellFormat = Application.FindFormat
With LeCellFormat
.Clear
.Interior.Color = Sh.Range("C1").Interior.Color
End With
With Sh
'Définir la plage de cellules
Set Rg = .Range("D2:BJ10")
End With
With Rg
Set Trouve = .Find(What:="", _
Searchdirection:=xlNext, _
SearchFormat:=True)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
With Trouve
MsgBox Trouve.Address
End With
Set Trouve = .Find(What:="", _
After:=Trouve, SearchFormat:=True)
Loop Until Trouve.Address = Adr Or Trouve Is Nothing
End If
End With
End Sub
'note NE FONCTIONNE PAS AVEC MFC

VBA (n°2)
Sub Couleur_trouver()
'Ecrit le code couleur de la cellule donnée dans une cellule choisie
X = Range("ah2").Interior.Color
'cellule de destination (numéro de la couleur, mais pas index ni RGB) :
Range("a2") = X
End Sub
 

Pièces jointes

  • Classeur1 - Copie.xlsm
    22.5 KB · Affichages: 6
Solution
Bonjour Chaine, natorp,

Pas besoin de VBA, formule en C2 copiée vers le bas :
Code:
=SOMMEPROD(N(D2:AF2<>AH2:BJ2))
elle renvoie le nombre de cellules différentes entre les plages D2:AF2 et AH2:BJ2 (29 cellules).

Si on veut n'avoir que des 1 et 0 on utilisera :
Code:
=SIGNE(SOMMEPROD(N(D2:AF2<>AH2:BJ2)))
Comme on le voit on se sert de la condition de la MFC, sa couleur n'a pas d'importance.

A+

job75

XLDnaute Barbatruc
Bonjour Chaine, natorp,

Pas besoin de VBA, formule en C2 copiée vers le bas :
Code:
=SOMMEPROD(N(D2:AF2<>AH2:BJ2))
elle renvoie le nombre de cellules différentes entre les plages D2:AF2 et AH2:BJ2 (29 cellules).

Si on veut n'avoir que des 1 et 0 on utilisera :
Code:
=SIGNE(SOMMEPROD(N(D2:AF2<>AH2:BJ2)))
Comme on le voit on se sert de la condition de la MFC, sa couleur n'a pas d'importance.

A+
 

Pièces jointes

  • Classeur1 - Copie(1).xlsm
    19.9 KB · Affichages: 9

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…