IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Imposer un format de réponse à une inputbox conditionnelle


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Auditeur interne
    Inscrit en
    Août 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur interne
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Août 2018
    Messages : 8
    Par défaut Imposer un format de réponse à une inputbox conditionnelle
    Bonjour,

    Je souhaiterais imposer un format de réponse date type "DD/MM/YY" (ou "DD/MM/YYYY") à une Inputbox qui ne se lance qu'à certaines conditions. Avec mon code actuel, le gestionnaire d'erreur ne se lance que si du texte est rempli mais si l'utilisateur rentre un format DDMMYY sans les "/", une date n'ayant rien à voir est appliquée...

    Deuxième point, j'aimerais que l'utilisation du bouton "Annuler" amène l'utilisateur à confirmer son choix de vouloir quitter la macro ou non (actuellement mon code est écrit de telle sorte qu'en appuyant sur "Annuler", la macro boucle sur mon Errorhandler et je suis obligé de forcer la sortie avec CTRL+Pause).

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Sub dates()
    '
    ' dates Macro
    '
    Dim i As Long, j As Integer, Message As String, DiffDate As Integer, NouvDate As Date, Defaut As String
     
    PremLigne = 6
    DernLigne = Range("A" & Rows.Count).End(xlUp).Row
     
    On Error GoTo Errorhandler
     
        For i = PremLigne To DernLigne
     
    Message = "Donner la " & CStr(Range("E5")) & " de la réservation " & _
                CStr(Cells(i, 2)) & " sous la forme JJ/MM/AA (taper les ' / ')." & _
                vbCrLf & "Pour rappel : la date affichée dans le rapport est " & _
                CStr(Cells(i, 3))
    Defaut = Format(Now, "dd/MM/yy")
    DiffDate = DateDiff("d", Cells(i, 4), Cells(i, 5))
     
            If DiffDate < 0 Then
                NouvDate = InputBox(Message, "Erreur de date à modifier", Defaut, 1000, 500)
                Cells(i, 5) = NouvDate
            End If
     
        Next i
        Exit Sub
     
    Errorhandler:
     
            MsgBox "Vous n'avez pas saisi une date à un format valide" & _
            vbCrLf & "Pour rappel, la forme doit être du type JJ/MM/AA avec les '/'", vbCritical
    Resume
     
    End Sub
    Merci par avance pour votre aide !

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    le probleme c'est que si tu injecte ton inputbox dans une cellule soit tu y envoie

    un string donc pour jongler avec les date dans le sheets walouh walouh

    soit une date mais ton format "dd/mm/yy" est imediatement transformé dans la cellule en en "dd/mm/yyyy"
    sachant cela force la saisie comme tu veux dans l'input oui!! mais formate ta cellule
    exemple
    1. si tu annule ben ca fait rien
    2. si le format n'est pas bon tu réexecute le code a partir de "re:" le input se reaffiche
    3. si la date est au bon format on formate la cellule et injecte cdate(nouvdate)


    de cette maniere ta date devrait etre exploitable en tant que date dans le sheets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
        Defaut = Format(Now, "dd/MM/yy")
    re:
        nouvdate = InputBox(Message, "Erreur de date à modifier", Defaut, 1000, 500)
         If nouvdate <> "" Then
            If nouvdate <> CStr(Format(nouvdate, "dd/mm/yy")) Then GoTo re
            With Cells(1, 5): .NumberFormat = "dd/mm/yy": .Value = CDate(nouvdate): End With
        End If
    End Sub
    par contre ton 1000 et 500 ca ne fonctionne pas chez moi l'input se retrouve toujours en haut a gauche de l'ecran
    pour qu'il soit au niveau haut gauche de la fentre de l'application je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nouvdate = InputBox(Message, "Erreur de date à modifier", Defaut, (10 + Application.Left) * 20, (10 + Application.Top) * 20)
    va savoir toi hein
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 29
    Par défaut
    Bonjour,

    Est-il possible d'installer l'ancien contrôle Agenda de Microsoft ? Ce serait plus plaisant pour l'utilisateur j'imagine.

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    j'avais zapé les slashs obligatoire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
        Defaut = Format(Now, "dd/MM/yy")
    re:
        nouvdate = InputBox(Message, "Erreur de date à modifier", Defaut, (10 + Application.Left) * 20, (10 + Application.Top) * 20)
        If nouvdate <> vbNullString Then
            If nouvdate <> CStr(Format(nouvdate, "dd/mm/yy")) Or UBound(Split(nouvdate, "/")) <> 2 Then GoTo re
            With Cells(1, 5): .NumberFormat = "dd/mm/yy": .Value = CDate(nouvdate): End With
        End If
    End Sub
    si tu annule ca fait rien
    si tu te plante ou oublie un/des slashs ca remet l'input au debut
    si le format n'est pas bon ca remet l'input au debut

    autrement dit tu ne peux pas taper
    081218
    08/1218
    0812/18
    0/8/12/18
    8/12/17
    12/23/18
    etc.....
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Il est toujours sage de tester ce que l'on écrit.
    Que l'utilisateur frappe par exemple n'importe quels chiffres et 2 "/" et le garde-fou de la ligne 6 recevra une prune, hein.
    Le bon garde-fou étant trop simple à mettre en oeuvre, je laisse le sage s'assagir seul.

Discussions similaires

  1. format date dans une inputbox
    Par adelsunwind dans le forum IHM
    Réponses: 1
    Dernier message: 16/02/2009, 19h48
  2. format date dans une inputbox
    Par adelsunwind dans le forum IHM
    Réponses: 2
    Dernier message: 26/01/2009, 23h10
  3. imposer un "format" à un int
    Par barucca dans le forum C++
    Réponses: 10
    Dernier message: 22/04/2005, 13h24
  4. quel format doit avoir une BD pour l'importer avec copy?
    Par daknoom dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 03/02/2005, 19h41
  5. [Date][SQL date][Format] insertion d'une heure
    Par goulime dans le forum JDBC
    Réponses: 11
    Dernier message: 26/01/2004, 11h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo