Interdire la saise de certaines données

lumat83

XLDnaute Nouveau
Re :)

Je souhaiterais controler la saisie de certaines données (heures) dans les cases d'un planning. Par exemple, interdire la saisie d'une heure comprise entre 00:00 et 12:00 dans certaines cases ou entre 12:01 et 24:00 dans d'autres.
Evidemment, par la validation des données de la barre d'outil excel, ça marche très bien sauf que je souhaite établir un planning par semaine sur 1 an (donc 52 répétitions du tableau sur une feuille) et que le nombre de validations étant apparemment limité, cela crée une erreur (voir mon post erreur d'enregistrement un peu plus bas).

Est-possible en VBA ? Par quelles instructions ?

Je vous remercie une fois de plus pour votre aide :)
 

Jacques87

XLDnaute Accro
Re : Interdire la saise de certaines données

Bonjour,

Si j'ai bien compris ton problème :
1) il te faut définir des plages
plage1, constituées des cellules vérifaint la première condition (la saisie d'une heure comprise entre 00:00 et 12:00)
plage2, constituées des cellules vérifiant la deuxième condition (cases ou entre 12:01 et 24:00 )

2) un petit bout de code testant d'une part l'activation de tes cellules (soit en plage1, soit en plage2, soit ailleurs) d'une part et la condition adéquat d'autre part devrait faire l'affaire

L'idéal pour t'aider seait d'avoir ton fichier

A+
 

lumat83

XLDnaute Nouveau
Re : Interdire la saise de certaines données

Pas de problème :D

Les cases blanches sont divisées en 3 lignes de 2 cases. Je souhaiterais que
- Dans les cases de la première ligne ne puissent être saisies que les heures comprises entre 00:00 et 12:00
- Dans les cases de la troisième ne puissent être saisies que les heures comprises entre 12:01 et 24:00
- La seconde n'autoriserait que les macros CONGES, MALADIE et REPOS

Est il possible de faire une aide avec VBA, genre "ne saisir que les heures ..." lorsque la souris pointe sur une case ? Et un message "Erreur de saisie" ou cas où ces conditions ne soient pas respectées ?

Merci beaucoup d'avoir accepté de m'aider, Jacques :)
 

Pièces jointes

  • Planning FES Prov.xls
    36.5 KB · Affichages: 55
  • Planning FES Prov.xls
    36.5 KB · Affichages: 52
  • Planning FES Prov.xls
    36.5 KB · Affichages: 54

lumat83

XLDnaute Nouveau
Re : Interdire la saise de certaines données

Et non André justement. C'est le problème que j'expose dans mon post "erreur d'enregistrement" plus bas : les validations et mises en forme conditionnelles en nombre ( 12 salariés, 7 jours et 52 semaines donc à peu près 4350 cellules concernées dans mon cas ) provoquent une erreur d'enregistrement du classeur.
Je suppose qu'il s'agit d'une limite Excel mais je suis preneur pour toute solution (les services packs ne résolvent pas ce problème).:p

C'est pourquoi, je cherche à savoir comment contourner cela par VBA :)
 

lumat83

XLDnaute Nouveau
Re : Interdire la saise de certaines données

Après quelques recherches complémentaires, je suis arrivé à ce résultat :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
x = Format(Target, "hh:mm")
If Not Application.Intersect(Target, [d46:d48]) Is Nothing Then
If Not (x >= "00:00" And x <= "12:00") Then MsgBox "Saisie incorrecte, l'heure saisie est comprise dans une plage interdite. Dans la partie gauche de la case, les heures de 00:00 à 12:00 et dans la partie droite, les heures entre 12:01 et 24:00 ", vbRetryCancel
Target.Select
End If

If Not Application.Intersect(Target, [e46:e48]) Is Nothing Then
If Not (x > "12:00" And x <= "24:00" Or x <= "00:00") Then MsgBox "Saisie incorrecte, l'heure saisie est comprise dans une plage interdite. Dans la partie gauche de la case, les heures de 00:00 à 12:00 et dans la partie droite, les heures entre 12:01 et 24:00 ", vbRetryCancel
Target.Select
End If

End Sub

Me reste deux problèmes :

1- Dans la colonne de gauche D46 D48, l"appui sur la touche SUPP envoi le message erreur de saisie mais pas dans la colonne de droite. Je ne vois pas pourquoi.
2- Je souhaiterais que le message d'erreur (MSGBOX comprenant actuellement les bouton "Reessayer" et "Annuler") soit bloquant, c'est à dire que l'utilisateur ne puisse sortir du message que par une action sur le bouton "annuler" qui effacerait la saisie effectuée. (Pour le moment, il suffit d'appuyer sur un des 2 boutons et de placer le curseur ailleur, la saisie erronée reste inscrite).

J'espère que je n'en demande pas trop :eek:
Les aides que vous m'apportez me sont précieuses et de plus me permettent d'avancer dans ma connaissance du VBA. Je parviens seul à trouver quelques méthodes mais parfois, j'avoue, comme c'est le cas dans ce post, que je butte carrément sur mon ignorence du language.
 
Dernière édition:

lumat83

XLDnaute Nouveau
Re : Interdire la saise de certaines données

Voilà, j'ai réglé mon problème, je vous expose la macro, ainsi soit elle est nulle et mal foutue et peut-être quelqu'un m'expliquera ce qui cloche :D soit elle est correcte et ça servira sûrement :)

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
x = Format(Target, "hh:mm")
y = Format(Target, "MALADIE")
z = Format(Target, "CONGES")
w = Format(Target, "REPOS")
r = Format(Target, "")
If Not Application.Intersect(Target, [d46:d48]) Is Nothing Then
If y <> "MALADIE" Then
If z <> "CONGES" Then
If w <> "REPOS" Then
If r <> "" Then
If Not (x >= "00:00" And x <= "12:00") Then
Dim ValidMessage1 As Integer
ValidMessage1 = MsgBox("Saisie incorrecte, l'heure saisie est comprise dans une plage interdite. Dans la partie gauche de la case, les heures de 00:00 à 12:00 et dans la partie droite, les heures entre 12:01 et 24:00 ", vbRetryCancel)
If ValidMessage1 = vbRetry Then
Target.Select
Else
Target.Select
Target = ""
End If
End If
End If
End If
End If
End If
End If
End Sub

Et ceci répété pour chaque colonne concernées dans le tableau
 

Discussions similaires

Statistiques des forums

Discussions
312 234
Messages
2 086 467
Membres
103 226
dernier inscrit
smail12