Aide création userform

Lasmal

XLDnaute Nouveau
Bonjour à tous,

Je souhaiterais de l'aide pour la finalisation d'un userform à compléter par des utilisateurs.

J'ai bien avancé, mais je rencontre quelques difficultés :
* J'ai du mal à mettre en place tous les contrôles (saisie numérique, champs vides...)
* J'obtiens des messages d'erreurs concernant les end if sans if

- Tous les champs (TEXBOX) doivent-être obligatoirement remplis
- Le résultat du temps journalier doit s'afficher automatiquement en fonction de la saisie

Quelqu'un pourrait-il m'aider SVP ?
Merci
:)
 

Pièces jointes

  • classeur_Préparation.xlsm
    27.8 KB · Affichages: 75
Dernière modification par un modérateur:

Lasmal

XLDnaute Nouveau
Re : Aide création userform

M12,

C'est une bonne idée ta proposition'
Seulement, je tiens impérativement à conserver la séparation des Heures (HH) et des minutes (MN)
--> Ces données utilisées telles quelles, sont importantes car elles sont reprises dans un fichier plus complet. D'où l'intérêt de l'utilisation des centièmes d'heures

- Je voudrais également que s'affiche dans le userform, le résultat du temps journalier pour vérification avant validation par l'utilisateur.
 

grisan29

XLDnaute Accro
Re : Aide création userform

bonsoir Lasmal,MJ12 et le forum

que ce soit le fichier de M12 d'ici où M12 sur l'autre forum mon avis sera le même je serai pour mettre un message d'avertissement si le format d'heure n'est pas correct j'ai essayer avec 1 et 2 et 3 et 4 et résultat 0
 

grisan29

XLDnaute Accro
Re : Aide création userform

bonsoir lasmal
voici un code trouvé avec notre ami commun google sur lequel j'ai remplacer textbox1 par H_Arrivée et ca fonctionne et qui empêche d'écrire plus de 4 chiffres et le passage a l'autre textbox montre le code rectifier le 1er
Code:
Private Sub H_Arrivee_Afterupdate()
Dim tString As String
With H_Arrivee
    'Vérifie si l'utilisateur met les deux-points ou non
   If InStr(1, .Value, ":", vbTextCompare) = 0 Then
        'Sinon, faites la série de 4 chiffres et insérez des deux-points
       tString = Format(.Value, "0000")
       'autrement le code insère les ":"entre les 2 chiffres
        tString = Left(tString, 2) & ":" & Right(tString, 2)
       
        H_Arrivee.Value = Format(TimeValue(tString), "HH:MM")
    Else
        'Autrement, prenez la valeur comme donné
       .Value = Format(.Value, "hh:mm")
    End If
End With
End Sub

bon je te laisse le faire pour les autres horaires
 
Dernière édition:

grisan29

XLDnaute Accro
Re : Aide création userform

bonjour Lasmal

je n'arrive pas a ce que le calcul se fasse tout seul, donc j'ai posé un bouton pour le faire et cela fonctionne en gardant le code que je t'ai mis plus haut
et voici ton classeur telque

bon j'ai modifier le code du bouton avec la protection que vous aviez installer en msgbox mais j'y ai rajouter le droit de contrôler ses horaires en les réinscrivant
Code:
Private Sub CommandButton1_Click()
 Total_Heure.Value = Format((CDate(H_Depart_Dejeuner.Value) - CDate(H_Arrivee.Value)) + (CDate(H_Sortie.Value) - CDate(H_Retour_Dejeuner.Value)), "hh:mm")
 If CDate(Total_Heure) > "12:00" Then
            MsgBox "le nombre d'heures par jour doit être inférieur ou égal à 12h !Veuillez recommencer!", vbCritical
            Me.H_Arrivee.SetFocus
            Me.H_Depart_Dejeuner.Value = ""
            Me.H_Retour_Dejeuner.Value = ""
            Me.H_Sortie.Value = ""
            Me.H_Arrivee.Value = ""
            Me.Total_Heure.Value = ""
            Exit Sub
            
        
        End If
End Sub
 

Pièces jointes

  • Copie de classeur_Préparation2-1.xlsm
    26.6 KB · Affichages: 60
Dernière édition:

Lasmal

XLDnaute Nouveau
Re : Aide création userform

Hello '

Je suis preneur de ta proposition Grisan :)
Cette idée d'un bouton lançant le calcul me convient.

Etant donné que les textbox ont été nommées librement, je n'arrive pas à mettre le bon code vba pour que s'affichent les données précédemment saisies dans le userform.

