Excel et coloriage de cellules en VBA

pietreo Messages postés 3 Statut Membre -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Je souhaite colorier l'arrière plan d'une seule cellule en vérifiant une condition
dans 2 autres cellules ex: si B2<A2 colorier l'arrière plan de la cellule C2 en rouge
sinon en vert
jusque à maintenant j'utilisais le code suivant:

Private sub. Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If [Feuil1!b2] < [Feuil1!a2] Then
[Feuil1!c2].Interior.Color = RGB(255, 0, 0)
Else: [Feuil1!c2].Interior.Color = RGB(51, 150, 0)
End If
Application.EnableEvents = True
End Sub


Je souhaite maintenant plutôt coder la chose de la façon suivante:
car la personne qui va utiliser le fichier ne doit pas modifier le code VBA
et que la fonctionnalité soit préservée si elle fait un copier-coller:
à l'intérieur de la cellule c2
=SI(B2<A2;COLORCELL(C2:C2;3);COLORCELL(C2:C2;4))

par contre quand je définis ma fonction dans VBA rien ne se passe sur
ma cellule c2 il y a une alerte avec réf inconnue??

ma fonction:
Sub ColorCell()
Dim Plage As Range
Dim couleur As Integer
Plage.Interior.ColorIndex = couleur
End Sub


Voilà avez vous une idée? Merci d'avance pour les suggestions.

6 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    si tu écris =SI(B2<A2;COLORCELL(C2:C2;3);COLORCELL(C2:C2;4))
    c'est que tu veux faire une fonction personnalisée.
    Une fonction personnalisée se déclare avec function xxx et non sub xxx.
    Le problème c'est qu'une fonction personnalisée ne peut en aucun cas modifier l'environnement (donc une couleur de fond), elle retourne une valeur c'est tout.

    Mais si tu as mis une couleur de fond par macro et que tu fais un copier-coller ensuite la couleur est emmenée aussi....
    eric
    1
    1. pietreo Messages postés 3 Statut Membre
       
      Merci pour cette réponse,
      effectivement j'ai lu que les fonctions ne pouvaient modifier l'environnement je vais essayer
      de trouver un "workaround" et posterai si je trouves une solution.
      0
  2. chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 313
     
    Bonjour,

    dans la formule de cellule, tu utilises une formulle (COLORCELL) qui a 2 paramètres. Or ta fonction de départ (que tu as malheureusement défini en tant que Sub alors qu'il faudrait définir en Function) n'a pas de paramètres... Je pense que c'est ce qui peut expliquer le fait que ta couleur ne s'ajoute pas sur ta cellule.

    Cordialement.
    0
  3. pietreo Messages postés 3 Statut Membre
     
    Merci,
    Oui je sais j'ai copier collé un peu vite mais le code que je voulais mettre était effectivement défini sous la forme d'un fonction:
    Public Function ColorCell(Plage As Range, couleur As Integer)
    Application.Volatile
    Plage.Interior.ColorIndex = couleur
    End Function
    

    Ce code ne marche pas mais j'ai une explication comme me l'a signalé eriiic avec la notion d'environement
    j'essaie de trouver un astuce.
    Merci en core
    0
  4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Re,

    Cherche un peu si tu veux mais n'y perds pas trop de temps. L'aide d'excel est très claire là-dessus...
    Je pense qu'il faut que tu cherches une autre approche.

    Limites des fonctions complémentaires
    - Attribution
    VBA pour Excel impose des limites très strictes aux fonctions appelées à l'intérieur de formules de feuilles de calcul. Leur seule attribution est de renvoyer une valeur à la cellule hôte. Ces fonctions ne peuvent effectuer aucune autre action susceptible de modifier le contenu du classeur.
    En particulier, une fonction complémentaire ne peut pas modifier la valeur d'autres cellules que celles où elles ont été saisies. De même, il est impossible de renommer une feuille, déplacer une plage, changer le format d'une cellule, etc. à l'intérieur d'une fonction complémentaire. Les seules actions autorisées sont celles qui n'ont aucun effet sur le contenu du classeur, comme par exemple afficher un message par MsgBox.


    eric
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Djorge84 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonjour,

    je rebondis sur ce post car je cherchais également depuis quelques temps à colorer certaines cellules dans le cadre d'une fonction personnalisée.

    Si cela n'est pas possible car l'environnement (donc une couleur de fond) ne peut pas être modifiée à partir d'une fonction personnalisée, y-a-t-il une alternative / solution de remplacement ?

    Merci de vos réponses.
    0
  7. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Il faut que tu utilises un évènement (change, selectionchange, activate,...) et que dans le code appelé tu recalcules et applique les couleurs sur les cellules concernées.
    Bien sûr si tu as plusieurs centaines de cellules concernées ça va ralentir l'utilisation, essaie de restreindre aux seules cellules susceptibles d'être concernées.

    eric

    PS : tu as pensé à la mise en forme conditionnelle ?
    0