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 :

Gérer le format introduit dans un InputBox


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de mat-tech
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 202
    Par défaut Gérer le format introduit dans un InputBox
    Bonjour le Forum,
    J’ai une superbe procédure de recherche, mais j'aimerai gérer au maximum les erreurs, donc :
    Dans cette procédure, je fais une recherche sur une colonne complète, les variable pour effectuer cette recherche provienne d'un InputBox et le problème est que si l'utilisateur introduit un mauvais format (ex : 01/15/2003 ou blablabla) il y a une erreur donc j'aimerai tester le format de la variable avant de commencer la recherche et je ne connais pas la syntaxe pour tester un format


    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    Private Sub rech()
     
    Dim i As Integer, Datedeb As Date, Datefin As Date
    Dim graph As Chart
     
    Application.ScreenUpdating = False
    If Sheets("Index").OptionButton10.Value = True Then
    Datedeb = Sheets("Index").TextBox1
    Datefin = Sheets("Index").TextBox2
    End If
     
    If Sheets("Index").OptionButton7.Value = True Then
    Datedeb = Date - 388
    Datefin = Date - 30
    End If
     
    du = Date
    au = Date
     
    'tester si les dates sont dans un format correct
    'If Datedeb OR Datefin <> DATE.Format Then 
    'MsgBox "Les dates doivent être dans un format JJ/MM/AAAA"
    'Exit Sub
    'End If
     
    If Datedeb >= Datefin Then
    MsgBox "la date de fin doit être postérieure à la date de début"
    Exit Sub
    End If
     
    With Sheets("Données")
        For i = 4 To .Cells(Rows.Count, 1).End(xlUp).Row
            If .Cells(i, 2) = Datedeb Then
                Ligdeb = i
                du = .Cells(i, 2)
                Exit For
            ElseIf .Cells(i, 2) > Datedeb Then
                Ligdeb = i - 1
                du = .Cells(i - 1, 2)
                Exit For
            End If
        Next
        For i = 4 To .Cells(Rows.Count, 1).End(xlUp).Row
            If .Cells(i, 2) = Datefin Then
                LigFin = i
                au = .Cells(i, 2)
                Exit For
            ElseIf .Cells(i, 2) > Datefin Then
                LigFin = i - 1
                au = .Cells(i - 1, 2)
                Exit For
            End If
        Next
    End With
     
    End Sub

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Pour "blablabla" tu peux tester avec isDate.
    Par contre pour le problème jour/mois, tout ce que tu peux faire est vérifier si ce que tu crois être le mois ne dépasse pas 12... pas suffisamment fiable car tu vas rater toutes les inversions où le jour est inférieur à 13.
    Le mieux serait encore de bien spécifier ce que tu attends dans le libellé de l'inputbox, éventuellement en mettant un exemple non ambigu.

  3. #3
    Membre confirmé Avatar de mat-tech
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 202
    Par défaut
    Oui je crois avoir trouvé une idée, je vais essayé d'ouvrir un calendrier lorsque je click sur les InputBox et récuppérer les valeurs de celles-ci

    Si une personne peut me dire comment ouvrir un calandrier selectionner la date et valider ca m'aiderait beaucoup.

    J'ai trouvé un control calandrier, je pensais en mettre 2 et jouer sur le paramtre .Visible et réccuperer la valeur, mais ca m'a l'aire tirer par les cheuveux non ?

    Merci

  4. #4
    Membre éclairé Avatar de casavba
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 464
    Par défaut
    Bien penser.

    Regarde le fichier joint tu trouveras peut être ton bonheur.

    Tiens moi au courant

  5. #5
    Membre confirmé Avatar de mat-tech
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 202
    Par défaut
    J'ai une erreur "Impossible de charger cette Objet car il n'est pas sur cette machine"
    Pour info j'utilise Excel 2003 Pro, sous Xp Pro SP3

  6. #6
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Tu peux créer un UserForm avec un calendrier, pour ce faire tu ajoutes le contrôle "Contrôle Calendrier xx.x", ensuite tu insères les codes suivants :


    Sinon concernant la vérification de la saisie de la date dans l'InputBox, cela devrait ressembler à ceci
    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
    Sub test_inputbox()
    Dim DateDeb
     
    recom:
    DateDeb = Application.InputBox("Veuillez introduire une date au format JJ/MM/AAAA", "Date de début")
     
    'si l'utilisateur clique sur "annuler"
    If DateDeb = False Then Exit Sub
     
    'si la date introduite est n'importe quoi sauf une date
    If IsDate(DateDeb) = False Then
        MsgBox "la date introduite n'est pas une date correcte"
        GoTo recom
    'si le format JJ/MM/AAAA n'est pas respecté
    ElseIf Not DateDeb Like "##/##/####" Then
        MsgBox "le format de la date introduite n'est pas correcte"
        GoTo recom
    'si MM dépasse 12, par exemple si l'utilisateur introduit 10/25/2008 ce qui est considéré comme le 25 octobre 2008
    ElseIf Mid(DateDeb, 4, 2) > 12 Then
        MsgBox "depuis quand une année compte t-elle plus que 12 mois ?"
        GoTo recom
    'si tout est ok on y go
    Else
        MsgBox "ok"
    End If
     
    End Sub
    Avec la solution du calendrier dans un UserForm cela rend l'erreur de saisie impossible et je trouve cette solution plus conviviale pour l'utilisateur
    .

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Citation Envoyé par fring Voir le message
    Avec la solution du calendrier dans un UserForm cela rend l'erreur de saisie impossible et je trouve cette solution plus conviviale pour l'utilisateur
    .
    Oui Fring, oui....
    Car ton autre solution (celle avec des elseif qui ne viennent que trop tard et ne seront donc même pas analysés pour peui que la 1ère condition soit vérifiée vraie) ne peut tenir ....
    (tu as écrit trop vite...)

  8. #8
    Membre confirmé Avatar de mat-tech
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 202
    Par défaut
    Franchement parfait, fonctionnent impecablement bien

    Merci Mr Fring

    PS tu as tout à fait raison pour l'utilistaion du Calendrier, c'est pour cela que j'ai pensait a cela tantot

  9. #9
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    Car ton autre solution (celle avec des elseif qui ne viennent que trop tard et ne seront donc même pas analysés pour peui que la 1ère condition soit vérifiée vraie) ne peut tenir ....
    (tu as écrit trop vite...)
    [EDIT]bin...j'ai pourtant vérifier toutes les combinaisons et les différentes vérifications se déroulent correctement.
    Mais comme le soulignait très bien Neupont, c'est pas fiable vu que l'utilisateur peut introduire dans l'Inputbox 02/04/2008 pour le 4 février

  10. #10
    Membre éclairé Avatar de casavba
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 464
    Par défaut
    Citation Envoyé par mat-tech Voir le message
    J'ai une erreur "Impossible de charger cette Objet car il n'est pas sur cette machine"
    Pour info j'utilise Excel 2003 Pro, sous Xp Pro SP3

    As-tu activer les références :

    '"Microsoft MonthView Control 6.0"
    '"Microsoft StatusBar control ,Version 6.0"

    Pourtant je l'ai marqué dans le module en tant que commentaire.

    Et franchement, la solution que j'ai proposé est meilleur et t'as pas besoin d'écrire une multitude de ligne de code, puisque l'utilisateur ne saisie pas, il choisit sa date dans le calendrier.

  11. #11
    Membre confirmé Avatar de mat-tech
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 202
    Par défaut
    J'ai bossé si tard la desssus hier que j'ai oublié de remercier Mr casavba pour sa solution qui fonctionne super bien et oui mes erreurs sont résolus.

    Encor une fois merci pour toutes vos propositions ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 29/01/2024, 16h32
  2. format date dans une inputbox
    Par adelsunwind dans le forum IHM
    Réponses: 1
    Dernier message: 16/02/2009, 20h48
  3. format date dans une inputbox
    Par adelsunwind dans le forum IHM
    Réponses: 2
    Dernier message: 27/01/2009, 00h10
  4. Réponses: 4
    Dernier message: 20/05/2008, 11h28
  5. Format heure dans Interbase
    Par Battomura dans le forum InterBase
    Réponses: 2
    Dernier message: 14/03/2003, 14h17

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