J'ai essayé sans succès :
-------------------------------
Private Sub UserForm1_Activate()
Prenom = Worksheets("Paramètres").Range("D5")
Hour(H_Arrivee.Value) = Worksheets("Paramètres").Range("D18")
Minute(H_Arrivee.Value) = Worksheets("Paramètres").Range("E18")
Hour(H_Depart_Dejeuner) = Worksheets("Paramètres").Range("D19")
Minute(H_Depart_Dejeuner) = Worksheets("Paramètres").Range("E19")
Hour(H_Retour_Dejeuner) = Worksheets("Paramètres").Range("D20")
Minute(H_Retour_Dejeuner) = Worksheets("Paramètres").Range("E20")
Hour(H_Sortie) = Worksheets("Paramètres").Range("D21")
Minute(H_Sortie) = Worksheets("Paramètres").Range("E21")
Hour(Total_Heure) = Worksheets("Paramètres").Range("D11")
Minute(Total_Heure) = Worksheets("Paramètres").Range("E11")
End Sub
---------------------------------------------

Comment faire ?
J'ai joint un nouveau fichier sur lequel avancer
 

Pièces jointes

  • aide-creation-userform-copie-de-classeur_preparation4.xlsm
    30.5 KB · Affichages: 59
Dernière modification par un modérateur:

M12

XLDnaute Accro
Re : Aide création userform

Re,
ENREGISTRER et ANNULER

Tu remplaces simplement tes UNLOAD ME en USERFORM1.HIDE sur les codes de ENREGISTRER et ANNULER et à la prochaine ouverture tu auras les anciens indices
 

Lasmal

XLDnaute Nouveau
Re : Aide création userform

Bonjour '

J'ai suivi tes conseils mais :
- lors de la saisie du formulaire, si j'utilise la touche entrée pour tabuler dans les champs : j'obtiens un message d'erreur à la ligne écrite en rouge
- les données ne sont pas reportées dans le userform

----------------------------------------------------------

Private Sub Btn_Annuler_Click()
useform1.Hide
End Sub
Private Sub Btn_Enregistre_Click()
' on vérifie que le prénom a été saisi
If Len(Prenom.Text) = 0 Then
MsgBox "La saisie du Prénom est obligatoire !", vbCritical
Me.Prenom.SetFocus
Exit Sub
Else
' on vérifie que les heures ont été saisies
If H_Arrivee = "" Then
MsgBox "La saisie des horaires est obligatoire !", vbCritical
'Me.H_Arrivee.SetFocus
Exit Sub
Else
If H_Depart_Dejeuner = "" Then
MsgBox "La saisie des horaires est obligatoire !", vbCritical
'Me.H_Depart_Dejeuner.SetFocus
Exit Sub
Else
If H_Retour_Dejeuner = "" Then
MsgBox "La saisie des horaires est obligatoire !", vbCritical
'Me.H_Retour_Dejeuner.SetFocus
Exit Sub
Else
If H_Sortie = "" Then
MsgBox "La saisie des horaires est obligatoire !", vbCritical
' Me.H_Sortie.SetFocus
Exit Sub
Else
If CDate(Total_Heure) > "12:00" Then
MsgBox "le nombre d'heures par jour doit être inférieur ou égal à 12h00 !", vbCritical
' Me.H_Arrivee.SetFocus
Exit Sub
Else
Sheets("Paramètres").Activate
minNum = Minute(currTime)
Cells(5, 4) = Prenom.Value
Cells(18, 4) = Hour(H_Arrivee.Value)
Cells(18, 5) = Minute(H_Arrivee.Value)
Cells(19, 4) = Hour(H_Depart_Dejeuner.Value)
Cells(19, 5) = Minute(H_Depart_Dejeuner.Value)
Cells(20, 4) = Hour(H_Retour_Dejeuner.Value)
Cells(20, 5) = Minute(H_Retour_Dejeuner.Value)
Cells(21, 4) = Hour(H_Sortie.Value)
Cells(21, 5) = Minute(H_Sortie.Value)
Cells(11, 4) = Hour(Total_Heure.Value)
Cells(11, 5) = Minute(Total_Heure.Value)
End If
End If
End If
End If
End If
End If
useform1.Hide
End Sub

Private Sub CommandButton1_Click()
Total_Heure.Value = Format((CDate(H_Depart_Dejeuner.Value) - CDate(H_Arrivee.Value)) + (CDate(H_Sortie.Value) - CDate(H_Retour_Dejeuner.Value)), "hh:mm")
End Sub

Private Sub Total_Heure_change()

If CDate(Total_Heure) > "12:00" Then
MsgBox "le nombre d'heures par jour doit être inférieur ou égal à 12h !", vbCritical
Me.H_Arrivee.SetFocus
Exit Sub
End If
End Sub
Private Sub prenom_Change()
Prenom.Value = UCase(Prenom.Value)
End Sub
Private Sub H_Arrivee_Afterupdate()
Dim tString As String
With H_Arrivee
'Vérifie si l'utilisateur met dans des deux-points ou non
If InStr(1, .Value, ":", vbTextCompare) = 0 Then
'Sinon, faites la série de 4 chiffres et insérez des deux-points
tString = Format(.Value, "0000")
'autrement le code insère les ":"entre les 2 chiffres
tString = Left(tString, 2) & ":" & Right(tString, 2)

