Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
XL 2016problème code sur mise en forme conditionnelle
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
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.
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 )
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 ?
Merci en faite la finalité de mon projet et que exemple si dans le tableau :
zone 1 cellule en rouge
zone 2 cellule en vert
zone 3 cellule jaune
zone 4 cellule violet
re désolé de tourner en rond ,ok pour le planning ci dessus mais quand je change de la semaine 1 vers 2 et reviens sur 1 je retrouve pas tous mes attribution dans le planning C 9-10-11 disparaît .
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 ....
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.
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.