IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

[VB]Problème d'heure de travail


Sujet :

VB 6 et antérieur

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 18
    Points : 6
    Points
    6
    Par défaut [VB]Problème d'heure de travail
    Je souhaiterai sortir dans ma datagrid que les données qui concerne l'équipe actuelle, pour celà j'ai utiliser cette fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sendreq "SELECT ID_Relever, Reference, Login_User, Quantite, Type_Relever, Disquette, Commentaire, HeureFin FROM Relever WHERE (Heuredevalidation IS NULL) and Login_user like '%" & txtlogin.Text & "%'"
    Donc je récupère toutes les données qui n'ont pas été valider et dont le login est égale à l'utilisateur actuelle.

    Mais pour que seul l'équipe actuelle voit sa production il faudrai ajouter la date du jour, mais le problème c'est qu'il y à une équipe qui travail la nuit et si je prend la date du jour à minuit les données vont disparaitre !

    Horaire des équipes
    5h à 13h
    13h à 21h
    21h à 5h

    je vois pas comment faire cette fonction, si quelqu'un à la solution ou une idée !

    merci d'avance à tous

  2. #2
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Chez moi, je ne trouve pas la fonction sendreq, dont je voudrais bien connaître la signification ?
    Peux-tu nous éclairer stp ? Profites-en pour nous éclairer également sur l'outil que tu utilises (VB ?, VBA ?.....???)
    Merci :

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    J'ai eu le problème et, après m'être beaucoup cassé la tête, n'ai pu le résoudre qu'en scindant le temps de travail en deux, partie j et partie J+1 et en scindant les journées en deux, matin/tantôt.
    Si quelqu'un a une idée plus brillante, je suis preneur.

    A+

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    je suis en vb

    pour sendreq c'est une simple fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Sub sendreq(req As String)
    If de.rsReleverNonValid.State = 1 Then de.rsReleverNonValid.Close
    de.rsReleverNonValid.Open req
    Set DataGrid1.DataSource = de
    End Sub

  5. #5
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Je ne vois pas moi non plus de solution élégante.

    Il y aurait bien (mais c'est lourd) celle d'un timer tournant en permanence et réinitialisant tout à 0 heures 00 (avec un petit arrêt entre 0 h - epsilon et 0 heures + epsilon)... C'EST PAS BEAU et C'EST TRES LOURD...

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    ????

    Faire un timer qui se lance à chaque changement d'équipe ?

    A 5h, 13h, 21h un nouveau timer se lance ?

  7. #7
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 79
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Points : 1 241
    Points
    1 241
    Par défaut
    Bonjour

    Je ne vois probablment pas le problème, car en raisonnant uniquement sur la date/heure de début et sur la durée, il me semble que cela pourrait être une voie facile.

    Je n'ai pas été plus loin car avant je voudrais votre sentiment?

  8. #8
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Personnellement, je travaille toujours avec date et heure.
    Aucune confusion possible.
    Les soustractions se font sans problème.

    Je n'a pas analysé la requête mais je pense qu'il doit être possible de l'adapter.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  9. #9
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Avec une condition du genre:
    Si "avant 13h" LaDate = Aujourd'hui() - 1
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  10. #10
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 79
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Points : 1 241
    Points
    1 241
    Par défaut
    Alain me confirtant dans mon approche, je propose un truc de ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Private Sub Form_Load()
     
      Dim DateEnCours As Variant
      Dim HeureEnCours  As Variant
      Dim strEquipe As String
     
      DateEnCours = Now
      HeureEnCours = Hour(DateEnCours)
     
      If HeureEnCours >= 5 And HeureEnCours < 13 Then
        strEquipe = "Equipe1"
      ElseIf HeureEnCours >= 13 And HeureEnCours < 21 Then
        strEquipe = "Equipe2"
      ElseIf HeureEnCours >= 21 And HeureEnCours < 5 Then
        strEquipe = "Equipe3"
      End If
     
      Call Affichage(strEquipe)
     
    End Sub
     
    Private Sub Affichage(strEquipe)
     
      Dim SQL As String
     
      SQL = "Select.... WHERE champEquipe = '" & strEquipe & "'"
     
    End Sub
    La procédure Form_Load se charge de définir l'équipe en cours en fonction de l'heure en cours de la date en cours. Elle passe la valeur à la procédure qui de chargera de la création du recordset en fonction de l'équipe, donc de l'heure.

    En fait, la notion d'équipe n'a pas d'importance, elle réflète simplement l'heure en cours. Je l'ai introduite pour sismplifier, mais on peut parfaitement remplacer cette notion par... ce qui vous inspire .

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    J'arrive à en sortit l'équipe actuelle dans un textbox mais pour la rajouter à ma requette comment il faudrai faire ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sendreq "SELECT ID_Relever, Reference, Login_User, Quantite, Type_Relever, Disquette, Commentaire, HeureFin FROM Relever WHERE (Heuredevalidation IS NULL) and Login_user like '%" & txtlogin.Text & "%' and heurefin = '" & ??????? & "'"

  12. #12
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 79
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Points : 1 241
    Points
    1 241
    Par défaut
    Dans ta requête, je vois:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .......heurefin = '" & ??????? & "'"
    Si tu regarde bien comment sont définies les équipes dans mon exemple, à chaque équipe correspond une heure de fin. Il suffit donc de remplacer la variable strEquipe par une variable intHeureFin et de lui affecter cette heure de fin. Ton code devient alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    dim varHeureFin as variant 'variant m'evite de me poser trop de question sur la compatibilité de la variable dans la chaîne SQL
    ... 
    If HeureEnCours >= 5 And HeureEnCours < 13 Then 
      varHeureFin = 13
    ElseIf HeureEnCours >= 13 And HeureEnCours < 21 Then 
      varHeureFin = 21
    ElseIf HeureEnCours >= 21 And HeureEnCours < 5 Then 
      varHeureFin = 21
    End If 
     
    Call Affichage(varHeureFin
    ...
    La procédure chargée de créer le recordset devient alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Affichage(intHeurefin)
    et ta requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... heurefin = '" & vartHeureFin & "'"
    Je n'ai pas testé car il faudrait que je crée une table et ce soir, j'ai un peu la flemme, mais cela devrait aller.

    PS: à la réflexion, je crois qu'il faudrait aussi ajouter le critère du jour. Mais ce soir, je m'embrouille... Bonne nuit
    PS bis: donnes quelques renseignements sur la structure de ta table, notammenet le format du champ "heurefin", et si tu as un champ "date", et à quoi correspondent les champs (ou en d'autre terme, qu'est-ce que tu enregistres?)

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    je vais tester demain matin merci

    pour heurefin j'enregitre une heure de fin de production (l'heure actuelle au moment du clique)

  14. #14
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 79
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Points : 1 241
    Points
    1 241
    Par défaut
    Bonjour

    Le code suivant semble fonctionner, hormis l'aspect convertion date fr/us nécessaire pour la requête SQL. Comme tu peux le voir, j'ai testé sur les dates/heures.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
      Dim DateHeureEnCours As Variant  'date et heure du jour en cours
      Dim DateEnCours As Variant       'date du jour en cours
      Dim DateHeureFin As Variant      'date et heure transmise à la requête
      Dim Deb13 As Variant             'date et heure de début du jour en cours pour fin 13 heures
      Dim Fin13 As Variant             'date et heure de fin du jour en cours pour fin 13 heures
      Dim Deb21 As Variant             'date et heure de début du jour en cours pour fin 21 heures
      Dim Fin21 As Variant          'date et heure de fin du jour en cours pour fin 21 heures
      Dim Deb05 As Variant              'date et heure de début du jour en cours pour fin 05 heures
      Dim Fin05 As Variant              'date et heure de fin du jour en cours pour fin 05 heures
     
      DateHeureEnCours = Format(Now, "mm,dd,yyyy,hh,mm")
      DateEnCours = Format(Date, "mm,dd,yyyy")
     
      Deb05 = Format(DateEnCours & " " & " 05:00:00", "mm,dd,yyyy,hh,mm")
      Fin05 = Format(DateEnCours & " " & "13:00:00", "mm,dd,yyyy,hh,mm")
      Deb13 = Format(DateEnCours & " " & " 13:00:00", "mm,dd,yyyy,hh,mm")
      Fin13 = Format(DateEnCours & " " & "21:00:00", "mm,dd,yyyy,hh,mm")
      Deb21 = Format(DateEnCours & " " & " 21:00:00", "mm,dd,yyyy,hh,mm")
      Fin21 = Format(DateEnCours & " " & "05:00:00", "mm,dd,yyyy,hh,mm")
     
      If DateHeureEnCours >= Deb05 And DateHeureEnCours < Fin13 Then
        DateHeureFin = Fin13
      ElseIf DateHeureEnCours >= 13 And DateHeureEnCours < 21 Then
        DateHeureFin = 21
      ElseIf DateHeureEnCours >= 21 And DateHeureEnCours < 5 Then
        DateHeureFin = 5
      End If
     
      Call Affichage(DateHeureFin)
    La requête reste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "Select* FROM Releve WHERE HeureFin = '" & DateHeureFin & "'"
    mais la variable contient donc le jour en cours + l'heure fin.

    Je patauge lamentablement pour convertir les dates FR en US. J'avais fait ceci en son temps (je l'avais même communiqué dans le cadre d'une réponse...), mais je ne retrouve plus (ni chez moi, ni sur le forum), et les recherche ne donnent rien de bien valable.

  15. #15
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    c'est ce qu'on cherche ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Command2_Click()
      toto = "14/05/1941"
      titi = Format(toto, "dd mm yyyy")
      MsgBox titi
      titi = Format(toto, "yyyy mm dd")
      MsgBox titi
    End Sub

  16. #16
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 79
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Points : 1 241
    Points
    1 241
    Par défaut
    Voila le code final. Il est testé en fonctionne correctement. Le champ DateHeureFin de la table Access ets en fortat GeneralDate.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Private Sub cmdReleve_Click()
    'Le clic sur le bouton de commande déclenche la mise en forme des dates/heures de début et de fin
    'pour chacune des équipes. La procédure passe ensuite la valeur obtenue par l'équipe en cours
    'à la procédure 'Affichage' chargée de la création du recordset et de la définition de la source de la grille.
     
      Dim varJourHeure As Variant
      Dim varDate As Variant
      Dim varHeure As Variant
      Dim varMinute As Variant
      Dim varSeconde As Variant
     
      Dim Deb13 As Variant  'date et heure de début du jour en cours pour fin 13 heures
      Dim Fin13 As Variant  'date et heure de fin du jour en cours pour fin 13 heures
      Dim Deb21 As Variant  'date et heure de début du jour en cours pour fin 21 heures
      Dim Fin21 As Variant  'date et heure de fin du jour en cours pour fin 21 heures
      Dim Deb05 As Variant  'date et heure de début du jour en cours pour fin 05 heures
      Dim Fin05 As Variant  'date et heure de fin du jour en cours pour fin 05 heures
      Dim DateHeureFin As Variant  'date et heure envoyées à la requête
     
      varJourHeure = Now  'Date et heure du système
      varDate = Date
      varHeure = Hour(varJourHeure)
      varMinute = Minute(varJourHeure)
      varSeconde = Second(varJourHeure)
      varJourHeure = Date & " " & varHeure & ":" & varMinute & ":" & varSeconde
      'txtJourHeure = varJourHeureUS
     
      Deb05 = varDate & " " & " 05:00:00"
      Fin05 = varDate & " " & " 13:00:00"
      Deb13 = varDate & " " & " 13:00:00"
      Fin13 = varDate & " " & " 21:00:00"
      Deb21 = varDate & " " & " 21:00:00"
      Fin21 = varDate & " " & " 05:00:00"
      Fin21 = DateAdd("d", 1, Fin21)
     
      'Il faut comparer entre des valeurs décimale pour que cela fonctionne
      If CDec(CDate(varJourHeure)) >= CDec(CDate(Deb05)) And CDec(CDate(Fin05)) > CDec(CDate(varJourHeure)) Then
        DateHeureFin = Fin05
      ElseIf CDec(CDate(varJourHeure)) >= CDec(CDate(Deb13)) And CDec(CDate(Fin13)) > CDec(CDate(varJourHeure)) Then
        DateHeureFin = Fin13
      ElseIf CDec(CDate(varJourHeure)) >= CDec(CDate(Deb21)) And CDec(CDate(Fin05)) > CDec(CDate(varJourHeure)) Then
        DateHeureFin = Fin21
      End If
     
      Call Affichage(DateHeureFin)
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Private Sub Affichage(DateHeureFin As Variant)
     
      Dim SQL As String
      Dim cn As ADODB.Connection
      Dim strConnex As String
      Dim rsReleve As ADODB.Recordset
     
      Set cn = New ADODB.Connection
      Set rsReleve = New ADODB.Recordset
     
      'Chaîne de connexion
      strConnex = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Developpez.com\Essais réponses\Barres_Menus\Heures.mdb"
      'Requête SQL. On fait appel à la fonction Formater_Date_US en lui passant comme
      'argument une date en français. La fonction renvoie lka date en US.
      SQL = "SELECT * FROM Releve WHERE DateHeureFin = #" & Formater_Date_US(DateHeureFin) & "#"
      'Connexion
      cn.Open strConnex
      'Création du recordset
      rsReleve.CursorLocation = adUseClient
      rsReleve.Open SQL, cn, adOpenDynamic, adLockOptimistic, adCmdText
     
      Set DataGrid1.DataSource = rsReleve 'Source de la grille
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Private Function Formater_Date_US(DateJour As Variant) As Variant
    'Retourne une date sous format américain
     
      Dim varSeconde As Variant
      Dim varMinute As Variant
      Dim varHeure As Variant
      Dim varJour As Variant
      Dim varMois As Variant
      Dim varAn As Variant
      Dim DateUS As Variant
     
      varSeconde = Second(DateJour)
      varMinute = Minute(DateJour)
      varHeure = Hour(DateJour)
      varJour = Day(DateJour)
      varMois = Month(DateJour)
      varAn = Year(DateJour)
     
      DateUS = varMois & "/" & varJour & "/" & varAn & " " & varHeure & ":" & varMinute & ":" & varSeconde
      Formater_Date_US = DateUS
     
    End Function
    Tiens moi au courant.

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    oui c'est bon sa marche merci encore

  18. #18
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 79
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Points : 1 241
    Points
    1 241
    Par défaut
    Impec. Pense à mettre le tag [résolu]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FTP] Problème d'heure
    Par cilv1 dans le forum Réseau
    Réponses: 2
    Dernier message: 19/06/2007, 13h07
  2. gestions des heures de travail
    Par bzhmorgane dans le forum Modélisation
    Réponses: 2
    Dernier message: 24/05/2007, 08h56
  3. [Formatage] Problème d'Heures
    Par navis84 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 13/03/2007, 13h47
  4. [Dates] Problème avec heure d'été
    Par crashou13 dans le forum Langage
    Réponses: 2
    Dernier message: 02/03/2007, 15h41
  5. cumul des heures de travail
    Par laklak dans le forum Bases de données
    Réponses: 20
    Dernier message: 08/05/2006, 13h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo