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

capture 13 10

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.

Rechercher des sujets similaires à "inputbox bloque annuler"