Enregistrements de durées entre deux évènements

KevinF - Modifié par jordane45 le 6/12/2016 à 12:52
 KevinF - 9 déc. 2016 à 09:35
Bonjour à tous,
Je suis totalement novice en dev, mais pour les besoin de mon activité, je voudrai développer un petit programme simple pour le suivi d'activité.

Je m'explique:

Je travaille pour plusieurs clients et je voudrai compter le temps passé pour chacun.
J'ai donc fait un chrono avec plusieurs boutons (client 1 - Client 2 - Client 3 etc.).
L'idée, c'est que le chrono tourne, et se remette à 0 à chaque fois que je clique sur un client. (cette partie là fonctionne bien), mais j'aimerai qu'avant de se remettre à 0, la valeur qu'il y avait sur le chrono soit enregistrée avec le nom du client sur lequel j'ai cliqué, et c'est la que je bloque, je ne sais pas comment extraire la valeur affichée sur le chrono et l'enregistrée (en base de données, ou excel peut importe).

Si quelqu'un à un petit code magique ou des conseils, je lui en serait très reconnaissant.
Voilà pourl'instant ce que j'ai fait et qui fonctionne bien:
Public Class Form1
    Dim Time As Integer = 0


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

If Button1.Text = "Démarrer" Then
            Timer1.Start()
            Button1.Text = "Arrêter"
        Else
            Timer1.Stop()
            Button1.Text = "Démarrer"
        End If

End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Label1.Text = "00:00:00"
        Time = 0
    End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick

Time = Time + 1

Dim heures As Integer = Time \ 3600
        Dim minutes As Integer = (Time Mod 3600) \ 60
        Dim secondes As Integer = (Time Mod 3600) Mod 60

Label1.Text = heures.ToString("00") & ":" & minutes.ToString("00") & ":" & secondes.ToString("00")

End Sub

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Label1.Text = "00:00:00"
        Time = 0
        Timer1.Start()
    End Sub

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        Label1.Text = "00:00:00"
        Time = 0
        Timer1.Start()
    End Sub
End Class

EDIT : Ajout des balises de code

Merci par avance et bonne journée.

Kévin

9 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
6 déc. 2016 à 15:02
Bonjour

Tu peux proceder sans utiliser un timer mais en utilisant la
class timespane et deux variables datetime
aussi une class client qui contient les info pour le client

ex
 Private Class client
Public name As String
Public ladate As Date
Public elapshour As Integer
Public elapsminutes As Integer
Public elapsseconds As Integer
End Class
Private starttime As DateTime
Private endtime As DateTime
Private timeelapse As New TimeSpan
Private listclient As New List(Of client)


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

starttime = Date.Now

End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
'comme on a cliqué sur button2 donc il faut calculer le temps
'passé pour le client1 le button1
endtime = Date.Now
timeelapse = endtime - starttime
Dim theclient As New client
theclient.name = "client1"
theclient.ladate = Date.Now
theclient.elapshour = timeelapse.Hours
theclient.elapsminutes = timeelapse.Minutes
theclient.elapsseconds = timeelapse.Seconds
listclient.Add(theclient)
'on reprend pour le client suivant
starttime = Date.Now
End Sub
0
Bonjour,

Merci pour ce retour rapide, mais je comprends pas bien où se retrouvent les données ensuite?

Merci.

Kévin
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
6 déc. 2016 à 19:11
mais je comprends pas bien où se retrouvent les données ensuite?


pour l'instant il faut regrouper les données ensuite les enregistrer
d'abord tu dis
Je travaille pour plusieurs clients et je voudrai compter le temps passé pour chacun.
Je suis totalement novice en dev, mais pour les besoin de mon activité, je voudrai développer un petit programme simple pour le suivi d'activité.

chacun est novice au début mais avant de coder il faut savoir
que doit faire l'application dans les détails pas niveau code
le code viendra après
exemple de ce qui n'est pas clair
Est il possible que tu passes plus d'une fois avec le meme client ?
Ou sont écrits les noms des clients ? sur chaque bouton ?
Que fais tu si tu as un nouveau client ?
0
Bonjour,

Oui il est tout à fait possible même certain que je passe plusieurs dans la journée sur le même client.

Leur nom est bien indiqué sur chaque bouton, et lorsqu'il y a un nouveau client, j'ajoute un nouveau bouton.

Merci pour ton aide.