H_Arrivee.Value = Format(TimeValue(tString), "HH:MM")
Else
'Autrement, prenez la valeur comme donné
.Value = Format(.Value, "hh:mm")
End If
End With
End Sub
Private Sub H_Sortie_Afterupdate()
Dim tString As String
With H_Sortie
'Vérifie si l'utilisateur met dans des deux-points ou non
If InStr(1, .Value, ":", vbTextCompare) = 0 Then
'Sinon, faites la série de 4 chiffres et insérez des deux-points
tString = Format(.Value, "0000")
'autrement le code insère les ":"entre les 2 chiffres
tString = Left(tString, 2) & ":" & Right(tString, 2)

H_Sortie.Value = Format(TimeValue(tString), "HH:MM")
Else
'Autrement, prenez la valeur comme donné
.Value = Format(.Value, "hh:mm")
End If
End With
End Sub
Private Sub H_Depart_Dejeuner_Afterupdate()
Dim tString As String
With H_Depart_Dejeuner
'Vérifie si l'utilisateur met dans des deux-points ou non
If InStr(1, .Value, ":", vbTextCompare) = 0 Then
'Sinon, faites la série de 4 chiffres et insérez des deux-points
tString = Format(.Value, "0000")
'autrement le code insère les ":"entre les 2 chiffres
tString = Left(tString, 2) & ":" & Right(tString, 2)

H_Depart_Dejeuner.Value = Format(TimeValue(tString), "HH:MM")
Else
'Autrement, prenez la valeur comme donné
.Value = Format(.Value, "hh:mm")
End If
End With
End Sub
Private Sub H_Retour_Dejeuner_Afterupdate()
Dim tString As String
With H_Retour_Dejeuner
'Vérifie si l'utilisateur met dans des deux-points ou non
If InStr(1, .Value, ":", vbTextCompare) = 0 Then
'Sinon, faites la série de 4 chiffres et insérez des deux-points
tString = Format(.Value, "0000")
'autrement le code insère les ":"entre les 2 chiffres
tString = Left(tString, 2) & ":" & Right(tString, 2)

H_Retour_Dejeuner.Value = Format(TimeValue(tString), "HH:MM")
Else
'Autrement, prenez la valeur comme donné
.Value = Format(.Value, "hh:mm")
End If
End With
End Sub

Private Sub UserForm1_activate()
Prenom.Text = Sheets("Paramètres").Range("D5").Value
H_Arrivee.Text = Sheets("Paramètres").Range("G18").Value
H_Depart_Dejeuner = Sheets("Paramètres").Range("G19").Value
H_Retour_Dejeuner = Sheets("Paramètres").Range("G20").Value
H_Sortie = Sheets("Paramètres").Range("G21").Value
Total_Heure = Sheets("Paramètres").Range("G11").Value
End Sub

Private Sub UserForm_Click()

End Sub

---------------------------------------
 

grisan29

XLDnaute Accro
Re : Aide création userform

bonjour Lasmal, M12

pourquoi as tu mis heure et minutes devant tes noms de textbox car les textbox eux-mêmes ne se nomment pas comme cela

bon j'ai essayer sur la version que je t'ai envoyer
tu remplace tout ton userform activate que tu as fait par
Code:
Private Sub UserForm_Initialize()
 With Sheets("Paramètres")
    Me.Prenom.Value = .Range("D5")
    Me.H_Arrivee.Value = .Range("D18")
    Me.H_Depart_Dejeuner.Value = .Range("D19")
    Me.H_Retour_Dejeuner.Value = .Range("D20")
    Me.H_Sortie.Value = .Range("d21")
    Me.Total_Heure.Value = .Range("G13")
 End With
End Sub
et ca devrai fonctionner comme sur celui que j'ai essayer, bon le captage des cellules est peut être a revoir si ce ne sont pas les bonnes ou en ajouter

pour en revenir a ton code précédent tel que tu l'as écrit ne pouvais fonctionner
Code:
Hour(H_Arrivee.Value) = Worksheets("Paramètres").Range("D18")
Minute(H_Arrivee.Value) = Worksheets("Paramètres").Range("E18")
hormis hour(...) qui ne servent a rien comme je l'ai dit, le H_Arrivee ne peux pas se charger 2 fois de la même cellule
 

Discussions similaires

Réponses
64
Affichages
5 K

Statistiques des forums

Discussions
311 733
Messages
2 082 009
Membres
101 865
dernier inscrit
MLL