Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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.

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: 3

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: 1

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…