InputBox : Ca bloque sur "Annuler"
Bonsoir,
Dans le fichier ci-joint, si je saisis en C5 ou C6 une date ne commençant pas par le 1er du mois, j'ai un message d'erreur qui apparaît dans une InputBox et qui demande de saisir une date correcte.
Si une date qui ne commence pas par le 1er du mois est saisie dans cette InputBox, le message d'erreur apparaît à nouveau, ce qui est normal.
Par contre, si je saisis autre chose qu'une date (par exemple du texte) ou si je clique "Annuler", ça bloque. Dans un tel cas, je voudrais simplement que la "cible" soit vidée et activée.
Comment dois-je m'y prendre.
A vous relire.
Bonnes salutations.
Bonsoir yvouille,
Un code à tester :
'Option Explicit
Dim temoin As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
'Dim Date_correcte As Date
If temoin Then Exit Sub
temoin = True
If Target.Count > 1 Then Exit Sub ' proposition de Dan pour éviter des messages bizarres en cas d'effacement de plusieurs cellules à la fois
If Not Application.Intersect(Target, Range("C5:C6")) Is Nothing Then
If IsDate(Target) Then
If Day(Target) <> 1 And Target <> "" Then
Date_correcte = InputBox("Seulement possible le 1er d'un mois" & Chr(13) & Chr(13) & "Veuillez saisir une date correcte")
temoin = False: Target = Date_correcte
End If
Else
Target = ""
End If
temoin = False
End If
End Sub
Remarque importante : j'ai mis en commentaire le "Option Explicit" et la déclaration de la variable Date_correcte.
Salut Vba-New et merci pour ta réponse.
Ton code semble fonctionner correctement. Il y a cependant un petit problème au niveau du format. Si la date est saisie par l'intermédiaire de la InputBox, le format est différent et se présente tel que ci-dessous (sans les 0, alignement à gauche) :
Je peux alors indiquer n'importe quel format de cellule, ça ne change plus rien.
Il y a aussi certaines constellations - mais je ne sais pas les reproduire - qui font que les codes sont comme suspendus ; je peux alors inscrire toutes les dates incorrectes que je veux, il n'y a plus le message d'erreur tant que je n'ai pas refermé et rouvert Excel.
Peux-tu encore m'aider, s'il-te-plait ?
Mon fichier en l'état :
Cordialement.
Un nouveau code à tester :
Private Sub Worksheet_Change(ByVal Target As Range)
'Dim Date_correcte As Date
If temoin Then Exit Sub
If Target.Count > 1 Then Exit Sub ' proposition de Dan pour éviter des messages bizarres en cas d'effacement de plusieurs cellules à la fois
If Not Application.Intersect(Target, Range("C5:C6")) Is Nothing Then
temoin = True
If Target = "" Then temoin = False: Exit Sub
If IsDate(Target) Then
If Day(Target) <> 1 And Target <> "" Then
Date_correcte = Target
Do While Day(Date_correcte) <> 1
Date_correcte = Application.InputBox("Seulement possible le 1er d'un mois" & Chr(13) & Chr(13) & "Veuillez saisir une date correcte", Type:=1)
If VarType(Date_correcte) = vbBoolean Then Target = "": temoin = False: Exit Sub
Loop
Target.Value = Date_correcte
End If
Else
Target = ""
End If
temoin = False
End If
End Sub
Re,
Merci beaucoup pour cette nouvelle réponse : ça fonctionne au poil pour ce fichier
J'aurais quand même été intéressé à avoir une réponse à ma question ci-dessous concernant les InputBox en général :
Yvouille a écrit :Par contre, si je saisis autre chose qu'une date (par exemple du texte) ou si je clique "Annuler", ça bloque. Dans un tel cas, je voudrais simplement que la "cible" soit vidée et activée.
Comment dois-je m'y prendre ?
N'est-ce vraiment pas possible ?
Bonnes salutations.
Salut yvouille,
Yvouille a écrit :J'aurais quand même été intéressé à avoir une réponse à ma question ci-dessous concernant les InputBox en général :
Yvouille a écrit:Par contre, si je saisis autre chose qu'une date (par exemple du texte) ou si je clique "Annuler", ça bloque. Dans un tel cas, je voudrais simplement que la "cible" soit vidée et activée.
Comment dois-je m'y prendre ?
Dans ton cas, ça ne marchait pas car tu avais déclaré la variable Date_correcte en tant que date.
C'est pour ça que ça bloquait lorsque ce n'était pas une date (texte, annuler=chaîne vide...) et te retournait une erreur car le code attendait la saisie d'une date.
Une autre remarque : ce que j'utilise dans le code n'est pas la fonction InputBox mais la méthode InputBox (Application.InputBox).
Alors que la fonction InputBox ne retourne que du texte, la méthode InputBox quant à elle permet de choisir le type de données que l'on va saisir (texte, formule, plage de cellules, nombre...)
Si tu as d'autres questions, n'hésite pas, j'essaierai de te répondre.
vba-new a écrit :Si tu as d'autres questions, n'hésite pas, j'essaierai de te répondre.
Non, là c'est bon, j'ai de quoi ruminer pendant quelque temps
Merci beaucoup pour tes explications en même temps claires et détaillées.
Cordialement.