VBA InputBox (erreur ou annuler)

Bonsoir à tous,

Je ne me souviens plus comment écrire correctement le code pour:

  • 1 valider une date et boucler si erreur.
  • 2 exit sub si bouton 'Annuler"
Sub report()
Dim rep As Date
    Cycle = ActiveCell.Offset(0, -3)
dat:
rep = InputBox("Rendez-vous avec : " & ActiveCell.Offset(0, -8) & " du  " & ActiveCell & "  manqué !" _
    & Chr(10) & "Entrez une nouvelle date ")
     If IsError(rep) Then GoTo dat

J'en suis là, mais çà plante si pas d'entrée ou Annuler !

merci pour votre aide

cordialement

Claude.

Salut le forum

Claude, ne voyant pas d'exemple, essaye d'adapter avec ceci :

Sub GetUserName()
Dim strName As String
dat:
    strName = InputBox(Prompt:="You name please.", _
          Title:="ENTER YOUR NAME", Default:="Your Name here")

        If strName = "Your Name here" Or _
           strName = vbNullString Then
           Exit Sub
        Else
            GoTo dat
        End If

End Sub

ou avec ceci pour vérifier une date

Sub MacroDate()
Dim aa
aa = InputBox("Saisie de la date du jour", _
"Format jour/mois/année")
If aa = "" Then Exit Sub
If IsDate(aa) Then Range("E8").Value = CDate(aa)
End Sub

Mytå

Bon dimanche à tous,

je ne m'en sort pas !!!

Dim bip
bip = ActiveCell.Offset(0, -5) - range("h2")

bip est la différence des 2 dates,

je n'arrive pas à faire la bonne déclaration.

ou est l'erreur ?

je coince depuis 2 jours là-dessus !

à l'aide.....Claude.

édit : j'ai besoin d'un résultat numérique

Bonjour,

Que dois tu trouver comme date ? Donne un exemple de données avec le résultat attendu.

Sinon essaye DIM AS DATE

A te relire

Dan

Edit tu parles de résultat numérique mais quoi exactement. Là ton code renvoie une date jj mm aa

10test.xlsx (14.47 Ko)

Salut Dan,

voici le code complet

Sub report3()
Dim strName As String
Dim bip

dat:
    strName = InputBox(Prompt:="Entrez une nouvelle date", Title:="Rendez-vous", Default:=[h2])
        If strName = vbNullString Then Exit Sub 'bouton Annuler

        If strName < [h2] Then
            MsgBox ("date antérieure à aujourd'hui !")
            GoTo dat
         Else
            ActiveCell.Offset(0, -5) = Format(strName, "dd/mm/yy")
    bip = ActiveCell.Offset(0, -5) - range("h2")

            With ActiveCell.Offset(0, bip)
                 .Interior.ColorIndex = 8
            End With
         End If
End Sub

J'ai besoin de la valeur "bip" pour le With ActiveCell.Offset(0, bip)

Claude.

re,

Activecell se trouve en principe où sur ta feuille ?

Dan

re,

activecell est dans une colonne de date.

si tu veux voir le fichier complet, vois ce lien à la fin

https://www.excel-pratique.com/forum/viewtopic.php?t=6331

je voulais ajouter un contrôle du bouton "annuler" et pouvoir sortir de la macro. si erreur.

Claude.

Bonjour Claude, Dan

essaie comme ceci :

With ActiveCell.Offset(0, -5)
                .Value = CDate(strName)
                .NumberFormat = "dd/mm/yy;@"
                bip = .Value - Range("h2")
           End With

re,

Claude, Format(strName, "dd/mm/yy") renvoie une date inversée mm et jj par rapport à ce que tu as mis en Inputbox (enfin chez moi)

Remplace ceci :

 ActiveCell.Offset(0, -5) = Format(strName, "dd/mm/yy")

par

ActiveCell.Offset(0, -5) = CDate(strName)

Amicalement

Dan

joindre un fichier c joint 2013

re, Dan,

bonjour felix,

Ouf !! vos 2 codes fonctionnent. et ceci m'amène à poser 3 questions,

1- bip n'a pas besoin d'être déclaré.

2 - que signifie le symbole Format = "dd/mm/yy;@"

3 - que signifie : CDate

Ceci étant réglé, maintenant il faudrait gérer les erreurs possibles qui renvoie au goto dat:

et si on clique sur "Annuler" >>>> Exit Sub.

J'en demande beaucoup peut-être !

Merci à vous deux

amicalement

Claude.

Bonsoir, claude

et ceci m'amène à poser 3 questions,

1 :

bip n'a pas besoin d'être déclaré.

la déclaration de variable n'est pas obligatoire, mais aide à la compréhension du code

2 :

que signifie le symbole Format = "dd/mm/yy;@"

L'enregistreur de macro est ton meilleur ami

3 :

que signifie : CDate

