Contrôle poussé des saisies dans Userform

Salut les amis,

Voudriez-vous, s'il vous plaît, me donner un petit coup de main sur mon projet actuel ?

Je voudrais remplir des cellules excel à partir de textbox d'Userform, mais je rencontre quelques difficultés quant à trouver le bon moyen de contrôler les saisies d'heures. J'aurais aimé qu'au moment de la saisie dans le textbox, de l'heure de début du cours, comme pour l'heure de fin du cours :

1. qu'il ne puisse y avoir qu'un seul style d'entrée : hh:mm;

2. que des entrées comme 90:65 (qui est une heure impossible) ne puisse pas être saisie (or, c'est le cas); donc, que "hh" soit compris entre {0 et 23} les heures d'une journée, que "mm" soit {0; 59} selon la minute de l'heure;

3. qu'il ne soit pas possible de séparer dans l'inscription "hh" et "mm" autrement que par ":" (donc que l'entrée "08h24" par ex., ne puisse pas passer);

4. que les entrées non-conformes, à cause du séparateur heure/minute, ou des valeurs heure ou minutes, soient soit identifiées et notifiées par message d'erreur pour rectification avant enregistrement.

Je vous serez très reconnaissant de m'accorder de votre attention, et, pour idée, je vous fais parvenir un bout de mon code du bouton "Enregistrer les entrées", avec les commentaires dedans.

Merci.

Private Sub CommandButton2_Click()

If DateSaisie.Value <> "" Then 'si la textbox DateSaisie n'est pas vide, alors on continue la procédure

Else 'sinon

MsgBox "Veuillez renseigner la date du cours" 'affichage de ce Msgbox

Exit Sub 'on sort de la procédure, donc on inscrit rien

End If 'fin de la condition

If Etudiant.Value <> "" Then

Else

MsgBox "Veuillez renseigner le nom de l'étudiant"

Exit Sub

End If

If Début.Value <> "" Then

Else

MsgBox "Veuillez renseigner l'heure de début du cours"

Exit Sub

End If

If Fin.Value <> "" Then

Else

MsgBox "Veuillez renseigner l'heure de la fin"

Exit Sub

End If

Sheets("BdD").Rows("2:2").Select 'aller à la cellule de laquelle une nouvelle ligne doit-être créée

Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 'création de la nvelle ligne pour écriture

Sheets("BdD").[B2] = DateSaisie 'écriture des valeurs saisies dans les cellules correspondantes de la feuille "BdD"

Sheets("BdD").[C2] = Etudiant 'écriture des valeurs saisies dans les cellules correspondantes de la feuille "BdD"

Sheets("BdD").[D2] = Langue 'écriture des valeurs saisies dans les cellules correspondantes de la feuille "BdD"

Sheets("BdD").[E2] = Début 'écriture des valeurs saisies dans les cellules correspondantes de la feuille "BdD"

Sheets("BdD").[F2] = Fin 'écriture des valeurs saisies dans les cellules correspondantes de la feuille "BdD"

Sheets("BdD").Range("G2").Select 'sélectionner la cellule correspondant au lieu de calcul du nbre d'heures

ActiveCell.FormulaR1C1 = "=RC[-1]-RC[-2]" 'calcul du nbre total d'heures, puis écriture dans cellule correspondante

Selection.Font.Bold = False 'ne pas mettre en gras

Selection.Font.Underline = xlUnderlineStyleNone 'ne pas souligner

With Selection 'appliquer à toute la sélection les caractéristiques suivantes

.HorizontalAlignment = xlCenter 'centre horizontal

.VerticalAlignment = xlBottom 'position verticale: bas

.WrapText = False 'renvoi automatique à la ligne: ne pas appliquer

.Orientation = 0 'inclinaison: aucune

.AddIndent = False 'aucune indentation

.IndentLevel = 0

.ShrinkToFit = False

.ReadingOrder = xlContext

.MergeCells = False

End With

ThisWorkbook.Save 'enregistrer les données saisies dans le formulaire des données

Unload Me '1ère étape pour saisie pour nvlles données: vider les textbox du formulaire de données

Données.Show '2ème étape: affichage du formulaire de données vidé

End Sub

bonjour,

Les macros sont des pièces d'horlogerie...

Pour avoir des réponses rapides et pertinentes, il serait bon que tu commences par ici :

Mettre le code entre balises et joindre un fichier avec le userForm KIVABIEN. Inutile de laisser les feuilles inutiles ou des bases de données complètes. Une ou deux lignes bidonnées suffisent la plupart du temps.

A+

bonjour

il faut voir ton fichier et voir si tu a mis un KeyPress

A+

Maurice

Salut les amis, bonjour à tous,

Je reviens vers toujours pour le même problème :

Voudriez-vous, s'il vous plaît, me donner un petit coup de main sur mon projet actuel ?

Je voudrais remplir des cellules excel à partir de textbox d'Userform, mais je rencontre quelques difficultés quant à trouver le bon moyen de contrôler les saisies d'heures. J'aurais aimé qu'au moment de la saisie dans le textbox, de l'heure de début du cours, comme pour l'heure de fin du cours :

1. qu'il ne puisse y avoir qu'un seul style d'entrée : hh:mm;

2. que des entrées comme 90:65 (qui est une heure impossible) ne puisse pas être saisie (or, c'est le cas); donc, que "hh" soit compris entre {0 et 23} les heures d'une journée, que "mm" soit {0; 59} selon la minute de l'heure;

3. qu'il ne soit pas possible de séparer dans l'inscription "hh" et "mm" autrement que par ":" (donc que l'entrée "08h24" par ex., ne puisse pas passer);

4. que les entrées non-conformes, à cause du séparateur heure/minute, ou des valeurs heure ou minutes, soient soit identifiées et notifiées par message d'erreur pour rectification avant enregistrement.

J'ai bien tenté l'instruction du type : textbox.value = format("Hh:nn:ss")

Seulement, ça ne fonctionne pas : à l'appui des touches chiffres, le curseur se déplace des heures aux minutes sans que je n'en comprenne vraiment la logique appliquée.

Et, voudriez-vous me donner l'instruction qui fonctionne et permet de n'obtenir que des heures entre 00:00 et 23:59, s'il vous plaît.

Merci pour vos efforts.

Xav.

Tu ne lis pas les réponses ! donc !

Salut MFerrand,

Je te rassure, j'ai bien lu les réponses apportées, mais, je n'y ai pas trouvé la solution.

Peut-être, fais-tu allusion au KeyPress... ? J'avoue que j'ai cherché un peu à comprendre le fonctionnement sur internet, mais sans arriver à comprendre. Peut-être faut-il que je signale que je ne suis que débutant en VBA, d'où mon insistance sur le même sujet que je n'arrive pas à résoudre.

Une aide me serait d'un très grand secours. Merci.

Xav.

galopin01 a écrit :

bonjour,

Les macros sont des pièces d'horlogerie...

Pour avoir des réponses rapides et pertinentes, il serait bon que tu commences par ici :

Mettre le code entre balises et joindre un fichier avec le userForm KIVABIEN. Inutile de laisser les feuilles inutiles ou des bases de données complètes. Une ou deux lignes bidonnées suffisent la plupart du temps.

A+


archer a écrit :

bonjour

il faut voir ton fichier et voir si tu a mis un KeyPress

A+

Maurice

MFerrand,

Comment est-ce qu'on met un KeyPress dans ce cas précis ? (pour l'heure et son format d'entrée ?)

Merci.

Xav.

bonjour,

La logique du forum c'est de commencer par lire les règles d'usages ici

Encadrer du code VBA par les balises Code (Sélectionner le code que tu viens de coller puis appuyer sur le bouton Code au-dessus de l'éditeur...) mais pour ce genre de question (avec UserForm) un fichier joint assez ressemblant à l'original est souhaitable.

Pour ma part, je ne répond presque jamais à une question formulée de manière notoirement insuffisante : Si vous n'avez pas de temps à perdre pour nous fournir un instrument de travail convenable, moi non plus.

A+

40saisieh.xlsm (23.61 Ko)

Salut galopin01,

Je te remercie pour ton attention, et voici, ci-joint, comme tu le suggères, et très précisément l'état de mon projet de gestion des heures de professeurs de langues. Comme tu pourras le constater, il est loin d'être terminé, car, je ne suis que débutant avec VBA. Pour l'instant, j'en suis à la déclaration des heures de début et de fin de cours, dans l'userform "données". En voyant la configuration des userform, en principe, tu devrais avoir une idée d'ensemble de la logique de gestion que je voudrais mettre en application, peut-être aussi pourras-tu m'aider à en venir à bout.

En gros, je voudrais que selon l'entrée d'un ID professeur ou étudiant, il y ait des données, soit à entrer dans "Données", soit des données concernant un étudiant à valider par celui-ci. Le tout devant renseigner une base de données dans la feuille "BdD" d'excel en indiquant que les heures sont à l'état de validation par l'étudiant, ou étape suivante : soumise à validation à la supervision, sauf si l'étudiant ne valide pas une heure, telle que renseignée dans "Données" par le professeur et demande alors une modification par celui-ci (une notification de la demande modification devra parvenir au Prof concerné et être mentionné dans le tableau dans la base de données "BdD" que je voudrais n'être accessible que par moi seul, l'administrateur du projet).

Je reste à ta disposition pour tout complément d'information.

Merci d'avance pour ton aide.

Xav.

Bonjour,

Je ne suis pas disponible pour ce sujet :

Je t'ai donné une routine pour la saisie des heures. A toi d'adapter à tes contrôles.

Voici le code modifié pour afficher la différence d'heures

Private Sub CommandButton1_Click()
Dim DD As Date, DF As Date
DD = CDate(Format(TextBox1, "HH:MM"))
DF = CDate(Format(TextBox2, "HH:MM"))
If Not DF > DD Then MsgBox "Heure de Fin incorrecte": Exit Sub
[A1] = DD
[A2] = DF
[A3] = CDate(Format(DF - DD, "HH:MM"))
Unload Me
End Sub

A+

Rechercher des sujets similaires à "controle pousse saisies userform"