Macro avec cellule de mise en forme conditionnelle
Résolu
Saucisson_47
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
Saucisson_47 Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
Saucisson_47 Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je ne suis pas un expert en macro (je me contente de reprendre des macros sur internet que j'adapte à mon besoin...) mais là, malgré pas mal de recherches, je n'arrive pas à solutionner mon problème..
Je souhaite taper dans mes cellules A38 à A59 un nom (dans mon exemple : A43 = "RTT") et de lui affecter un code couleur (exemple : orange). Ce code couleur s'applique à la plage de cellules A5:AK35. Cela fonctionne bien lorsque que dans ma plage A5:AK35 la cellule est vide et que je tape "RTT" ou si je rentre dans chaque cellule et que je fais "entrée". Mon souci arrive lorsque je souhaite changer de code couleur pour mes cellules qui contiennent RTT : si je change la couleur de ma cellule A43, les cellules contenant RTT dans ma plage A5:AK35 ne changent pas de couleur (elles restent orange)... Il faut que je rentre dans chacune d'elles pour que la couleur évolue...
J'ai essayé les fonctions calculate, application.volatile, enablecalculation mais cela ne fonctionne pas ou je les ai mal placées.
J'ai aussi essayé d'affecter dans le premier range uniquement la plage A5:AK35 mais le résultat est le même...
J'ai inséré le code suivant que j'ai mis dans ma feuille concernée.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Application.Intersect(Target, Range("A38:A59,A5:AK35")) Is Nothing Then
If Target.Value = Range("A43") Then
Target.Interior.Color = Range("A43").Interior.Color
ElseIf Target.Value = Range("A39") Then
Target.Interior.Color = Range("A39").Interior.Color
ElseIf Target.Value = Range("A42") Then
Target.Interior.Color = Range("A42").Interior.Color
ElseIf IsNumeric(Target.Value) And Target.Value <> "" Then
Target.Interior.Color = Range("A38").Interior.Color
Else
Target.Interior.Color = xlNone
End If
End If
End Sub
Pouvez-vous m'aider de manière à ce que la couleur change toute seule sans avoir à repasser cellule par cellule...
Merci par avance
Cdt
Mathieu
Je ne suis pas un expert en macro (je me contente de reprendre des macros sur internet que j'adapte à mon besoin...) mais là, malgré pas mal de recherches, je n'arrive pas à solutionner mon problème..
Je souhaite taper dans mes cellules A38 à A59 un nom (dans mon exemple : A43 = "RTT") et de lui affecter un code couleur (exemple : orange). Ce code couleur s'applique à la plage de cellules A5:AK35. Cela fonctionne bien lorsque que dans ma plage A5:AK35 la cellule est vide et que je tape "RTT" ou si je rentre dans chaque cellule et que je fais "entrée". Mon souci arrive lorsque je souhaite changer de code couleur pour mes cellules qui contiennent RTT : si je change la couleur de ma cellule A43, les cellules contenant RTT dans ma plage A5:AK35 ne changent pas de couleur (elles restent orange)... Il faut que je rentre dans chacune d'elles pour que la couleur évolue...
J'ai essayé les fonctions calculate, application.volatile, enablecalculation mais cela ne fonctionne pas ou je les ai mal placées.
J'ai aussi essayé d'affecter dans le premier range uniquement la plage A5:AK35 mais le résultat est le même...
J'ai inséré le code suivant que j'ai mis dans ma feuille concernée.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Application.Intersect(Target, Range("A38:A59,A5:AK35")) Is Nothing Then
If Target.Value = Range("A43") Then
Target.Interior.Color = Range("A43").Interior.Color
ElseIf Target.Value = Range("A39") Then
Target.Interior.Color = Range("A39").Interior.Color
ElseIf Target.Value = Range("A42") Then
Target.Interior.Color = Range("A42").Interior.Color
ElseIf IsNumeric(Target.Value) And Target.Value <> "" Then
Target.Interior.Color = Range("A38").Interior.Color
Else
Target.Interior.Color = xlNone
End If
End If
End Sub
Pouvez-vous m'aider de manière à ce que la couleur change toute seule sans avoir à repasser cellule par cellule...
Merci par avance
Cdt
Mathieu
A voir également:
- Macro avec cellule de mise en forme conditionnelle
- Mise en forme conditionnelle excel - Guide
- Mise en forme tableau word - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Mise a jour chrome - Accueil - Applications & Logiciels
- Mise en forme tableau croisé dynamique - Guide
6 réponses
Bonjour et merci Frenchie pour votre réponse.
En fait, c'est presque ça. Il me faudrait un mix de ma macro initiale et de la vôtre... Seulement, il me faudrait du dynamisme dans les saisies effectuées dans les cellules A38:A59.
En résumé, il me faudrait une plage de légende évolutive (la base de légende étant A38:A59) sur les saisies et sur les couleurs qui s'appliquerait sur ma plage A5:AK35
Dans cette plage de cellules (A38:A59), je peux écrire RTT, CA, CT, etc... Mais demain je pourrai changer et mettre Pierre Paul Jacques à la place et intervertir les couleurs. Je retrouve ces différentes possibilités dans ma plage A5:AK35. Je souhaite donc colorer les différents éléments notés dans ma plage A5:Ak35 de la même couleur que celle définie dans ma plage A38:A59 et aussi qu'il y ait la possibilité de changer la couleur de base dans cette plage A38:A59
Merci par avance pour votre réponse
En fait, c'est presque ça. Il me faudrait un mix de ma macro initiale et de la vôtre... Seulement, il me faudrait du dynamisme dans les saisies effectuées dans les cellules A38:A59.
En résumé, il me faudrait une plage de légende évolutive (la base de légende étant A38:A59) sur les saisies et sur les couleurs qui s'appliquerait sur ma plage A5:AK35
Dans cette plage de cellules (A38:A59), je peux écrire RTT, CA, CT, etc... Mais demain je pourrai changer et mettre Pierre Paul Jacques à la place et intervertir les couleurs. Je retrouve ces différentes possibilités dans ma plage A5:AK35. Je souhaite donc colorer les différents éléments notés dans ma plage A5:Ak35 de la même couleur que celle définie dans ma plage A38:A59 et aussi qu'il y ait la possibilité de changer la couleur de base dans cette plage A38:A59
Merci par avance pour votre réponse
Bonjour
Ceci devrait aller
Dans le module "Matrice"
Dans le module 1
Cdlt
Ceci devrait aller
Dans le module "Matrice"
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Not Intersect(Target, Range("A38:A59")) Is Nothing Then Coul = Target.Interior.Color Valeur = Target Appliquer End If End Sub
Dans le module 1
Public Coul As Long Public Valeur As String Sub Appliquer() For Each cell In Range("A5:AK35") If cell.Value = Valeur Then cell.Interior.Color = Coul Next End Sub
Cdlt
Je suis arrivé à faire évoluer ma macro même si elle n'est pas optimale en fonction de vos conseils.
J'ai remplacé Worksheet_change par worksheet_selectionchange.
Maintenant, le changement est presque automatique... mais après avoir modifier la couleur dans la plage A38:A59, il faut que je sélectionne la cellule modifiée avec la souris ou les flèches pour que le changement s'applique à la plage A5:Ak:35... En ajoutant un simple range cela ne fonctionne pas...
Je vous mets ci-dessous ma macro
Private Sub Worksheet_Selectionchange(ByVal Target As Range)
On Error Resume Next
If Target.Count > 1 Then Exit Sub
If Not Application.Intersect(Target, Range("A5:AK35,A38:A59")) Is Nothing Then
If Target.Value = Range("A43") Then
Target.Interior.Color = Range("A43").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A39") Then
Target.Interior.Color = Range("A39").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A40") Then
Target.Interior.Color = Range("A40").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A41") Then
Target.Interior.Color = Range("A41").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A42") Then
Target.Interior.Color = Range("A42").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A44") Then
Target.Interior.Color = Range("A44").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A45") Then
Target.Interior.Color = Range("A45").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A46") Then
Target.Interior.Color = Range("A46").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A47") Then
Target.Interior.Color = Range("A47").Interior.Color
ElseIf Target.Value = Range("A48") Then
Target.Interior.Color = Range("A48").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A49") Then
Target.Interior.Color = Range("A49").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A50") Then
Target.Interior.Color = Range("A50").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A51") Then
Target.Interior.Color = Range("A51").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A52") Then
Target.Interior.Color = Range("A52").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A53") Then
Target.Interior.Color = Range("A53").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A54") Then
Target.Interior.Color = Range("A54").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A55") Then
Target.Interior.Color = Range("A55").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A56") Then
Target.Interior.Color = Range("A56").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf IsNumeric(Target.Value) And Target.Value <> "" Then
Target.Interior.Color = Range("A38").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
Else
Target.Interior.Color = xlNone
End If
End If
End Sub
J'ai remplacé Worksheet_change par worksheet_selectionchange.
Maintenant, le changement est presque automatique... mais après avoir modifier la couleur dans la plage A38:A59, il faut que je sélectionne la cellule modifiée avec la souris ou les flèches pour que le changement s'applique à la plage A5:Ak:35... En ajoutant un simple range cela ne fonctionne pas...
Je vous mets ci-dessous ma macro
Private Sub Worksheet_Selectionchange(ByVal Target As Range)
On Error Resume Next
If Target.Count > 1 Then Exit Sub
If Not Application.Intersect(Target, Range("A5:AK35,A38:A59")) Is Nothing Then
If Target.Value = Range("A43") Then
Target.Interior.Color = Range("A43").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A39") Then
Target.Interior.Color = Range("A39").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A40") Then
Target.Interior.Color = Range("A40").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A41") Then
Target.Interior.Color = Range("A41").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A42") Then
Target.Interior.Color = Range("A42").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A44") Then
Target.Interior.Color = Range("A44").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A45") Then
Target.Interior.Color = Range("A45").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A46") Then
Target.Interior.Color = Range("A46").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A47") Then
Target.Interior.Color = Range("A47").Interior.Color
ElseIf Target.Value = Range("A48") Then
Target.Interior.Color = Range("A48").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A49") Then
Target.Interior.Color = Range("A49").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A50") Then
Target.Interior.Color = Range("A50").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A51") Then
Target.Interior.Color = Range("A51").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A52") Then
Target.Interior.Color = Range("A52").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A53") Then
Target.Interior.Color = Range("A53").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A54") Then
Target.Interior.Color = Range("A54").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A55") Then
Target.Interior.Color = Range("A55").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf Target.Value = Range("A56") Then
Target.Interior.Color = Range("A56").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
ElseIf IsNumeric(Target.Value) And Target.Value <> "" Then
Target.Interior.Color = Range("A38").Interior.Color
For Each cell In Range("A5:AK35")
If cell.Value = Target.Value Then cell.Interior.Color = Target.Interior.Color
Next
Else
Target.Interior.Color = xlNone
End If
End If
End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Oui , "Private Sub Worksheet_Selectionchange(ByVal Target As Range)" est plus approprié que "Private Sub Worksheet_Change(ByVal Target As Range)" mais de toute façon il faudra quitter puis revenir sur la cellule pour que le changement soit pris en compte.
Dans la ligne "If Not Application.Intersect(Target, Range("A5:AK35, A38:A59")) Is Nothing Then ", pourquoi sélectionnez-vous la plage "A5:AK35" qui n'est que la zone ou doit s'appliquer le changement? La seule plage à contrôler est "A38:A59". Donc "If Not Application.Intersect(Target, Range("A38:A59")) Is Nothing Then ", suffit.
Ensuite, pourquoi avoir ajouter toutes ces lignes qui contrôlent chaque cellule de la plage A58 à A59? Dans le code que j'avais fourni, je faisais appel à la macro "Appliquer" (seulement 3 lignes, tout en haut du le module 1) qui faisait exactement la même chose.
Je vous retourne le fichier.
https://www.cjoint.com/c/HCDcTkbXEqw
Cdlt
Oui , "Private Sub Worksheet_Selectionchange(ByVal Target As Range)" est plus approprié que "Private Sub Worksheet_Change(ByVal Target As Range)" mais de toute façon il faudra quitter puis revenir sur la cellule pour que le changement soit pris en compte.
Dans la ligne "If Not Application.Intersect(Target, Range("A5:AK35, A38:A59")) Is Nothing Then ", pourquoi sélectionnez-vous la plage "A5:AK35" qui n'est que la zone ou doit s'appliquer le changement? La seule plage à contrôler est "A38:A59". Donc "If Not Application.Intersect(Target, Range("A38:A59")) Is Nothing Then ", suffit.
Ensuite, pourquoi avoir ajouter toutes ces lignes qui contrôlent chaque cellule de la plage A58 à A59? Dans le code que j'avais fourni, je faisais appel à la macro "Appliquer" (seulement 3 lignes, tout en haut du le module 1) qui faisait exactement la même chose.
Je vous retourne le fichier.
https://www.cjoint.com/c/HCDcTkbXEqw
Cdlt
Merci pour votre réponse. En fait, en ajoutant vos macros, les cases devenaient noires... donc du coup j'ai bricolé avec votre 2ème macro (celle à insérer dans un module)... mais aujourd'hui ça marche...
Par contre, quand je modifie une case dans ma plage A5:AK35, il faut que j'aille passer sur la légende pour que la couleur s'applique. Il n'y a pas moyen pour que la macro se lance sans avoir à repasser sur les cellules?
Par contre, quand je modifie une case dans ma plage A5:AK35, il faut que j'aille passer sur la légende pour que la couleur s'applique. Il n'y a pas moyen pour que la macro se lance sans avoir à repasser sur les cellules?