XL 2019 Résultat de la fonction Index et la couleur de la cellule

Satis

XLDnaute Nouveau
Bonjour à tous,
C est mon premier post...
Bon voilà mon problème. Je souhaite récupérer le contenu d une cellule en combinaison les fonctions index et equiv.
Jusqu'à je sais faire. Mais je souhaite aussi récupérer le format de cellule en question. C'est-à-dire, la couleur du fond de la cellule.
Je ne sais pas si ma demande est claire, je peux mettre un petite exemple s il faut.
Merci de votre aide
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Normalement une formule renvoie seulement une valeur. Cependant une fonction personnalisée écrite en VBA peut se débrouiller pour paraitre renvoyer aussi la couleur de fond de la cellule qu'on lui spécifie en argument, à condition qu'elle ne soit pas due à une mise en forme conditionnelle …
 

Satis

XLDnaute Nouveau
Malheureusement la couleur de ma cellule provient d une mise en forme conditionnelle.
Mais pour moi, ce point ne devrait pas changer l approche. En effet, on doit être capable de récupérer la mise en forme d une cellule quelque soit l origine de son affectation..
 

Dranreb

XLDnaute Barbatruc
Sinon, pour reproduire la couleur de fond propre de la cellule spécifiée, dans un module standard :
VB:
Option Explicit
Private ClnConsigne As New Collection
Function EnCouleur(ByVal Cel As Range)
   Dim AC As Range, Couleur As Long
   Couleur = Cel.Interior.Color
   Set AC = Application.Caller
   ClnConsigne.Add AC
   ClnConsigne.Add Couleur
   EnCouleur = Cel.Value
   End Function
Sub ExécuterConsignes()
   Dim Cel As Range, Couleur As Long
   While ClnConsigne.Count >= 1
      Set Cel = ClnConsigne(1): ClnConsigne.Remove 1
      Couleur = ClnConsigne(1): ClnConsigne.Remove 1
      Cel.Interior.Color = Couleur
      Wend
   End Sub
Dans ThisWorkbook :
VB:
Option Explicit
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
   ExécuterConsignes
   End Sub
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour Satis, Dranreb ;),

Malheureusement la couleur de ma cellule provient d une mise en forme conditionnelle.
Mais pour moi, ce point ne devrait pas changer l approche. En effet, on doit être capable de récupérer la mise en forme d une cellule quelque soit l origine de son affectation..

Non disponible dans mon Excel 2007 que j'utilise actuellement :(, voir en VBA du côté de la propriété DisplayFormat. Voir ici : https://docs.microsoft.com/fr-fr/office/vba/api/excel.displayformat

La propriété doit exister à partir de Excel 2010.
 

Dranreb

XLDnaute Barbatruc
J'y avais vaguement pensé mais je n'avais pas réussi à interroger cette propriété dans la fonction. Mais en l'appliquant à l'exécution des consignes ça a l'air de marcher.
VB:
Option Explicit
Private ClnConsigne As New Collection
Function EnCouleur(ByVal Cel As Range)
   ClnConsigne.Add Application.Caller
   ClnConsigne.Add Cel
   EnCouleur = Cel.Value
   End Function
Sub ExécuterConsignes()
   Dim CelCible As Range, CelSourc As Range
   While ClnConsigne.Count >= 1
      Set CelCible = ClnConsigne(1): ClnConsigne.Remove 1
      Set CelSourc = ClnConsigne(1): ClnConsigne.Remove 1
      CelCible.Interior.Color = CelSourc.DisplayFormat.Interior.Color
      Wend
   End Sub
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Exemple d'utilisation : en E3 :
Code:
=EnCouleur(INDEX(C2:C6;EQUIV(E2;B2:B6;0)))
1579376657935.png
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @patricktoulon :),

.FormatConditions(1).Interior.Color
Il me semble que cela renvoie la couleur de fond qui doit s'appliquer si la première condition est vérifié. Me trompe je ?

Si la cellule vérifie la deuxième condition, il me semble que .FormatConditions(1).Interior.Color renverra malgré tout la couleur de fond correspondant à la 1 ère condition et non celle associée à la seconde condition.
 

patricktoulon

XLDnaute Barbatruc
Bonjour @patricktoulon :),


Il me semble que cela renvoie la couleur de fond qui doit s'appliquer si la première condition est vérifié. Me trompe je ?

Si la cellule vérifie la deuxième condition, il me semble que .FormatConditions(1).Interior.Color renverra malgré tout la couleur de fond correspondant à la 1 ère condition et non celle associée à la seconde condition.

bonjour mapomme,Dranreb ,le fil
oui c'est pourquoi j'ai ajouté
voir meme tester la condition ou la formule de la condition
cela pour 2007 pour le reste displayformat devrait matcher
 

patricktoulon

XLDnaute Barbatruc
un tout petit exemple comme ca vite fait
les MFC
Capture.JPG


LE code
VB:
'type
'2=xlexpression(formule)
'9=xlTextString(text string)
Sub test()
    MsgBox "A1 est en " & quellecouleur([A1])
    MsgBox "A2 est en " & quellecouleur([A2])
End Sub
Function quellecouleur(cel As Range)
    quellecouleur = IIf(cel.Interior.Color = 16777215, "Xlnone", cel.Interior.Color)
    typ = cel.FormatConditions(1).Type
    If typ = 9 Then
        If cel = cel.FormatConditions(1).Text Then quellecouleur = cel.FormatConditions(1).Interior.Color
    ElseIf typ = 2 Then
        Formula = Replace(cel.FormatConditions(1).Formula1, Chr(34), "")
        If Evaluate(Formula) Then quellecouleur = cel.FormatConditions(1).Interior.Color
    End If
End Function

demo
demo3.gif


;)
 

Discussions similaires

Statistiques des forums

Discussions
311 732
Messages
2 081 995
Membres
101 857
dernier inscrit
mt60400