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 :

Transformer une saisie de 3 chiffres en date et heure [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut Transformer une saisie de 3 chiffres en date et heure
    Bonjour à tous,

    J'aimerais à l'aide de la fonction :

    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
    Public Function Check_hourFormat(m As String) As Boolean
    'Fonction permettant de vérifier l'heure entrée dans un textbox par un
    'utilisateur est de la forme hhmm
    'checkformat renvoi 0 pour une saisie conforme, sinon 1
    Dim hr As Integer 'variable des heures
    Dim min As Integer 'variable des minutes
        If Len(m) < 4 Then Exit Function    'si la valeur saisie par l'utilisateur est inférieur à
                                            '4 caractères, alors Check_Hourformat non conforme
        If m Like "##:##" Then m = Left(m, 2) & Right(m, 2)
        If m Like "####" Then
            hr = Fix(m / 100)       ' permet de récupérer la partie concernant les heures
            min = m - (hr * 100)    ' permet de récupérer la partie concernant les minutes
            If hr > 23 Or min > 59 Then Exit Function   'Vérifications des heures et minutes entrées
            Check_hourFormat = True
        End If
    End Function
    Trouvée ici :

    http://www.developpez.net/forums/d11...aisie-textbox/

    Pouvoir saisir 3 chiffres dans un TextBox, après la fonction complète le format en ajoutant un zéro devant le premier chiffre :

    Ex : Si je saisie "932", dans le TextBox, le texte se transformeras en "09:32"

    Parce que dans un cas pareil, la fonction déclenche une erreur !

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour !

    Extraire la partie de droite avec la fonction Right

    puis la partie de gauche avec la fonction Left en retirant 2 à la longueur initiale de la chaine (fonction Len)

    et enfin concaténer les deux parties avec les deux-points via l'opérateur &; voir aussi les fonctions Format, TimeSerial

    : Manipuler les chaînes de caractères en VB6 et VBA Excel

    __________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    __________________________________________________________________________________________________
    Tous unis, tous Charlie

  3. #3
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut
    Bonjour Marc-L,

    j'ai essayé de modifier le code pour prendre en charge le cas de la saisie de 3 chiffres, en complétant pas un zéro devant.

    Mais sa déclenche toujours une erreur !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        If Len(m) < 3 Then Exit Function    'si la valeur saisie par l'utilisateur est inférieur à
    '4 caractères, alors Check_Hourformat non conforme
        If m Like "##:##" Then m = Left(m, 2) & Right(m, 2)
        If m Like "###" Then m = "0###"
        If m Like "####" Or m Like "0###" Then
            hr = Fix(m / 100)       ' permet de récupérer la partie concernant les heures
            min = m - (hr * 100)    ' permet de récupérer la partie concernant les minutes
            If hr > 23 Or min > 59 Then Exit Function   'Vérifications des heures et minutes entrées
            Check_hourFormat = True
        End If

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 921
    Points : 28 907
    Points
    28 907
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Que veux-tu exactement ?
    J'ai compris que si l'on entre dans un TextBox un nombre de trois ou quatre chiffres le format nombre doit être transformé en décimal (une heure en Excel est comprise entre 0 et 1). Soit Exemple 930 doit donné 09:30
    Par contre est-ce dans le TextBox lui-même que le format doit être renvoyé ou bien dans une cellule Excel ?
    Et je suppose qu'il doit être possible d'entrer deux voir un chiffre. 30 -> 00:30

  5. #5
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut
    Bonjour Philippe,

    Citation Envoyé par Philippe Tulliez Voir le message
    si l'on entre dans un TextBox un nombre de trois ou quatre chiffres le format nombre doit être transformé en décimal (une heure en Excel est comprise entre 0 et 1). Soit Exemple 930 doit donné 09:30
    Exactement ça !

    Par contre est-ce dans le TextBox lui-même que le format doit être renvoyé ou bien dans une cellule Excel ?
    Le format devra-être retourner dans le TextBox.

    Et je suppose qu'il doit être possible d'entrer deux voir un chiffre. 30 -> 00:30
    Oui, c'est une possibilité pour le cas de minuit (00:00)

  6. #6
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Demo()
        Const TXT = "932"
        MsgBox Left(TXT, Len(TXT) - 2) & ":" & Right(TXT, 2)
    End Sub
    En dehors du tutoriel, suffit pourtant juste de lire l'aide VBA intégrée des fonctions Format, TimeSerial, …
    C'est comme les LEGO, suffit d'emboîter ‼

    __________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    __________________________________________________________________________________________________
    Tous unis, tous Charlie

  7. #7
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut
    En retour j'aurais : 9:32 est non pas 09:32 (Compléter avec le zéro devant le 9)

  8. #8
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par apt Voir le message
    En retour j'aurais : 9:32 est non pas 09:32 (Compléter avec le zéro devant le 9)
    Franchement ?????????????????????????????

    juste à mettre cela:

    au lieu de:


    Un clic sur un mot-clef et

    Des fois, je me dis...

  9. #9
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut
    Bonsoir Clement,

    9:32 ce n'est pas une constante mais qu'un exemple de saisie dans un TextBox avec 3 chiffres

  10. #10
    Membre du Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Octobre 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 24
    Points : 46
    Points
    46
    Par défaut
    Besoin d'aide pour ajouter un 0 dans une chaîne?. Je suis sur que tu peux réussir par toi même. Les fonctions explquées par Marc-L doivent te permettre de le faire à bon escient.

  11. #11
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par apt Voir le message
    En retour j'aurais : 9:32 est non pas 09:32 (Compléter avec le zéro devant le 9)
    PEBKAC

    Tu nous niaises ? Ça ne prend pas la tête à Papineau pour comprendre que entres 0932 dans ton TextBox sans aucun autre chichi.

    Ensuite tu prends

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Demo()
         TXT =CStr(textbox1.value)
         MsgBox Left(TXT, Len(TXT) - 2) & ":" & Right(TXT, 2)
    End Sub
    P : Problem
    E : Exists
    B : Between
    K : Keyboard
    A : And
    C : Chair

  12. #12
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut
    Bonsoir à tous,

    Voila ce que j'ai tenté de modifier et ça marche !

    J'ai ajouté cette ligne dans la fonction Check_hourFormat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If m Like "###" Then m = "0" & Left(m, Len(m) - 2) & Right(m, 2)
    pour que le TextBox prend en charge la saisie de 3 chiffres.

    Elle de devient :

    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
    Public Function Check_hourFormat(m As String) As Boolean
    'Fonction permettant de vérifier l'heure entrée dans un TextBox par un
    'utilisateur est de la forme hhmm
    'checkformat renvoi 0 pour une saisie conforme, sinon 1
        Dim hr As Integer    'variable des heures
        Dim min As Integer    'variable des minutes
        If Len(m) < 3 Then Exit Function    'si la valeur saisie par l'utilisateur est inférieur à
    '3 caractères, alors Check_Hourformat non conforme
        If m Like "##:##" Then m = Left(m, 2) & Right(m, 2)
        If m Like "###" Then m = "0" & Left(m, Len(m) - 2) & Right(m, 2)   '"0###"
        If m Like "####" Then
            hr = Fix(m / 100)       ' permet de récupérer la partie concernant les heures
            min = m - (hr * 100)    ' permet de récupérer la partie concernant les minutes
            If hr > 23 Or min > 59 Then Exit Function   'Vérifications des heures et minutes entrées
            Check_hourFormat = True
        End If
    End Function
    Et dans l’événement TextBox2_Exit(), j'ai ajouté cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox2 = Format(Left(TextBox2.Value, Len(TextBox2.Value) - 2), "00") & ":" & Right(TextBox2.Value, 2)
    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
    Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    'evenement LostFocus utilisé, ainsi la procédure s'exécute
    'lors de la perte du focus par le contrôle TextBox2
    'cette procédure appelle la fonction check_HourFormat
     
    'si check_HourFormat = VRAI (True), elle formate le TextBox2 dans la forme hh:mm
        If TextBox2.Value = "" Then Exit Sub
        If Not Check_hourFormat(TextBox2.Value) Then
            MsgBox "le format de l'heure saisie n'est pas valide", vbExclamation, "Erreur de saisie"
            TextBox1.Value = ""
            Cancel = True
        Else
            TextBox2 = Format(Left(TextBox2.Value, Len(TextBox2.Value) - 2), "00") & ":" & Right(TextBox2.Value, 2)
        End If
    End Sub
    Merci pour vous tous.


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

Discussions similaires

  1. [VBA] Sur une saisie oui/non, stocker la date
    Par PhNou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/02/2008, 10h42
  2. [excel] transformer une date
    Par arcane dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/04/2006, 12h00
  3. transformation d'une somme ecrite en chiffre => lettres
    Par Hamza dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 01/04/2006, 19h24
  4. formater une saisie de date...
    Par Empty_body dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 16/01/2006, 22h31
  5. Réponses: 2
    Dernier message: 03/10/2005, 16h23

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