Macro avec cellule de mise en forme conditionnelle
Résolu/Fermé
Saucisson_47
Messages postés
11
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
13 avril 2018
-
23 mars 2018 à 14:39
Saucisson_47 Messages postés 11 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 13 avril 2018 - 3 avril 2018 à 09:04
Saucisson_47 Messages postés 11 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 13 avril 2018 - 3 avril 2018 à 09:04
A voir également:
- Macro avec cellule de mise en forme conditionnelle
- Mise en forme conditionnelle excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Dans la présentation à télécharger, sarah avait encadré directement le titre de certaines diapositives avant d’automatiser cette mise en forme pour tout le document. sur quelles diapositives avait-elle encadré directement le titre ? ✓ - Forum Bureautique
- Macro word - Guide
- Mise en forme conditionnelle excel si autre cellule non vide ✓ - Forum Excel
6 réponses
Frenchie83
Messages postés
2240
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
11 août 2023
338
24 mars 2018 à 07:18
24 mars 2018 à 07:18
Bonjour
Comme ceci, si j'ai bien compris
https://www.cjoint.com/c/HCygsj3i7ww
Cdlt
Comme ceci, si j'ai bien compris
https://www.cjoint.com/c/HCygsj3i7ww
Cdlt
Saucisson_47
Messages postés
11
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
13 avril 2018
27 mars 2018 à 09:54
27 mars 2018 à 09:54
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
Saucisson_47
Messages postés
11
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
13 avril 2018
27 mars 2018 à 12:05
27 mars 2018 à 12:05
Je vous mets mon fichier en ligne
https://www.cjoint.com/c/HCBkd2WKqBx
https://www.cjoint.com/c/HCBkd2WKqBx
Frenchie83
Messages postés
2240
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
11 août 2023
338
28 mars 2018 à 03:48
28 mars 2018 à 03:48
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
Saucisson_47
Messages postés
11
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
13 avril 2018
28 mars 2018 à 09:25
28 mars 2018 à 09:25
Bonjour et merci,
Cela fonctionne chez vous sur le fichier que je vous ai joint ? moi ça ne fonctionne pas...
Cdt
Cela fonctionne chez vous sur le fichier que je vous ai joint ? moi ça ne fonctionne pas...
Cdt
Saucisson_47
Messages postés
11
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
13 avril 2018
28 mars 2018 à 11:47
28 mars 2018 à 11:47
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
Frenchie83
Messages postés
2240
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
11 août 2023
338
29 mars 2018 à 04:47
29 mars 2018 à 04:47
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
Saucisson_47
Messages postés
11
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
13 avril 2018
29 mars 2018 à 09:58
29 mars 2018 à 09:58
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?
Frenchie83
Messages postés
2240
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
11 août 2023
338
29 mars 2018 à 11:19
29 mars 2018 à 11:19
RE
Voici avec les modifs
https://www.cjoint.com/c/HCDjsI4xSMw
Cdlt
Voici avec les modifs
https://www.cjoint.com/c/HCDjsI4xSMw
Cdlt
Saucisson_47
Messages postés
11
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
13 avril 2018
3 avril 2018 à 09:04
3 avril 2018 à 09:04
Bonjour,
ça fonctionne mieux en effet !!
Merci encore pour votre aide !
ça fonctionne mieux en effet !!
Merci encore pour votre aide !