Excel -- Problème sur une mise en forme conditionnelle

Résolu/Fermé
judithcle Messages postés 19 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 30 novembre 2015 - 10 oct. 2012 à 09:46
judithcle Messages postés 19 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 30 novembre 2015 - 12 oct. 2012 à 11:32
Bonjour,

J'utilise à mon travail Excel 2003.

J'ai récupéré le fichier situé sur cette page : https://www.commentcamarche.net/faq/16784-excel-mises-en-forme-conditionnelles-illimitees dans le but de créer un planning pour mon travail, qui permette qu'on puisse mettre semaine après semaine différents champs parmi une liste, tout en conservant la forme du tableau.

Ce planning comporte des couleurs différentes selon les choix sélectionnés, c'est pourquoi le fichier proposé sur cette page était parfait pour moi. Comme je n'y connais rien en Visual Basic, j'ai repris ce fichier, je l'ai renommé, et j'ai fait un copié-collé de mon planning en modifiant chaque champ pour pouvoir le faire fonctionner.

Et après avoir fait tout cela, ça marchait parfaitement.

Mais à un moment donné, je me suis rendue compte que, après quelques utilisations, tout d'un coup les changements de couleurs ne fonctionnaient plus sur mon fichier. Il semblerait qu'il y ait quelque chose qui affecte, peut-être, le fichier utilisé pour permettre la macro, car en rouvrant le fichier original trouvé sur la page de commentcamarche.net cité plus haut et en le réessayant, j'avais le même problème : plus de couleurs (le champ que je sélectionne se modifie bien selon mon choix, mais la couleur de la cellule reste celle qui était mise avant, au lieu d'avoir la nouvelle couleur correspondant au choix indiqué).

Si je ferme les fichiers et que je les rouvre, j'ai toujours ce problème. Par contre, si je ferme ma session et que je la redémarre, le fichier d'origine (cité plus haut) marche à nouveau correctement.

Pourriez-vous m'aider à résoudre ce problème ?

Je vous mets des liens vers deux fichiers :
- un fichier intitulé "Planning équipe - version forum", où j'ai enlevé toutes les autres pages de planning excepté celle de cette semaine, en exemple. Ce fichier marche au démarrage de la session.
http://www.fileden.com/files/2012/10/10/3355749/Plannings%20%C3%A9quipe%20-%20version%20forum.xls

- un fichier intitulé "PLANNING CVE 2012 - forum" : il s'agit à la base du même fichier, sauf qu'il a été renommé par une collègue. En principe elle n'a pas dû changer grand chose à part peut-être des plages de planning. C'est en ouvrant ce fichier ce matin que, du coup, les couleurs ne marchaient plus, et qu'après ça ne marchait pas non plus sur le fichier original (le premier que je mets en fichier joint).
Il semblerait que ce deuxième fichier ait une erreur quelque part dans le code, qui fasse que chaque fois qu'on l'ouvre le code ne fonctionne pas pour les couleurs, et du coup modifie également les actions utilisées pour l'autre fichier, si on l'ouvre après avoir ouvert celui-ci.
http://www.fileden.com/files/2012/10/10/3355749/PLANNING%20CVE%202012%20-%20forum.xls

J'espère que vous arriverez à comprendre mon problème, et que vous pourrez le constater également chez vous (à moins que ce problème ne soit lié à Excel 2003 ? Le fichier d'origine était prévu pour Excel 2007...).

Merci d'avance pour votre aide et bonne journée,

Judith

A voir également:

9 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
10 oct. 2012 à 11:43
bonjour,

sans trop avoir regardé copie cette macro et effectue la pour relancer les macros

sub depannage_events()
   Application.EnableEvents = True
end sub 


et je rerajouterais en fin du code
     ....

     End If
    Next i
    Application.EnableEvents = True
    Exit Sub
    
fin:
      Application.EnableEvents = True
    
End Sub


0
judithcle Messages postés 19 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 30 novembre 2015
10 oct. 2012 à 11:57
Merci beaucoup Michel. Mais par contre, comme je n'y connais pas grand chose en programmation Excel, est-ce que je mets ça sur le fichier qui s'ouvre lorsque je vais dans Outils / Macro / Visual Basic Editor ?

Le fichier qui s'affiche s'appelle "Worksheet", et son contenu est :

"Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub"

