Calcule de heure dans textbox (VBA excel)
Résolu/Fermé
joze
-
5 avril 2006 à 19:06
aquarelle Messages postés 7141 Date d'inscription dimanche 8 avril 2007 Statut Modérateur Dernière intervention 19 décembre 2024 - 13 déc. 2007 à 00:04
aquarelle Messages postés 7141 Date d'inscription dimanche 8 avril 2007 Statut Modérateur Dernière intervention 19 décembre 2024 - 13 déc. 2007 à 00:04
A voir également:
- Calcule de heure dans textbox (VBA excel)
- Comment calculer la moyenne sur excel - Guide
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Déplacer une colonne excel - Guide
8 réponses
Armojax
Messages postés
1860
Date d'inscription
mercredi 19 janvier 2005
Statut
Membre
Dernière intervention
2 octobre 2024
1 528
6 avril 2006 à 18:44
6 avril 2006 à 18:44
Re, joze... Juste quelques petits réglages.
Il ne faut pas mettre le code dans la procédure d'initialisation du UserForm (Private Sub UserForm_Initialize). Cette procédure s'exécute au moment de l'affichage, alors qu'on n'est pas encore intervenu. A ce moment-là, rien n'est saisi dans les TextBox, et Cdate ne peut forcément pas en déduire une date/heure.
- Fais un initialize qui initialise les textbox à rien, pour qu'elles soient vides à l'affichage :
Private Sub TextBox2_AfterUpdate
qui s'exécute après la saisie dans la textbox2.
Si on laisse les choses comme je les ai dites, le résultat n'est pas formaté, c'est-à-dire que le résultat sera du genre :
- 17:48:00 (avec les secondes) si le résultat est inférieur à 24 heures,
- 31/12/1899 03:15:00 dans le cas contraire.
Pour formater avec seulement les heures et minutes, utilise la fonction Format.
Voici ce que ça peut donner :
S'il s'agit d'une soustraction d'heures, tu adaptes.
Si tu veux contrôler la saisie, il faut travailler sur du texte. Par exemple :
- pas plus de 5 caractères (utiliser la propriété MaxLength)
- deux caractères à droite numériques, et inférieurs à 60
- le précédent = ":"
etc.
Il ne faut pas mettre le code dans la procédure d'initialisation du UserForm (Private Sub UserForm_Initialize). Cette procédure s'exécute au moment de l'affichage, alors qu'on n'est pas encore intervenu. A ce moment-là, rien n'est saisi dans les TextBox, et Cdate ne peut forcément pas en déduire une date/heure.
- Fais un initialize qui initialise les textbox à rien, pour qu'elles soient vides à l'affichage :
Private Sub UserForm_Initialize() TextBox1.Value = "" TextBox2.Value = "" TextBox3.Value = "" End SubEnsuite, dans une autre procédure qui s'exécutera après la saisie dans les 2 premières textbox, tu mets le code que j'ai indiqué. Ça peut être, par exemple, la procédure
Private Sub TextBox2_AfterUpdate
qui s'exécute après la saisie dans la textbox2.
Si on laisse les choses comme je les ai dites, le résultat n'est pas formaté, c'est-à-dire que le résultat sera du genre :
- 17:48:00 (avec les secondes) si le résultat est inférieur à 24 heures,
- 31/12/1899 03:15:00 dans le cas contraire.
Pour formater avec seulement les heures et minutes, utilise la fonction Format.
Voici ce que ça peut donner :
Private Sub TextBox2_AfterUpdate() Dim H1 As Date Dim H2 As Date H1 = CDate(TextBox1.Value) H2 = CDate(TextBox2.Value) TextBox3.Value = Format(H1 + H2, "hh:mm") End Sub
S'il s'agit d'une soustraction d'heures, tu adaptes.
Si tu veux contrôler la saisie, il faut travailler sur du texte. Par exemple :
- pas plus de 5 caractères (utiliser la propriété MaxLength)
- deux caractères à droite numériques, et inférieurs à 60
- le précédent = ":"
etc.
ze95
Messages postés
11
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
26 avril 2006
6
Modifié le 13 déc. 2007 à 00:04
Modifié le 13 déc. 2007 à 00:04
Boujour Armojax merci de prendre le temp de me répondre.
J'ai saisi ce code et ça ne marche pas !
ça me marque:
" ERREUR D'EXECUTION '13': INCOMPATIBILITE DE TYPE
merci pour ton aide.
J'ai saisi ce code et ça ne marche pas !
ça me marque:
" ERREUR D'EXECUTION '13': INCOMPATIBILITE DE TYPE
Private Sub UserForm_Initialize() Dim H1 As Date Dim H2 As Date H1 = CDate(TextBox1.Value) H2 = CDate(TextBox2.Value) TextBox3.Value = H1 + H2 End Sub
merci pour ton aide.
Armojax
Messages postés
1860
Date d'inscription
mercredi 19 janvier 2005
Statut
Membre
Dernière intervention
2 octobre 2024
1 528
6 avril 2006 à 09:46
6 avril 2006 à 09:46
Bonjour joze,
Comme son nom l'indique, une textbox reçoit... du texte.
Donc tu ne peux pas additionner spontanément le contenu de 2 textbox.
Il faut convertir en date le résultat de la saisie, avec la fonction Cdate.
Tu peux définir 2 variables H1 et H2 comme des dates, les additionner et mettre le résultat dans la textbox3 :
Il te reste à gérer le format d'affichage, la gestion sur 12h ou 24h, le report d'un jour à l'autre...
Comme son nom l'indique, une textbox reçoit... du texte.
Donc tu ne peux pas additionner spontanément le contenu de 2 textbox.
Il faut convertir en date le résultat de la saisie, avec la fonction Cdate.
Tu peux définir 2 variables H1 et H2 comme des dates, les additionner et mettre le résultat dans la textbox3 :
Dim H1 As Date Dim H2 As Date H1 = CDate(TextBox1.Value) H2 = CDate(TextBox2.Value) TextBox3.Value = H1 + H2
Il te reste à gérer le format d'affichage, la gestion sur 12h ou 24h, le report d'un jour à l'autre...
blux
Messages postés
26724
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 mars 2025
3 332
6 avril 2006 à 17:02
6 avril 2006 à 17:02
Salut,
je pense qu'il faudrait transformer le résultat du calcul en texte avant de l'afficher :
je pense qu'il faudrait transformer le résultat du calcul en texte avant de l'afficher :
TextBox3.Value = TEXTE(H1 + H2) ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ze95
Messages postés
11
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
26 avril 2006
6
6 avril 2006 à 17:53
6 avril 2006 à 17:53
Salut Blux mercie pour ta réponse mais
Désoler ça ne fonctionne pas
ça me marque:
"ERREUR DE COMPILATION/ SUB OU FONCTION NON DEFINIE"
merci pour ton aide.
a+ze95
Désoler ça ne fonctionne pas
ça me marque:
"ERREUR DE COMPILATION/ SUB OU FONCTION NON DEFINIE"
merci pour ton aide.
a+ze95
ze95
Messages postés
11
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
26 avril 2006
6
6 avril 2006 à 19:49
6 avril 2006 à 19:49
Salut Armojax.
j'ai bien compris tes explications
je n'est plus d'erreur
mais l'osque j'execute mon formulaire
rien ne s'affiche dans le textBox3.
a+ze95
j'ai bien compris tes explications
je n'est plus d'erreur
mais l'osque j'execute mon formulaire
rien ne s'affiche dans le textBox3.
a+ze95
Armojax
Messages postés
1860
Date d'inscription
mercredi 19 janvier 2005
Statut
Membre
Dernière intervention
2 octobre 2024
1 528
6 avril 2006 à 23:40
6 avril 2006 à 23:40
Un exemple ici :
https://www.cjoint.com/?egxO7RQxrp
https://www.cjoint.com/?egxO7RQxrp
Armojax
Messages postés
1860
Date d'inscription
mercredi 19 janvier 2005
Statut
Membre
Dernière intervention
2 octobre 2024
1 528
>
Armojax
Messages postés
1860
Date d'inscription
mercredi 19 janvier 2005
Statut
Membre
Dernière intervention
2 octobre 2024
7 avril 2006 à 08:47
7 avril 2006 à 08:47
Un petit complément.
Essaie l'exemple que j'ai mis dans le post au-dessus. Chez moi il fonctionne.
MAIS... j'ai fait une bourde énorme, même si le résultat est correct.
Si l'heure de fin est inférieure à celle de début, on en déduit que l'heure de fin se situe le lendemain. Pour dire que c'est le lendemain, il faut ajouter 24 heures au résultat, soit 1 jour.
Dans mon code, j'ai machinalement ajouté 24 (j'ai fait ça vite, avant d'aller me coucher, ça doit être ça !).
Avec Excel et VBA, l'unité de mesure de temps est le jour, pas l'heure. Donc il suffit d'ajouter 1, et non pas 24.
Le résultat reste correct parce que le format masque la date, et ne montre que les heures et les minutes. Si on affichait les dates, on verrait qu'au lieu de finir le lendemain, on finirait à la même heure, mais 24 jours plus tard.
Donc, corrige...
Essaie l'exemple que j'ai mis dans le post au-dessus. Chez moi il fonctionne.
MAIS... j'ai fait une bourde énorme, même si le résultat est correct.
Si l'heure de fin est inférieure à celle de début, on en déduit que l'heure de fin se situe le lendemain. Pour dire que c'est le lendemain, il faut ajouter 24 heures au résultat, soit 1 jour.
Dans mon code, j'ai machinalement ajouté 24 (j'ai fait ça vite, avant d'aller me coucher, ça doit être ça !).
Avec Excel et VBA, l'unité de mesure de temps est le jour, pas l'heure. Donc il suffit d'ajouter 1, et non pas 24.
Le résultat reste correct parce que le format masque la date, et ne montre que les heures et les minutes. Si on affichait les dates, on verrait qu'au lieu de finir le lendemain, on finirait à la même heure, mais 24 jours plus tard.
Donc, corrige...
ze95
Messages postés
11
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
26 avril 2006
6
7 avril 2006 à 20:55
7 avril 2006 à 20:55
Un grand Merci à toi Armajax ainsi qu'a Blux
ça marche enfin et grace à vous deux
merci, ze95 a+
ps. je serais certainement contrain de vous poser d'autre questions suivant l'avancement de mon formulaire.
ça marche enfin et grace à vous deux
merci, ze95 a+
ps. je serais certainement contrain de vous poser d'autre questions suivant l'avancement de mon formulaire.
Salut à tous,
QQun pourrait il me donner la réponse à ce problème?
8jours 18 heures 2 minutes et 21 secondes
_ moins
1 jour 19 heures 17 minutes et 43 secondes?
Merci à tous
QQun pourrait il me donner la réponse à ce problème?
8jours 18 heures 2 minutes et 21 secondes
_ moins
1 jour 19 heures 17 minutes et 43 secondes?
Merci à tous
aquarelle
Messages postés
7141
Date d'inscription
dimanche 8 avril 2007
Statut
Modérateur
Dernière intervention
19 décembre 2024
1 303
13 déc. 2007 à 00:04
13 déc. 2007 à 00:04
Bonsoir,
Le mieux serait de créer ton propre post et d'y donner les explications sur la question qui te préoccupe.
En effet, cela facilite la lecture et les réponses à donner.
Si chacun vient sur un post pour y ajouter sa propre question, il est ensuite difficile de suivre les demandes et les solutions sans tout mélanger. Il y aussi un risque pour que les solutions, du coup, ne soient pas adaptées.
Merci de le comprendre.
Voici comment procéder : http://perso.orange.fr/rginformatique/section%20virus/demofairesontmessage.htm
NB : N'oublie pas d'être poli(e), respectueux (euse) et donne le maximum d'informations concernant ton problème
Bonne nuit
Le mieux serait de créer ton propre post et d'y donner les explications sur la question qui te préoccupe.
En effet, cela facilite la lecture et les réponses à donner.
Si chacun vient sur un post pour y ajouter sa propre question, il est ensuite difficile de suivre les demandes et les solutions sans tout mélanger. Il y aussi un risque pour que les solutions, du coup, ne soient pas adaptées.
Merci de le comprendre.
Voici comment procéder : http://perso.orange.fr/rginformatique/section%20virus/demofairesontmessage.htm
NB : N'oublie pas d'être poli(e), respectueux (euse) et donne le maximum d'informations concernant ton problème
Bonne nuit