Tester la couleur d'une cellule dans une plage

Bonjour à tous

C'est la première fois que je pose une question sur un forum merci de votre compréhension pour les erreurs

J'ai parcouru le forum et trouvé pas mal de questions sur le sujet, mais aucun ne correspond à ce que je cherche

Voila : j'ai une page de cellules sur une ligne (A1:A10) ou je fais une sélection en colorant le fond de la cellule a l'aide des couleurs dans style (normal, satisfaisant), ce que je veux c'est une fonction personnalisée qui me renvoie le numéro de la colonne ou la cellule est colorée, un peu comme la fonction EQUIV mais sur le fond au lieu du contenu.

Maintenant je me suis posé la question au lieu de mettre en couleur on pourrait aussi mettre en gras ou souligné si cela peut simplifier mais il faut que cela reste simple à utiliser

oups

J'ai fais une erreur dans l’énoncé de ma demande la plage de cellules est A1:J1 et non A1:A10

Merci de corriger

bonsoir,

une proposition, la fonction renvoie le numéro de la première colonne contenant la couleur recherchée. si pas de colonne trouvée la fonction renvoie un 0.

appeler la fonction de la manière suivante :

=equivcolor(cellule contenant la couleur recherchée; range de cellules où faire la recherche)

exemple

=equivColor(A2;A1:J1)

Function equivColor(r As Range, a As Range) As Integer

equivColor = 0
For Each c In a
 If r.Interior.Color = c.Interior.Color Then equivColor = c.Column: Exit Function
Next

End Function

Merci merci c'est bien cela que je cherche avec 0 si pas de sélection c'est super je n'y avais pas pensé

Mais le calcul ne se fait pas automatiquement si on modifie le choix (il faut mettre la cellule ou est la fonction en édition puis pointer une autre cellule pour quelle se rafraîchisse) Maj+F9 ne fonctionne pas il faut faire Ctrl+Maj+F9

Ne peut-on pas mettre la couleur dans la fonction (c'est pas de couleur ou couleur, peu importe la couleur)

Si on insère une colonne avant la plage il faut créer un offset ou envoyer la position dans la plage

Cela est une proposition d'amélioration qui me serai utile

Merci encore

re bonsoir,

fonction adaptée pour prendre en la valeur de la couleur plutôt qu'une cellule de référence.

=equivcolor(codecouleur, range à examiner)

je n'ai par contre pas compris le problème "d'offset"

Function equivColor(r As long, a As Range) As Integer

equivColor = 0
For Each c In a
 If r = c.Interior.Color Then equivColor = c.Column: Exit Function
Next

End Function

Re re Bonsoir

Merci pour votre réponse

J'ai pensé mettre la couleur de comparaison dans la formule en constante de type : r = Valeur cellule sans remplissage

puis dans le test : If r < c.Interior.Color Then equivColor = c.Column: Exit Function

1 je ne connais pas la valeur de couleur d'une cellule sans remplissage

2 Je ne'ai jamais fait de VBA mais un peu de Basic dans le temps

pour le rafraîchissement j'ai vu sur un autre forum un truc comme .volatile (je me rappelle plus de la syntaxe excuse) qui est sensé régler le problème

Pour le problème d'offset : La formule fonctionne actuellement sur la plage A1:J1 si j’insère une colonne la plage sera B1:K1 et le résultat donnera la bonne valeur +1 il faut donc soustraire 1 au résultat, mon idée si elle est bonne c'est de calculer le nombre de cellules avant la plage (offset) pour la mettre dans la formule equivColor = c.Column - offset; pour donner la position dans la plage

Il existe peut-être une instruction pour ça !

Je crois que je vais me mettre au VBA des que j'aurai le temps

bonsoir

Bonjour à tous,

Une autre solution sans fonction personnalisée mais en utilisant l’évènement SelectionChange de la feuille.

La plage est nommée "MaPlage" et le résultat est indiqué dans la cellule nommée "Resultat".

Pour obtenir le résultat, il faut cliquer sur une cellule quelconque après avoir modifié la couleur d’une cellule de la plage.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim V As Integer, i As Integer
    For i = 1 To 10
        If Not Range("MaPlage")(i).Interior.ColorIndex = xlColorIndexNone Then V = i: Exit For
    Next
    Range("Resultat") = V
End Sub
87exemple.xlsm (17.44 Ko)

A+

MILBER a écrit :

Re re Bonsoir

Merci pour votre réponse

(...)

Pour le problème d'offset : La formule fonctionne actuellement sur la plage A1:J1 si j’insère une colonne la plage sera B1:K1 et le résultat donnera la bonne valeur +1 il faut donc soustraire 1 au résultat, mon idée si elle est bonne c'est de calculer le nombre de cellules avant la plage (offset) pour la mettre dans la formule equivColor = c.Column - offset; pour donner la position dans la plage

Il existe peut-être une instruction pour ça !

je comprends de ton explication concernant l'offset, que ce n'est pas le numéro de colonne qui t'interesse, mais la position de la cellule dans le range selectionné.

voici la macro adaptée

Function equivColor(r As long, a As Range) As Integer
i=1
equivColor = 0
For Each c In a
 If r = c.Interior.Color Then equivColor = i: Exit Function
 i=i+1
Next

End Function

Bonjour

Ça marche ..........! Super

J'ai été très pris les 2 derniers jours, mémé pas le temps de venir sur le forum, milles excuses

J'ai étudié les réponses qui m'ont été faite et j'en ai fait un amalgame qui fonctionne parfaitement ( Mis à part le recalcul de la feuille)

Je vous met le code

Function equivColor(a As Range) As Integer

Application.Volatile
i = 1
equivColor = 0
For Each c In a
 If Not c.Interior.ColorIndex = xlColorIndexNone Then equivColor = i: Exit Function
 i = i + 1
Next

End Function

Voila si ça peut servir a quelqu’un, en tout cas un gros merci aux 2 personnes qui m'ont répondu ( H2so4 et frangy)

encore merci

Je laisse le post ouvert encore jusqu’à Lundi et je le mettrai en résolu

Bonne soirée


Encore une petite chose pour info

la valeur Interior.ColorIndex = -4142 si la cellule est sur aucun remplissage

la valeur du vert que j'utilise = 35

Voila c'est tout

Re bonsoir

Bonsoir

Comme prévu je marque le sujet comme résolu

Encore merci à tous

Je passerai régulièrement

A une prochaine peu-etre

Bonjour,

Je me permet de réagir a ce post car je cherche a tester la couleur d'une cellule pour pouvoir l'integrer a une formule et faire la somme de cellules d'une certaine couleur

https://forum.excel-pratique.com/post231407.html#p231407

Merci

Rechercher des sujets similaires à "tester couleur plage"