XL 2016 problème code sur mise en forme conditionnelle

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Dimitri13

XLDnaute Nouveau
Bonsoir , dans mon tableau j'ai fait une macros pour que lors que dans le tableau le texte "zone 1"figure dans une cellule , celle ci se met en rouge .
qui peux me dire pourquoi cela ne fonctionne pas
merci pour votre aide dimitri
 

Pièces jointes

Solution
Plus intelligent ....
En fait le problème vient de Planning.
Pour les horaires vous faites +"1:00"*1.
Pour XL cela vient à rajouter 0.041666666666666..... qu'il arrondit à 0.0416666666666667. En commetant une légère erreur. Et ces erreurs sont cumulatives.
Au début ça marche ( jusqu'à 13::00) mais ensuite le cumul des erreurs font qu'il ne trouve plus d'égalité.
Solution : dans Planning mettre les heures "en dur", par exemple :
VB:
=SI($C$7<>"";"17:00"*1;"")
Ainsi il ne trouve plus d'erreurs, et on peut supprimer les Round. Voir PJ.
Bonsoir Dimitri13 🙂,

Je pense que c'est à cause des guillemets "parasites".
Si on supprime les guillemets et si on ôte les espaces après le 1, ça marche.
1708547864867.png

si on
 
Merci mapomme mais le pb est sur la macros qui a pour but de mettre en rouge une cellule si texte zone 1.

Private Sub Worksheet1_Change(ByVal Target As Range)
' Spécifie la plage de la zone 1
Dim zone1 As Range
Set zone1 = Range("A1:A100") ' Changez cela en fonction de votre plage réelle

' Spécifie la couleur que vous souhaitez attribuer
Dim couleur As Long
couleur = RGB(255, 0, 0) ' Rouge, vous pouvez changer ces valeurs pour d'autres couleurs

' Vérifie si la cellule modifiée est dans la zone1
If Not Intersect(Target, zone1) Is Nothing Then
' Vérifie le texte dans la cellule modifiée
If Target.Value = "VotreTexteRecherché" Then ' Remplacez "VotreTexteRecherché" par le texte souhaité
' Applique la couleur à la cellule modifiée
Target.Interior.Color = couleur
 
Bonsoir Dimitri, mapomme,
La seule macro qui a un ".Interior.Color = couleur est Worksheet1_Change(ByVal Target As Range)
Mais la présence du "1" fait qu'elle ne s'exécute jamais ( au profit de Worksheet_Change qui est au début de vos macros )
D'autre part, même si elle était active, elle ne s'exécuterait que dans la plage Range("A1:A100"), plage qui est vide dans votre feuille.

Pourquoi ne pas mettre une simple MFC comme :
VB:
=CHERCHE("zone  1";C8)
( Attention, dans le fichier il est écrit "zone 1" et non "zone 1" comme dans la demande. ( 2 espaces et non 1 )
 

Pièces jointes

Re,
Inspiré d'ici : Lien
VB:
Sub ExempleFormatageConditionnelErreur()
'Création de l'objet Range
Dim MaPlage As Range: Set MaPlage = Range("C8:G18")
'Ajouter une règle d'erreur
MaPlage.FormatConditions.Add Type:=xlExpression, Formula1:="=CHERCHE(""zone  1"";C8)"
'Défini la couleur intérieure en rouge
MaPlage.FormatConditions(1).Interior.Color = RGB(255, 0, 0)
End Sub
Je vous laisse le soin du déclenchement ou de l'exécution. ( va dépendre de vos macros )

Mais pourquoi mettre une macro au lieu d'une MFC puisque dans ce tableau vous avez déjà 5 MFC en place ?
comment je peux faire pour applique cette MFC sur la totalité du tableau
C'est déjà le cas, j'ai utilisé la même plage que vos autres MFC : =$C$8:$G$18
 
Re,
Les horaires, gérés par XL, sont des décimaux, et peuvent être des nombres rationnels, comme 16:00 qui vaut 0.6666666666666666.... il arrive donc pour certaines heures que la différence entre l'heure de Archives et l'heure de Planning soit de 1e-16 donc pas égal à 0, et donc pas égalité, d'où le bug.
En utilisant un arrondi on résout le problème, voir PJ, avec :
VB:
If (Round(Cells(ligne, 2).Value, 6) = Round(feuille.Cells(ligne_ext, 5).Value, 6) And ....
 

Pièces jointes

Plus intelligent ....
En fait le problème vient de Planning.
Pour les horaires vous faites +"1:00"*1.
Pour XL cela vient à rajouter 0.041666666666666..... qu'il arrondit à 0.0416666666666667. En commetant une légère erreur. Et ces erreurs sont cumulatives.
Au début ça marche ( jusqu'à 13::00) mais ensuite le cumul des erreurs font qu'il ne trouve plus d'égalité.
Solution : dans Planning mettre les heures "en dur", par exemple :
VB:
=SI($C$7<>"";"17:00"*1;"")
Ainsi il ne trouve plus d'erreurs, et on peut supprimer les Round. Voir PJ.
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
135
Réponses
2
Affichages
105
Réponses
6
Affichages
159
Réponses
25
Affichages
618
Retour