Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/10/2011, 11h29   #1
Invité régulier
 
Homme Adrien
Inscription : août 2011
Messages : 48
Détails du profil
Informations personnelles :
Nom : Homme Adrien
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 48
Points : 7
Points : 7
Par défaut masque de saisie pour un textbox

Bonjour,

Je souhaite que des utilisateurs entrent une date dans un textbox au format hh:mm. J'ai donc utilisé la méthode d'ouskel'n'or dans cette discussion.

Pour leur simplifer la tache j'aimerais que ":" se mette automatiquement lorsqu'ils saisissent "hh".

J'ai donc utilisé la méthode de Dolphy 35 également.

Cependant celle ci a une limite => lorsque l'on tape "hh:mm" si l'on fait une erreur, il est impossible d'éffacer "hh:".

Avez vous une solution. Merci.
PULEDDA Adrien
puledad1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2011, 21h42   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 905
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 905
Points : 7 199
Points : 7 199
Bonjour,

Ci dessous une autre méthode pour la saisie des heures

Code :
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
 
Dim StrTexte As String
 
Private Sub TextBox1_Change()
StrTexte = TextBox1.Text
End Sub
 
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
 
Select Case KeyAscii
    Case 48 To 57
        If Len(StrTexte) = 2 Then StrTexte = StrTexte & ":"
        Select Case Len(StrTexte) + 1
            Case 1
                If KeyAscii < 48 Or KeyAscii > 50 Then KeyAscii = 0
            Case 2
                If Left(StrTexte, 1) = 1 Then
                    If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0
                Else
                    If KeyAscii < 48 Or KeyAscii > 52 Then KeyAscii = 0
                End If
            Case 4
                If KeyAscii < 48 Or KeyAscii > 53 Then KeyAscii = 0
            Case 5
                If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0
 
            Case Is > 5
                KeyAscii = 0
        End Select
        If KeyAscii = 0 Then Exit Sub
        StrTexte = StrTexte & Chr(KeyAscii)
        TextBox1.Text = StrTexte
End Select
KeyAscii = 0
End Sub
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 01h40   #3
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Bonjour,

Plus lourd, mais très ergonomique, c'est de dessiner carrément ton masque de saisie en fonction de ce qui doit être rentré genre :

1 textbox pour les heures, un pour le minutes etc... et de coder en conséquence, ça peut faire très pro si graphiquement bien fait, tu mets le séparateur ":" ou "/" en label entre les textbox etc..

cordialement,

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 22h16   #4
Invité régulier
 
Inscription : octobre 2008
Messages : 2
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 2
Points : 7
Points : 7
Bonsoir à tous,

Dans l'Userform :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'evenement LostFocus utilisé, ainsi la procédure s'exécute lors
'lors de la perte du focus par le contrôle txtHeure
'cette procédure appelle la fonction check_HourFormat
 
'si check_HourFormat = VRAI (True), elle formate le txtHeure  dans la forme hh:mm
    If TextBox1.Value = "" Then Exit Sub
    If Not Check_hourFormat(TextBox1.Value) Then
        MsgBox "le format de l'heure saisie n'est pas valide", vbExclamation, "Erreur de saisie"
        TextBox1.Value = ""
        Cancel = True
    Else
        TextBox1 = Left(TextBox1.Value, 2) & ":" & Right(TextBox1.Value, 2)
    End If
End Sub
 
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    'Dans le TextBox, autorise uniquement les touches numériques
    KeyAscii = AutoriseFrappe(KeyAscii)
End Sub
Dans un module standard :
Code :
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
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
 
Public Function AutoriseFrappe(ByVal k As Integer) As Integer
    'Autorise uniquement les touches numériques
    Select Case k
    Case Is < 48, Is > 57       'différent de 0 à 9
        k = 0
    End Select
    AutoriseFrappe = k
End Function
Je n'en revendique pas la paternité.

Klin89
Klin89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h05.


 
 
 
 
Partenaires

Hébergement Web