Gérer le résultat d'un inputbox

L

leroymh

Guest
Mon problème,

Dans un inputbox je veux gérer une date en sortie.

1) je déclare ma variable en date
2) je demande à l'utilisateur d'insérer une date au format (jj/mm/aaaa)
3) cette date est copiée dans une cellule ayant ce format.

Problème : comment gérer la saisie en cas d'erreur si l'utilisateur tape n'importe quoi sauf une date au format indiqué, où clicque sur annuler, où sur la croix de fenêtre ?

Merci d'avance
 
C

cormier

Guest
cette macro vba répond à votre souci, en cas d'erreur de saisie , une fois la valeur saisie la macro vérifie si la valeur est bien une date dans le cas contraire un message d'erreur apparaît et s 'affiche à nouveau l'inputbox


Public Sub testdate()
Dim l_sdateRetour As Variant

Question:
l_sdateRetour = InputBox("Quelle est la date ?", "test date :" & Format(Date, "dd/mm/yyyy"))
If Not IsDate(l_sdateRetour) Then MsgBox "Date Incorrecte", vbExclamation: GoTo Question
End Sub
 
S

sousou

Guest
Un exemple qui controle si la saisie est une date après la validation.

Sub test()
rep = InputBox("date")
On Error GoTo erreur
madate = CDate(rep)
MsgBox madate
Exit Sub
erreur:
MsgBox "Votre date est invalide."
End Sub
 
C

cormier

Guest
votre code informe simplement que la date est fausse, ma formule boucle tant que la date n'est pas correcte. ca peut servir si le reste de vos programmes dépendent de cette date

Public Sub testdate()
Dim l_sdateRetour As Variant

Question:
l_sdateRetour = InputBox("Quelle est la date ?", "test date :" & Format(Date, "dd/mm/yyyy"))
If Not IsDate(l_sdateRetour) Then MsgBox "Date Incorrecte", vbExclamation: GoTo Question
End Sub
 
L

leroymh

Guest
Merci à cormier et sousou pour les exemples, les contrôles s'effectuent, mais le seul problème est le format de date en sortie.

Si l'utilisateur effectue une saisie correcte, c'est à dire (dd/mm/yyyy), le résultat inséré dans la cellule est au format (mm/dd/yyyy).

Question : Comment contrôler ou convertir convenablement cette date ?

Merci
 
@

@+Thierry

Guest
Bonjour Marc, Jacques, Sousou et le Forum...

Je sais qu'il y a longtemps je me suis pris la tête avec une histoire comme çà avec "InputBox" ... vos deux exemples semblent parfais et je ne comprends par pourquoi Marc n'arraive pas à récupérer la date au format souhaitée... (Est simplement le format de Cellule à modifier?)

Dans la foulée je propose aussi une solution par UserForm

Un exemple pour avoir la date du jour dans une TextBox de UserForm...

Private Sub UserForm_Initialize()
TextBox1.Value = Format(Now(), "dd/mm/yyyy")
End Sub


Un exemple pour appliquer le format à la sortie de saisie avec un contrôle pour que la valeur soit bien une date grace à "CDate Function"...(comme sousous)

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error GoTo Message
TextBox2.Value = Format(TextBox2.Value, "dd/mm/yyyy")
TestedDate = CDate(TextBox2.Value)
Range("A1").NumberFormat = "dd/mm/yyyy"
Range("A1") = TestedDate
Exit Sub
Message:
MsgBox "la date saisie ne semble pas valide (JJ/MM/AAAA)", vbCritical, "Warning"
TextBox2.SetFocus
End Sub

Voilà je pense que c'est une autre solution, mais qui peut résoudre ton problème... Sinon si tu veux rester en "InputBox" tu insères simplement la ligne "Range("A1").NumberFormat = "dd/mm/yyyy"" dans l'un des deux codes que l'on t'a proposé ci-dessus.

Bonne Journées
@+Thierry
 
L

leroymh

Guest
Merci de ton aide Thierry.

Je souhaite rester avec l'inputbox et je ne comprend pas la manip avec .Number Format.

Problème la variable déclarée en Variant récupère la saisie au format anglais (mm/dd/yyyy) dans une cellule dont le format est personnalisé (jj/mm/aaaa).


Merci d'avance.
 
@

@+Thierry

Guest
Bon alors comme tu n'as pas l'air de me suivre... (même dans les ficelles !!)

soit avec le code de Jacques...

Public Sub testdate()
Dim l_sdateRetour As Variant
Question:
l_sdateRetour = InputBox("Quelle est la date ?", "test date :" & Format(Date, "dd/mm/yyyy"))
If Not IsDate(l_sdateRetour) Then MsgBox "Date Incorrecte", vbExclamation: GoTo Question
Range("A1").NumberFormat = "dd/mm/yyyy"
Range("A1") = l_sdateRetour
End Sub

soit avec le code de Sousou...

Sub test()
rep = InputBox("date")
On Error GoTo erreur
madate = CDate(rep)
Range("A1").NumberFormat = "dd/mm/yyyy"
Range("A1") = madate
Exit Sub
erreur:
MsgBox "Votre date est invalide."
End Sub

Cà devrait ne plus poser aucun problème......
non ?
@+Thierry
 

Discussions similaires

Statistiques des forums

Discussions
314 655
Messages
2 111 604
Membres
111 217
dernier inscrit
aladinkabeya2