VBA Excel: inputbox, vbcancel et date

Fermé
Aude - Modifié le 28 mai 2019 à 15:17
fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 - 28 mai 2019 à 17:41
Bonjour,

Je travaille sur Excel 2013 et je rencontre une difficulté avec la fonction "Annuler" de mon inputbox.

En effet, j'ai créé une inputbox où saisir la date d'échéance d'un projet dans la prochaine cellule vide de ma colonne B. Tout se passe bien lorsque des dates conformes sont tapées dans l'inputbox et validées: la date apparaît bien et au bon endroit.

En revanche, lorsque je décide d'annuler ma saisie dans l'inputbox, la date "00/01/1900" apparaît quand même dans la prochaine cellule vide, alors que je voudrais qu'elle reste vide, puisque j'ai annulé.

Par ailleurs, j'aimerais pouvoir m'assurer que seule une date (ou du moins une information numérique) puisse être renseignée, raison pour laquelle j'ai utilisé 'application.inputbox'; or quand une donnée alphabétique est entrée, le message "Nombre non valide" apparaît alors que j'aimerais le remplacer par "Format non valide" par exemple; comment faire?

Voici mon code:
Sub test2()

Dim NBL1 As Long, nom As Date
nom = Application.InputBox("Quelle est la date de référence?" & vbLf & vbLf & "L'indiquer au format JJ/MM/AAAA", "Date", Type:=1)
If nom = vbCancel Then
Exit Sub
Else
NBL1 = Range("C1").End(xlDown).Offset(1, 0).Row
Range("C" & NBL1).Value = CDate(nom)
Range("C" & NBL1).NumberFormat = "dd/mm/yyyy;@"
End If

End Sub


Quelqu'un aurait-il des pistes pour résoudre ce problème? Le fichier est disponible ici: https://www.cjoint.com/c/IECnq2N4Rws
Je vous en remercie infiniment!

Aude

2 réponses

fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 59
28 mai 2019 à 15:14
Bonjour,
il me semble que le problème du bouton annuler des inputbox est assez récurent selon ce que l'on attend des inputbox
pourquoi ne pas simplement créer un userforme pour remplacer ta inputbox?(dans lequel tu pourras tester facilement la valeur saisie sur
afterupdate
par exemple)
1
Bonjour fabien25000,

Et merci pour votre message!
J'ai donc creusé la piste du userform et la page https://www.commentcamarche.net/faq/46730-vba-mon-tout-premier-userform-debutants-extremes m'a permis de remplacer mon inputbox par le userform qui semble effectivement plus approprié.
Je cherche à présent à mettre en place le contrôle du format de la date à saisir.

Merci encore!
0
fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 59
Modifié le 28 mai 2019 à 17:05
il faudra utiliser un if dans cet esprit :
If Not TextBox.Value Like "**/**/****" Then
    MsgBox "merci de rentrer la date au format JJ/MM/AAAA", vbOKOnly
    TextBox.Value = ""
End If
0
Merci encore!
Je viens d'essayer mais au lieu d'indiquer la valeur " " dans ma cellule, il m'a mis la valeur erronée saisie ayant déclenché le message d'erreur de la msgbox.
Ca doit peut-être passer par une boucle, non?
0
fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 59
Modifié le 28 mai 2019 à 17:43
tu es bien sur l'évenement "afterupdate" de la textbox?
sinon modifie la ligne du if pour rajouter "différent de rien" dans tes arguments
If Not textbox.Value Like "**/**/****" And textbox<> "" Then


Suite : sans espace entre les guillemets*
0
tuxboy Messages postés 995 Date d'inscription lundi 23 juillet 2012 Statut Membre Dernière intervention 28 mai 2019 190
28 mai 2019 à 15:39
Une piste :
If nom = "00:00:00" Then
0