Est-ce que je rajoute ton code au milieu de ces deux lignes, ou bien dans un autre fichier que je trouverai ailleurs ?...

Merci d'avance pour ton aide,

Judith
0
judithcle Messages postés 19 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 30 novembre 2015
10 oct. 2012 à 12:13
Oups ! Je crois que j'ai compris.
J'ai d'abord fait une nouvelle macro, où j'ai mis ton premier code, puis j'ai utilisé l'éditeur et je suis allée dans le fichier "ThisWorkbook" où j'ai retrouvé le code qui avait été fait en premier dans le fichier d'origine pour créer la macro. J'ai rajouté ton code à la fin.

Par contre, du coup, quand j'ai voulu tester ce que ça donnait, j'ai ce message d'erreur :
"Erreur de compilation : Seuls des commentaires peuvent apparaître après End Sub, End Function, ou End Property".
Du coup j'ai enlevé le End Sub après lequel j'ai mis ton code, mais du coup j'ai cette autre erreur :
"Erreur de compilation : End If sans bloc IF".
Donc je n'ai pas dû mettre ton code au bon endroit...

Voilà l'ensemble de ce que j'ai, te serait-il possible de me corriger le code pour qu'il soit bon ?

Merci d'avance,

Judith

Code :

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim i As Integer, j As Long, Mfc As FormatCondition, c As Range, Ws1 As Worksheet
On Error GoTo fin ' en cas de mauvaise manipulation, ça plante sur l'ordre suivant
Application.EnableEvents = False
Set Ws1 = Sheets("MFC")
For i = 1 To Target.FormatConditions.Count
Set Mfc = Target.FormatConditions(i)
If UCase(Left(Mfc.Formula1, 7)) = "=MA_MFC" Then
Ws1.Range("A1").Value = Target.Value
Set c = Nothing
For j = 2 To Ws1.Range("A65536").End(xlUp).Row
If Ws1.Range("A" & j) = True Then
Set c = Ws1.Range("A" & j)
Exit For
End If
Next j
If c Is Nothing Then Set c = Ws1.Range("A1")
c.Copy
Target.PasteSpecial (xlPasteFormats)
Application.CutCopyMode = False
End If
Next i
Application.EnableEvents = True
fin:
On Error GoTo 0

End If
Next i
Application.EnableEvents = True
Exit Sub

fin:
Application.EnableEvents = True

End Sub
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié par michel_m le 10/10/2012 à 12:30
supprime ces lignes:
fin: 
On Error GoTo 0 
End If 
Next i 
Application.EnableEvents = True 
Exit Sub 

pour obtenir
If c Is Nothing Then Set c = Ws1.Range("A1") 
c.Copy 
Target.PasteSpecial (xlPasteFormats) 
Application.CutCopyMode = False 
End If 
Next i 

fin: 
Application.EnableEvents = True 

End Sub
0
judithcle Messages postés 19 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 30 novembre 2015
10 oct. 2012 à 13:08
C'est fait, merci.
Pour l'instant, ça ne marche toujours pas.
Mais je me dis que pour l'autre macro que tu m'avais dit de créer, j'ai dû la faire au mauvais endroit.
Je viens de retrouver le code que tu m'avais donné dans le fichier MFC (= là où sont les éléments utilisés par la macro pour faire mon planning).
Ce fichier, intitulé "Feuil2 (MFC)", a le code suivant :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Sub depannage_events()
Application.EnableEvents = True
End Sub

End If
Next i
Application.EnableEvents = True
Exit Sub

fin:
Application.EnableEvents = True

End Sub


Est-ce que c'est bon, ou pas ??

Sachant que pour les autres onglets de mon fichier Excel, j'ai juste le code de base :

"Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub"

Est-ce qu'il ne faudrait pas que le code "sub depannage" soit dans chaque page ? (Ou ailleurs... ?)

Merci,

Judith
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
10 oct. 2012 à 14:18
Non, absolument pas :o)

je n'ai pas 2003 et pas beaucoup de temps cet après midi et serait absent jusqu'à lundi...

Je demande à un contributeur ayant 2003 de venir t'aider
0
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 427
10 oct. 2012 à 15:25
bonjour

michel vient de me contacter,
j'ai vaguement compris qu'il s'agit d'une histoire de couleur mais, peux tu m'expliquer en quelques mots ce que tu souhaites obtenir dans la feuille 08-12 oct.