Kevin
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié par vb95 le 7/12/2016 à 18:11
Bonsoir KevinF
Tu dis :"Leur nom est bien indiqué sur chaque bouton, et lorsqu'il y a un nouveau client, j'ajoute un nouveau bouton"
Avec 5 ou 6 clients soit mais imagine 50 clients ! C'est le bazar sur ta Form !
Il vaut mieux travailler avec un tableau de clients ( un client par ligne) et quand tu sélectionnes un client tu fais démarrer le compteur de temps passé ! Quand tu arrêtes le compteur tu additionnes le temps passé au temps de ce client pour avoir le cumul des temps pour un même client .
Ensuite tu peux sélectionner un autre client et démarrer son compte de temps !
Évidemment à la fermeture du programme il faut enregistrer les clients et leurs temps respectifs pour les avoir à nouveau le lendemain lorsque tu ouvres le programme
Prévoir aussi un bouton pour ajouter un nouveau client et un autre bouton pour supprimer un client .
voilà les bases de ton projet
J'ai modifié le titre pour avoir un titre plus parlant : dis-moi si cela te convient ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
7 déc. 2016 à 18:48
D'octroyer un bouton par client n'est pas bon.
Si tu as 30 clients tu vas avoir 3O boutons et en plus
logiquement l'implementation de chaque bouton est le meme.
Tu devrais afficher la liste des clients avec un combobox et tu y
choisis un client et un bouton pour valider ton choix
Il te faut savoir si c'est le premier client ou autrement enregistrer
les données du client précedent.
Tu peux te servir d'un string vide
  Private previousclient  As string = string.empty
' l'implemention du bouton valider

Private Sub valider_Click(sender As Object, e As EventArgs) Handles valider.Click
'On verifie si c'est le premier client
If previousclient = string.empty then
starttime = Date.Now
'le client choisi avec le combo
previousclient = comboclient.text
else
'il y a un précedent client on calcule le temps écoulé
endtime = Date.Now
timeelapse = endtime - starttime
'on ajoute les donnnées dans la listclient
Dim theclient As New client
theclient.name = previousclient
theclient.ladate = Date.Now
theclient.elapshour = timeelapse.Hours
theclient.elapsminutes = timeelapse.Minutes
theclient.elapsseconds = timeelapse.Seconds
listclient.Add(theclient)
'avec le présent client
previousclient = comboclient.text
starttime = Date.Now
end if

end sub


aussi on a pas encore enregistrer la question est as tu une notion en base de données par ex Access ?
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
8 déc. 2016 à 10:13
Bonjour à tous,

Sans passer par la programmation, attribuer un classeur Excel pour chaque clients et l'ouvrir le temps de travail sur ce client, voir ceci:

http://www.vba-creations.fr/creations-vba/duree-d-ouverture-d-un-fichier

Je pense que c'est la solution la plus sage pour une personne qui n'a pas programmée. Et en plus l'utilisation d'un timer pendant de longues heures!
0
Bonjour cs_ShayW,

Merci pour ce conseil, effectivement je viens de faire les modification et cela semble bien plus pratique à gérer un le ComboBox.

J'y ai aussi ajouter un Label qui affiche le temps passé après la validation, juste histoire d'avoir un aperçu immédiat, et avec ta solution, l'application est aussi plus petit et peu tenir dans un coin de l'écran, c'était pas le but, mais c'est très appréciable ;)

Pour répondre à ta question, je n'ai que de vagues et lointaines notions en bases de données.

Je suis justement entrain d'ajouter une source de données Access au projet VB pour stocker le temps passé par client par jour / Semaine Puis mois.

Tout ça dans le but de sortir des Stats.

Dans l'idée, arrête moi si je me trompe, mais il faut que j'arrive à extraire ceci :

Dim theclient As New client
theclient.name = previousclient
theclient.ladate = Date.Now
theclient.elapshour = timeelapse.Hours
theclient.elapsminutes = timeelapse.Minutes
theclient.elapsseconds = timeelapse.Seconds
listclient.Add(theclient)

Et l'insérer dans une table? ou plusieurs?

Merci encore pour vos coups de main!

Kévin
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
8 déc. 2016 à 18:49
Dans l'idée, arrête moi si je me trompe, mais il faut que j'arrive à extraire ceci : Dim theclient As New client
theclient.name = previousclient

oui je te l'ai écrit dans le code du bouton valider
Et l'insérer dans une table? ou plusieurs?

selon ta question tu devrais lire
Tu as ici un cours sur les bases de données
http://plasserre.developpez.com/cours/vb-net/?page=bases-donnees1
0
Super merci!! Je vais lire tout ça, je vais bien finir par trouver mon bonheur :)
0
Rejoignez-nous