F1 (ou l'aide) est également un fidèle allié

Les fonctions ci-dessous convertissent une expression en un type de données spécifique.

le reste, à lire....

re,

1- bip n'a pas besoin d'être déclaré.

Si tu mets DIM BIP, BIP est déclaré comme variable de type VARIANT.

DIM BIP ou DIM BIP AS VARIANT revient au même. MAis comme te le dis, Felkix, il vaut mettre VARIANT car on comprend mieux le code.

Amicalement

Dan

Bon d'accord Dan et merci,

Mais n'existe t-il pas un lien ou un site qui me montre un exemple concret et complet ?

Ma question me parait pourtant simple :

un InputBox qui demande d'entrer une date

1-si erreur de saisie >>>>> goto ou retour à l'inputbox

2- Si clic bouton "Annuler">>>>> exit Sub

J'ai vu çà quelque part, mais ne le retrouve pas !

Cordialement

Claude.

Salut le forum

Claude regarde un code déjà donné par Félix :

Sub test()
retour:
    DV = InputBox("Date à vérifier")
    If DV = "" Then Exit Sub
    If Not (DateValide(DV)) Then
        MsgBox "Format non valable": GoTo retour
    Else
        MsgBox "OK"
    End If
End Sub

Function DateValide(DV)
Dim M, A
   DateValide = False
   On Error GoTo Fin
   If Len(DV) - Len(Application.Substitute(CStr(DV), ".", "")) <> 1 Or Len(DV) <> 7 Or InStr(1, DV, ".") <> 3 _
       Then Exit Function
   M = Left(DV, 2)
   A = Right(DV, 4)
   If A < 1900 Then Exit Function
   If M < 1 Or M > 12 Then Exit Function
   DateValide = True
Fin:
End Function

Mytå

Bonjour à tous,

Merci Mytå , felix,

Pas si évident que çà, cet InputBox !

J'ai essayé à peu près tous les formats date, je retombe toujours sur "format non valable"

Je ne comprends pas tout dans la fonction.

Quel est le bon format à saisir ?

Amicalement

Claude.

Bonjour, Claude

le code proposé par Mytå contrôle que le format de la date est de ce type : 07.2008

le code modifié pour un format : 22/07/2008

Sub test()
retour:
    DV = InputBox("Date à vérifier")
    If DV = "" Then Exit Sub
    If Not (DateValide(DV)) Then
        MsgBox "Format non valable": GoTo retour
    Else
        MsgBox "OK"
    End If
End Sub

Function DateValide(DV)
Dim M, A
   DateValide = False
   On Error GoTo Fin
   If Len(DV) - Len(Application.Substitute(CStr(DV), "/", "")) <> 2 Or Len(DV) <> 10 Or InStr(1, DV, "/") <> 3 _
       Or InStr(4, DV, "/") <> 6 Then Exit Function
   M = Mid(DV, 4, 2)
   A = Right(DV, 4)
   If A < 1900 Then Exit Function
   If M < 1 Or M > 12 Then Exit Function
   DateValide = True
Fin:
End Function

Bonjour felix et au forum,

Bon , là çà marche,

mais pourrait-on avoir un peu + de souplesse , par exemple :

  • accepter 3 ou 03 pour le jour
  • accepter 3 ou 03 pour le mois
  • accepter 08 ou 2008 pour l'année (ou limiter à 08 seulement)
  • ----------------------------
   If Len(DV) - Len(Application.Substitute(CStr(DV), "/", "")) <> 2 Or Len(DV) <> 10 Or InStr(1, DV, "/") <> 3 _
       Or InStr(4, DV, "/") <> 6 Then Exit Function
   M = Mid(DV, 4, 2)
   A = Right(DV, 4)

Si j'ai bien compris, tout se joue sur ces 3 lignes !

Peux-tu me les expliquer, sinon je vais tâtonner pendant des heures !

merci pour ta patience

amicalement

Claude.

Re-,

si tu n'as aucune exigence, dans le format de la date, sauf que ce soit bien une date, tu peux essayer avec ce code :

Function DateValide(DV)
   DateValide = False
   On Error GoTo Fin
   If IsDate(DV) Then DateValide = True
Fin:
End Function

re,

felix, je vais devenir "chèvre" avec cette histoire !!

ta dernière proposition serait parfaite, sauf que :

- pour les jours inférieurs ou égal à 12 , le mois est inversé avec le jour !

j'ai fait un petit fichier test.

https://www.excel-pratique.com/~files/doc/essai_date.xls

Je ne sais plus quoi faire.

sort-moi de là !

merci......Claude.

Re-,

sans fonction supplémentaire

essaie :

Sub test()
Dim DV As String
retour:
    DV = InputBox("Date à vérifier")
    If DV = "" Then Exit Sub
    If IsDate(DV) Then
        [A1] = Format(CDate(DV), "m/d/yyyy")
    Else
        MsgBox "Format non valable": GoTo retour
    End If
End Sub
Rechercher des sujets similaires à "vba inputbox erreur annuler"