bonne suite
0
judithcle Messages postés 19 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 30 novembre 2015
10 oct. 2012 à 16:32
Bonjour

Merci pour ton aide.

Ben en fait, sur cette feuille on doit pouvoir choisir un des choix possibles, qui se trouvent dans la liste de l'onglet "MFC".

Dans cet onglet MFC, j'ai mis des couleurs et à côté les intitulés des champs à sélectionner.

Actuellement, sur la feuille 08-12 oct., on a déjà un planning qui a été fait, par le biais de ces choix (je l'avais fait à un moment où ça marchait).
Mais à présent, si je veux changer l'une quelconque des cellules de cette page, la couleur de la cellule reste celle qui était auparavant déjà mise pour cette cellule-là, et j'ai juste le contenu texte de la cellule qui change. C'est ce qui se passe sur mon fichier ""PLANNING CVE 2012 - forum.xls".
L'autre fichier ("Planning équipe - version forum"), a priori, fonctionne comme je le souhaite : quand on clique sur une cellule pour la changer et qu'on choisit un autre champ, la couleur change avec le champ.

J'ai constaté sur le bureau que j'utilise que, si j'ouvre d'abord ce deuxième fichier qui fonctionne, il marche bien. Mais si j'ouvre ensuite le premier, qui ne marche pas, et qu'ensuite j'ouvre le deuxième (même si le premier a été fermé entre-temps), alors le deuxième ne marche plus.

Si je ferme ma session utilisateur et que je la rouvre, et que je rouvre le deuxième qui ne marchait plus (mais qui marchait au début... je sais c'est un peu compliqué !), là il marche à nouveau (par contre, le premier ne marche toujours pas).

A la base, j'avais fait un fichier hier, qui fonctionnait. Mais après l'avoir utilisé un peu, il ne marchait plus, et j'avais dû le refaire en repartant du fichier d'origine trouvé sur ce site, pour qu'il fonctionne à nouveau.
Ce matin, j'ai constaté qu'il ne marchait plus. Quelqu'un d'autre l'a peut-être ouvert entre-temps, du coup je me demandais s'il n'y avait pas quelque chose dans le code qui fait que cette histoire de couleurs ne marche plus si on fait telle ou telle manipulation, ou je ne sais quoi d'autre...

Le problème, c'est que je n'y connais rien du tout en visual basic (je connais plutôt les langages web...), du coup je ne peux pas réussir à trouver de solution.

Merci d'avance de ton aide...

Judith
0

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

Posez votre question
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 427
10 oct. 2012 à 16:23
re

une tentative plus simple (sans utiliser de MFC) avec ce que j'ai compris
https://www.cjoint.com/?3JkqwarJooU

bonne suite
0
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 427
10 oct. 2012 à 16:49
ou ceci qui évite de colorer une cellule qui n'est pas dans le plannig
https://www.cjoint.com/?3JkqWk3Io9i
0
judithcle Messages postés 19 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 30 novembre 2015
10 oct. 2012 à 21:37
Super, ça marche !

Merci beaucoup d'avoir pris le temps de faire ça pour moi.

Trois questions cependant :

- Quelle est la différence entre le premier et le deuxième fichiers que tu as faits ? (Tu as mis que ça évitait de colorer une cellule qui n'est pas dans le planning : que veux-tu dire exactement par là ??)

- J'ai voulu allonger le tableau des couleurs en mettant deux lignes de plus (dans l'onglet "Couleurs"), mais après l'avoir fait, je ne vois pas ces choix dans la liste de sélection de mon planning, lorsque je veux choisir comment remplir une case. Faut-il que je modifie le code en conséquence ?? Ou que dois-je faire d'autre ?

- A priori, seule la couleur de la cellule est reprise, pas celle du texte (j'avais mis du blanc et du bleu sur les deux cellules de couleurs violettes).
Bon, ce n'est pas franchement grave. Je suppose qu'il y aurait un moyen de rajouter ça, tu n'as sans doute simplement pas vu qu'il y avait des différences dans mes choix ? Enfin bon, si jamais ça te prenait très peu de temps pour rajouter ce paramètre, n'hésite pas. Sinon, ça n'est pas grave.

En tout cas merci d'avoir fait tout ça.

Et puis encore bravo pour le résultat correspondant à mon besoin !!

Bonne soirée (ou journée selon l'heure),

Judith
0
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 427
11 oct. 2012 à 10:14
bonjour

1. l'instruction (version F4)
If Not Intersect(Target, Sh.Range(planning)) Is Nothing Then
limitera l'exécution de la procedure à la plage planning définie par la constante planning en début de code
si tu mets un 5 en K13 (hors planning) le format de K13 ne sera pas modifié
2. je n'ai effectivement pas pensé à redéfinir la plage lst_noms. Il faut la rendre "dynamique" de façon qu'un ajout/retrait soit automatiquement pris en compte
(voir insertion/nom/definir)
=DECALER(Couleurs!$A$2;0;0;NBVAL(Couleurs!$A$2:$A$200);1)
3. je n'avais pas remarqué les couleurs de police
https://www.cjoint.com/?3JlkhzOjcBO

bonne journée
0
judithcle Messages postés 19 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 30 novembre 2015
12 oct. 2012 à 09:19
Merci beaucoup !!

Je n'ai pas eu le temps de me pencher sur ça hier après ton commentaire, c'est pour ça que je ne te réponds que maintenant.

Du coup, j'ai pu augmenter manuellement la plage lst_noms par insertion/nom/definir.

Par contre, la ligne de code que tu me donnes pour que ça s'augmente ou s'enlève automatiquement, elle est à mettre où ?
Car comme je n'ai pas voulu refaire tout mon fichier Excel que j'ai pas mal modifié par rapport à la version que je t'avais donnée, j'ai juste fait un copier/coller du code de la page "ThisWorkbook", ce qui fait que la modifications pour les couleurs de police fonctionne, mais je ne vois nulle part dans ton fichier Excel le code "=DECALER(Couleurs!$A$2;0;0;NBVAL(Couleurs!$A$2:$A$200);1) " (pourtant, ça marche sur ton fichier - mais pas sur le mien puisque je n'ai pas su où le mettre...).

Sinon, ton point 1. est intéressant pour moi, car il se peut que j'aie à rajouter une ligne pour une personne supplémentaire prochainement, ça me permet de savoir comment faire pour augmenter les plages du tableau.

Merci encore !!!

Bonne journée,

Judith
0
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 427
Modifié par ccm81 le 12/10/2012 à 09:43
1. Pour ajouter un nom dans le planning,
je suppose que tu as compris qu'il fallait ensuite modifier la constante planning du code

2. tu n'as pas bien lu le point 2.
Pas besoin de toucher au code,
C'est simplement la définition de la plage lst_noms (celle qui est reprise dans la liste déroulante des feuilles "date") qu'il faut rendre dynamique
Pour voir les noms de plage de la feuille :
Tu te mets dans la feuille Couleurs
Insertion/Nom/Définir
clic sur DECALER
ça doit te montrer la plage des couleurs

RQ1. dans le code j'aurais pu reprendre cette plage (lst_noms) et éviter le calcul de lifin et de plage
RQ2. =DECALER(Couleurs!$A$2;0;0;NBVAL(Couleurs!$A$2:$A$200);1)
signifie que la plage lst_noms se définit
- à partir de la cellule A2
- dont la première cellule est décalée de 0 lignes, 0 colonnes (par raooprt à A2)
- dont le nombre de lignes est égal au nombre de valeurs de la plage A2:A200 (on taille large!)
- dont le nombre de colonnes est 1
RQ3. pour ajouter une couleur, tu l'ajoutes simplement à la fin du tableau (tu n'as pas à toucher à la définition de lst_noms

bonne journée
0
judithcle Messages postés 19 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 30 novembre 2015
12 oct. 2012 à 11:32
Ok, j'ai compris pour le décalage, ça marche maintenant !!

En fait, je ne comprenais pas bien ce que tu disais, car tu as mis qu'il me fallait cliquer sur DECALER, mais je n'avais pas de bouton où cliquer nommé "Decaler" ou quoi que ce soit de semblable.
Par contre, j'ai mis ta formule =DECALER(Couleurs!$A$2;0;0;NBVAL(Couleurs!$A$2:$A$200);1) en-dessous de "Fait référence à" concernant la liste lst_noms, et du coup ça fait le décalage automatiquement.

Merci pour toute ton aide pour ce fichier !!! Je n'ai plus aucun problème à présent.

Bonne fin de journée !!

Judith
0