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 -
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:
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:
Voilà avez vous une idée? Merci d'avance pour les suggestions.
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
-
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 -
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. -
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 -
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 -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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. -
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 ?