XL 2016 problème code sur mise en forme conditionnelle

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

  • planning.xlsm
    37.2 KB · Affichages: 2
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.

mapomme

XLDnaute Barbatruc
Supporter XLD
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
 

Dimitri13

XLDnaute Nouveau
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
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • planning.xlsm
    33.4 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
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
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • planning (2) (3).xlsm
    35.5 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • planning (2) (4).xlsm
    35.5 KB · Affichages: 2

Discussions similaires

Statistiques des forums

Discussions
315 098
Messages
2 116 190
Membres
112 679
dernier inscrit
Yupanki