Macro VBA - test sur couleur d'une cellule

Bonjour,

Je suis débutante en VBA. Mon Excel est en anglais.

J'aimerais avoir un programme qui puisse faire un test sur la couleur de pls cellules.

En pj mon fichier.

L'onglet source est "To hedge", l'onglet de destination est "upload".

La plage de cellules sources est J3:AA4. La plage de destination est B2:B39

Le test serait le suivant: si couleur de la cell J3 (source) est blanche alors on écrit "FX" en B2 (dest), si orange ou rouge alors on écrit "FXU"

Puis on passe à la cell suivante cad, si couleur de la cell K3 (source) est blanche alors on écrit "FX" en B3 (dest), si orange ou rouge alors on écrit "FXU"

ainsi de suite jusque cell AA4 (source) et B39 (dest)

Est-ce que quelqu'un peut m'aider?

Par avance merci,

Sandr

48test.xlsx (15.76 Ko)

Bonjour,

Le pack de fonctions complémentaires proposé sur ce site offre un certain nombres de fonctions sur les couleurs.

Elles devraient te permettre de réaliser tes résultats conditionnés selon la couleur d'une cellule ou d'une plage.

Merci Pedro,

Malheureusement, je n'arrive pas à ajouter les fonctions complémentaires car je ne suis pas administrateur (ordi pro).

Y aurait-il une macro qui pourrait faire le test sur la couleur d'une cellule et renvoyer une donnée en fonction de la couleur?

Merci,

Sandr

Avec une macro, tu peux t'en sortir. Dans un module vierge de l'éditeur VBA, colle le code suivant :

Public Function AffecteFX(ByVal Cel As Range) As String

Select Case Cel.Interior.Color
    Case 16777215: AffecteFX = "FX" 'Transparent (pas de couleur)
    Case 49407, 255: AffecteFX = "FXU" 'Orange ou rouge
    Case Else: AffecteFX = "Couleur non répertoriée"
End Select

End Function

Cette fonction s'utilise ensuite comme une fonction classique dans une cellule :

=AffecteFX(J3)

Le classeur est à enregistrer aux format .xlsm.

Merci Pedro.

J3 est ma 1ere cellule source et B2 ma 1ere cellule de destination.

Où est-ce que je définis la position de mes cellules.

J'imagine que je vais devoir faire une boucle car ma source est J3:AA4 et ma destination B2:B39?

Merci,

Sandr

Pedro, Je viens de voir que ta fonction s'utilise comme une fonction classique.

Je pense que cela répond à mon besoin!

Mille mercis!

Pedro,

Juste une dernière question.

Si je change la couleur de ma cellule source, le résultat de la cell de destination ne change pas automatiquement.

Sais-tu comment faire pour ne pas avoir à revalider chaque fonction AffecteFX?

Merci

Sandr

Pour info, les options de calculs sont pourtant déjà en mode automatique...

Bonjour Sandr, Pedro22 , le forum,

Essaie de rajouter

Application.Volatile
Public Function AffecteFX(ByVal Cel As Range) As String
   Application.Volatile
 Select Case Cel.Interior.Color
    Case 16777215: AffecteFX = "FX" 'Transparent (pas de couleur)
    Case 49407, 255: AffecteFX = "FXU" 'Orange ou rouge
    Case Else: AffecteFX = "Couleur non répertoriée"
 End Select
End Function

Cordialement,

Bonsoir Pedro,

Cela ne change rien, je dois valider chaque formule pour que le résultat s'adapte si la couleur source change.... :(

Une autre idée?

Sandr

Bonjour,

Le changement d'une couleur n'est pas interprété par Excel comme un évènement nécessitant d'actualiser les formules.
Par ailleurs, il n'est pas non plus détectable par la macro Worksheet_change qui permet d'exécuter un code en fonction d'une modification telle qu'un changement de valeur d'une cellule.

De même, Application.Volatile sugéré par xorsankukai (salut au passage ! ) ne permet probablement pas non plus de le détecter. En effet, celui-ci force le recalcul des formules suite à la modification de n'importe quelle valeur du classeur, qu'elle concerne une cellule dont dépend la fonction en question ou pas.

Si la couleur est modifiée manuellement, voilà une tentative à mettre dans le module VBA de la feuille en question :

Dim Couleur As Long, Cel As Range
Private Sub Worksheet_Activate()

Couleur = ActiveCell.Interior.Color: Set Cel = ActiveCell 'Garde en mémoire la dernière cellule + dernière couleur de fond

End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

On Error Resume Next
If Cel.Interior.Color <> Couleur Then Calculate 'Actualise les formules
Couleur = Target.Interior.Color: Set Cel = Target 'Actualise la dernière cellule active + dernière couleur de fond

End Sub

Note : ce code actualise les formules après un changement de cellule active, uniquement si la couleur à changé. Si ça ne fonctionne pas, on peut actualiser les formules dans tous les cas, mais si le classeur en contient beaucoup, il sera ralenti.

Pour enchainer sur ma réponse précédente, je déconseille d'utiliser les couleurs comme des informations à part entière, car Excel (et autres tableurs) ne sont pas franchement conçus pour ça... Les couleurs sont davantage utilisées pour de la mise en forme, et même si on peut faire des choses avec VBA, ça rend le fichier complexe et moins abordable pour un utilisateur lambda.

Merci Pedro pour les solutions.

J'ai finalement opté pour une petite macro qui permet de faire F9 sur l'ensemble des cell de destination.

Bonne journée

Sandr

Rechercher des sujets similaires à "macro vba test couleur"