Excel et coloriage de cellules en VBA

Fermé
pietreo Messages postés 3 Date d'inscription lundi 29 mars 2010 Statut Membre Dernière intervention 30 mars 2010 - 29 mars 2010 à 18:19
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 31 mai 2011 à 11:44
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.

A voir également:

6 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
Modifié par eriiic le 29/03/2010 à 20:01
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
pietreo Messages postés 3 Date d'inscription lundi 29 mars 2010 Statut Membre Dernière intervention 30 mars 2010
30 mars 2010 à 17:58
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
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
30 mars 2010 à 09:13
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
pietreo Messages postés 3 Date d'inscription lundi 29 mars 2010 Statut Membre Dernière intervention 30 mars 2010
30 mars 2010 à 18:03
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
30 mars 2010 à 19:12
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Djorge84 Messages postés 2 Date d'inscription jeudi 14 avril 2011 Statut Membre Dernière intervention 31 mai 2011
31 mai 2011 à 11:32
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
Modifié par eriiic le 31/05/2011 à 11:46
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