XL 2019 problème dates avec Private Sub Worksheet_SelectionChange

rh.finances

XLDnaute Occasionnel
Bonjour à tous les internautes de ce super site,

Novice en VBA, je bute sur un problème qui à mon avis sera un jeu d'enfant pour un pro de VBA

dans le tableau joint, j'ai un code créé comme suit :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("jour1_arret_travail") < ("seuil_protection_statutaire") Then
MsgBox "L'agent a droit à une protection statutaire à partir de 4 mois d'ancienneté. tout arrêt antérieur au " & Range("jour1_arret_travail") & " ne peut être enregistré dans le tableau", vbOKOnly + Apparence + TypeDeBox, "saisie impossible"
Application.Undo

End If
End Sub

ce code doit s'activer en fonction des dates renseigner en A8 et C4 et si la date de la cellule A8 est antérieure à C4, le msgbox s'affiche.
mais en fait, rien ne marche et je ne trouve pas de solution.

merci d'avance pour vos retours et bonne journée.

Alex
 

Pièces jointes

  • simulateur calcul PT-DT - agents contractuels v.2.xlsm
    30.6 KB · Affichages: 2
Dernière édition:
Solution
Bonjour

à priori, je vois plusieurs erreurs dans ton fichier

1) le code se déclenche à chaque fois que tu selectionnes une cellule: n'importe ou sur la feuille
==> pour limiter son déclenchement lorsque tu MODIFIES une cellule de la plage A8:A25==> utilise l'évènement change au lieu de selection_change
2) le test que tu fais: il manque un "range" pour le seuil_protection_statutaire"
et la range "jour1_Arret_Travail" n'est pas définie dans ta feuille: je pense qu'il s'agit de la cellule que tu es justement en train de modifier.. le target
3) dans ton message d'erreur, tu ne sembles pas utiliser la bonne plage nommée
4) ta validation de données appliquée sur la colonne A envoie toujours le message d'erreur quelque soit la date saisie...

vgendron

XLDnaute Barbatruc
Bonjour

à priori, je vois plusieurs erreurs dans ton fichier

1) le code se déclenche à chaque fois que tu selectionnes une cellule: n'importe ou sur la feuille
==> pour limiter son déclenchement lorsque tu MODIFIES une cellule de la plage A8:A25==> utilise l'évènement change au lieu de selection_change
2) le test que tu fais: il manque un "range" pour le seuil_protection_statutaire"
et la range "jour1_Arret_Travail" n'est pas définie dans ta feuille: je pense qu'il s'agit de la cellule que tu es justement en train de modifier.. le target
3) dans ton message d'erreur, tu ne sembles pas utiliser la bonne plage nommée
4) ta validation de données appliquée sur la colonne A envoie toujours le message d'erreur quelque soit la date saisie

ca donnerait ce code, si j'ai bien compris
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("A8:A25")) Is Nothing Then Exit Sub
    If Target = "" Then Exit Sub
    If Not IsDate(Target) Then Target = ""
    If Target < Range("seuil_protection_statutaire") Then
        MsgBox "L'agent a droit à une protection statutaire à partir de 4 mois d'ancienneté. tout arrêt antérieur au " & Range("seuil_protection_statutaire") & " ne peut être enregistré dans le tableau", vbOKOnly + Apparence + TypeDeBox, "saisie impossible"
        Application.Undo
    End If
End Sub
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Bonjour.
Cette macro me semble inutile dans la mesure où il y a déjà une validation de donnée qui interdit la saisie d'une date antérieure au seuil de protection statutaire.
Hello Bernard, à priori, quand j'ai testé, ca interdisait la saisie de n'importe quelle date, antérieure ou pas...
et la..dans le fichier du premier post, il n'y a plus cette validation de données.. notre ami aurait modifié le fichier?
 

rh.finances

XLDnaute Occasionnel
Bonjour Toutfat, Drandreb et vgendron,
merci beaucoup pour ces retours.

Vgendron, la formule proposée marche très bien.
par contre, cela génère un truc bizarre sur la msgbox. je devrais avoir un message de ce type et la saisie erronée devrait en principe disparaitre en cliquant sur "annuler" :
1715069703787.png

or, ce n'est pas le cas, la date qui aurait été rentrée par erreur en A8 n'est pas effacée.
j'ai l'impression que la commande "Application.Undo" ne s'active pas.

merci beaucoup pour vos analyses
 

Pièces jointes

  • 1715070087414.png
    1715070087414.png
    1.3 KB · Affichages: 0

rh.finances

XLDnaute Occasionnel
Hello Bernard, à priori, quand j'ai testé, ca interdisait la saisie de n'importe quelle date, antérieure ou pas...
et la..dans le fichier du premier post, il n'y a plus cette validation de données.. notre ami aurait modifié le fichier?
J'avais en effet laissé une "validation de données" par erreur dans mon premier post mais comme cela ne marchait pas, je suis passé à une solution par macro. désolé, pour l'écueil !
 

vgendron

XLDnaute Barbatruc
Bonjour Toutfat, Drandreb et vgendron,
merci beaucoup pour ces retours.

Vgendron, la formule proposée marche très bien.
par contre, cela génère un truc bizarre sur la msgbox. je devrais avoir un message de ce type et la saisie erronée devrait en principe disparaitre en cliquant sur "annuler" :
Regarde la pièce jointe 1196355
or, ce n'est pas le cas, la date qui aurait été rentrée par erreur en A8 n'est pas effacée.
j'ai l'impression que la commande "Application.Undo" ne s'active pas.

merci beaucoup pour vos analyses
Chez moi ca fonctionne bien, un message avec juste OK pour acquiter (vbyesOnly) et la saisie est effacée
 

Discussions similaires

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 017
dernier inscrit
annboi19