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 :

problème en testant la date dans un textbox [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2012
    Messages : 16
    Par défaut problème en testant la date dans un textbox
    bonjour!

    j'arrive plus à résoudre cet problème en testant la date dans textbox, le code marche très bien si je saisie "31/31/2017" ou "40/12/2017" ou "ABCD"; mais voilà le souci: si je saisie "123456" vb fait la correction automatique comme "03/01/2238", ou saisir "12/31/2017" l'auto-correction est "31/12/2017" là l'utilisateur risque d’enregistrer la fausse date. Et si je saisie "1234567890" vb renvoi le message d'erreur (erreur d’exécution '6': dépassement de capacité). quelqu'un pourra m'aider? merci pour vos aides les amis

    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
     
    Private Sub CommandButton1_Click()
        Dim L As Integer
        Dim objControl As Control
        Dim madate As Date
     
     
        Me.TextBox1.Text = Format(TextBox1, "dd/mm/yyyy")
     
     
        If Not IsDate(Me.TextBox1.Text) Then
                Me.TextBox1.Value = ""
                MsgBox "veuillez inserer la date normal", vbOKOnly + vbInformation, "VALIDATION"
                Exit Sub
     
        Else           'permettre d'inserer les saisies dans la feuille active
            If MsgBox("Confirmez-vous l'insertion de ce nouveau contact?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
     
                L = Sheets(Feuil1).Range("A" & Rows.Count).End(xlUp).Row + 1
     
                Range("A" & L).Value = TextBox1
     
            End If
        End If
                       'pour vider les textbox
        For Each objControl In UserForm1.Controls
            If TypeOf objControl Is MSForms.TextBox Then
                objControl.Text = ""
            End If
        Next
    End Sub

  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
    Bonjour
    déjà par rapport a ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not IsDate(Me.TextBox1.Text) Then
    tu ne devrait pas avoir ces erreurs

    ensuite dans la retranscription tu pourrait ajouter le formatage identique au textbox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ta cellule.value=format(textbox1.value,"dd/mm/yyyy")
    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
    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
    L'utilisation de la seule fonction Isdate pour contrôler la validité d'une date est insuffisante, du fait de la trop grande permissivité de VBA/Excel.
    que l'utilisateur étourdi saisisse par exemple par erreur "01/13/2000" (au lieu de "01/12/2000") et Isdate retournera True, mais en pensant que la saisie est alors "13/01/2000")
    Il est donc nécessaire de compléter par la vérification de ce que la valeur numérique de la concaténation des quatrième et cinquième caractères n'est pas supérieure à 12.
    ( je crois avoir déjà eu l'occasion d'en parler à différentes reprises).

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2012
    Messages : 16
    Par défaut
    Citation Envoyé par unparia Voir le message
    Bonjour
    L'utilisation de la seule fonction Isdate pour contrôler la validité d'une date est insuffisante, du fait de la trop grande permissivité de VBA/Excel.
    que l'utilisateur étourdi saisisse par exemple par erreur "01/13/2000" (au lieu de "01/12/2000") et Isdate retournera True, mais en pensant que la saisie est alors "13/01/2000")
    Il est donc nécessaire de compléter par la vérification de ce que la valeur numérique de la concaténation des quatrième et cinquième caractères n'est pas supérieure à 12.
    ( je crois avoir déjà eu l'occasion d'en parler à différentes reprises).
    bonjour unparia!

    oui tu as raison, en plus tu réveille mon pauvre cerveau!!!

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2012
    Messages : 16
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    Bonjour
    déjà par rapport a ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not IsDate(Me.TextBox1.Text) Then
    tu ne devrait pas avoir ces erreurs

    ensuite dans la retranscription tu pourrait ajouter le formatage identique au textbox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ta cellule.value=format(textbox1.value,"dd/mm/yyyy")
    rebonjour!

    merci à toi Patrick, j'ai essayé ton idée mais le problème persiste.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not IsDate(Format(Me.TextBox1.Text, "yyyy-mm-dd")) or Not CBool(InStr(Me.TextBox1.Text, "/")) Then MsgBox "Pas date"

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2012
    Messages : 16
    Par défaut
    Bonjour à tous !

    Merci pour tous vos aides, vous avez de la grande générosité les amis.

    Avec « isdate() » le problème toujours persiste, alors je ne l’utilise plus encore. Voici je combine « MID() » ; « Cbool() » ; « Instr() » ; « Right() » pour avoir une format date courte et ça marche.
    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
     
    Private Sub CommandButton1_Click()
     
        Dim L As Integer
        Dim barre As Integer
        Dim objControl As Control
        Dim Cell As Range
     
        barre = InStr(1, TextBox1, "/") + 1
     
    'tester la valeur de textbox1 pour le formater comme date courte
        If Not Mid(TextBox1, 1, 2) <= 31 Or Not Mid(TextBox1, 4, 2) <= 12 Or Not CBool(InStr(barre, TextBox1.Text, "/")) Or Not Right(TextBox1, 4) >= 2017 Then
                MsgBox "veuillez inserer la date normal", vbOKOnly + vbInformation, "VALIDATION"
                Exit Sub
     
        Else           'permettre d'inserer les saisies dans la feuille active
            If MsgBox("Confirmez-vous l'insertion de ce nouveau contact?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
     
                L = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row + 1
     
                    Range("A" & L).Value = TextBox1
            End If
        End If
     
    'pour vider les textbox
        For Each objControl In UserForm1.Controls
            If TypeOf objControl Is MSForms.TextBox Then
                objControl.Text = ""
            End If
        Next
     
    'Supprimer tous les espaces superflus (la cellule se formate en date courte)
    For Each Cell In ActiveSheet.UsedRange
        Cell = Application.WorksheetFunction.Trim(Cell)
    Next
     
    End Sub

  8. #8
    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
    Bonjour
    malgré que tu pense que c'est résolu je pense que tu devrais t'intéresser au bases

    et surtout laisser Excel et vba faire son boulot il le feront certainement mieux que toi

    regarde bien cet exemple animé tu verra que vba ne s'y trompe pas avec les dates quelque soit leur format

    la règle st simple

    si jour et mois <12 alors le mois c'est le milieu
    si mois >12 alors le mois c'est les deux premiers
    si tu tape la date exemple(2017/25/04) se sera interprété comme une erreur et donc pas une date car la règle pour ce format est "yyyy/mm/dd"
    c'est pas compliqué
    la preuve en démo
    Nom : demo.gif
Affichages : 1702
Taille : 289,7 Ko

    donc perso
    j'aurais fait les testes sur month(textboxX) ou day(textboxX)

    a mediter
    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

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2012
    Messages : 16
    Par défaut
    wow! vraiment intéressant!! merci beaucoup Patrick, c'est mieux plus que le mien

  10. #10
    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
    allez puisque personne ne te la montrer je le fait

    j'ai repris l'acabit de ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub CommandButton1_Click()
        Dim jour, année, mois
        If IsDate(TextBox1) Then
            jour = Day(TextBox1): mois = Month(TextBox1): année = Year(TextBox1):
            If MsgBox("Confirmez-vous l'insertion de ce nouveau contact?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
                With Sheets("Feuil1"): .Range("A" & .Cells(Rows.Count, 1).End(xlUp).Row + 1).Value = DateSerial(année, mois, jour): End With
                TextBox1.Value = DateSerial(année, mois, jour)    'on corige meme le textbox pour le fun
            End If
        Else
            MsgBox "veuillez inserer la date normal", vbOKOnly + vbInformation, "VALIDATION"
        End If
    End Sub
    voila maintenant essaie de taper:
    08052017 ' te donnera le message d'erreur "veuillez inserer la date normal",(il mange les séparateurs)
    ou
    05/042017 ' te donnera le message d'erreur "veuillez inserer la date normal",(il manque le separateur de l'année)
    ou
    40/04/2017 ' te donnera le message d'erreur "veuillez inserer la date normal",( il n'y a jamais eu 40 dans un mois)
    ou
    2017/08/04 ' te donnera le message d'erreur "veuillez inserer la date normal",( tout simplement par ce que le isdate teste les date au format Français )
    PAR CONTRE SI TU TAPE !!!!
    21/04/17 'c'est ok
    ou
    04/21/2017 c'est ok
    non seulement ces formats seront bons mais en plus !!! ca te les met au bon format dans la cellule et en bonus dans le textbox

    comme quoi il est inutile d'essayer de réinventer la roue je suis étonné vraiment que certains ne te l'ai pas dit

    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

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2012
    Messages : 16
    Par défaut
    ça marche très bien, si on tape 12/31/2017 il rectifie automatique 31/12/2017, très bien et merci! merci!......et merci beaucoup!

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

Discussions similaires

  1. Problème test d'un champ dans un Textbox
    Par porci82 dans le forum IHM
    Réponses: 5
    Dernier message: 01/06/2007, 09h29
  2. Problème d'affichage de date dans un Label
    Par L'aigle de Carthage dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 04/05/2007, 09h00
  3. [C#]Problème d'affichage de données dans ma textbox
    Par brazilia28 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 25/04/2007, 19h46
  4. Problème d'affichage de date dans une base de donnée
    Par Gouyon dans le forum C++Builder
    Réponses: 7
    Dernier message: 11/04/2007, 07h57
  5. [DisplayTag] Problème pour trier les dates dans un tableau
    Par Pascale38 dans le forum Taglibs
    Réponses: 13
    Dernier message: 01/09/2006, 09h58

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