Addition Heures Listbox vba

Résolu
lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

J'espère que quelqu'un aura une idée car je suis bloquée! merci à l'avance de prendre le temps de me lire! Prendre note aussi que je suis débutante :)

Voilà : J'ai un fichier Excel dans lequel toute ma production est détaillée.
à partir d'un usf, je visualise l'information voulue par date

Pour ouvrir le Usf : Feuille 2007 : Case B2 (Bouton1)
Il faut ensuite ajouter des dates : 2007-01-10 au 2007-01-11
ensuite : appuyer sur le bouton afficher

La production de la journée apparait alors dans la listbox.
Cela fonctionne.

Seulement dans la tbox pause, (qui est au bas de la colonne pause) Je voudrais calculer
le total de temps de pause afficher dans la colonne. En l'occurence dans ce cas ci ça devrait être 1:00. Hors ça indique 00:00... Quelqu'un a -til une idée de ce que je fais de mal?

Voici mon code et j'ai aussi joint mon fichier :
Private Sub Userform_initialize()
Dim NbLigneAtraiter As Long
End Sub

Private Sub CommandButton1_Click() ' bouton afficher
Dim totalpause As Date
Dim TotalTemps As Date

With Sheets("2007")
NbLigneAtraiter = .Range("A" & Rows.Count).End(xlUp).Row

ListBox1.Clear
Tbox_pause = ""
Tbox_durée = ""
For i = 13 To NbLigneAtraiter
If .Range("L" & i) >= DTPicker_Du.Value And .Range("L" & i) <= DTPicker_Au.Value Then

ListBox1.AddItem .Range("L" & i)
ListBox1.List(ListBox1.ListCount - 1, 1) = Format(.Range("M" & i), "hh:mm")
ListBox1.List(ListBox1.ListCount - 1, 2) = Format(.Range("N" & i), "hh:mm")
ListBox1.List(ListBox1.ListCount - 1, 3) = Format(.Range("O" & i), "hh:mm")
ListBox1.List(ListBox1.ListCount - 1, 4) = Format(.Range("P" & i), "hh:mm")
totalpause = Val(Tbox_pause) + Val(.Range("O" & i))
TotalTemps = Val(Tbox_durée) + Val(.Range("P" & i))
Tbox_pause = Format(totalpause, "hh:mm")
Tbox_durée = Format(TotalTemps, "hh:mm")

End If
Next i

End With

End Sub

encore merci
Mélanie
https://www.cjoint.com/?3GnoiviaI9p

5 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    totalpause = totalpause + Val(Range("O" & i))
    serait mieux non ?

    eric
    1
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
     
    De rien.
    Cette proposition t'as été faite ici, mais à cause du site et du système de commentaires qui s'affichent ou pas... Ben c'est passé inaperçu!
    Nous avons de par le fait faillit ne pas résoudre ton souci alors que...

    C'est décidé, je ne réponds plus par commentaire, mais par "répondre"....

    A bon entendeur.

    En tout cas, ravi pour toi Mélanie, et à la prochaine.

    Comme d'hab, n'hésite pas...
    1
  3. lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   4
     
    Bonjour,

    Je continue d'essayer de trouver ma solution mais je n'y arrive toujours pas.
    J'ai fais le changement suivant à mon code :
    enlever
    Tbox_pause = Format(totalpause, "hh:mm")
    totalpause = Val(Tbox_pause) + Val(.Range("O" & i))
    Remplacé par
    Tbox_pause = Val(Tbox_pause) + Val(.Range("O" & i))

    Si je prends le même exemple que dans mon premier message :

    Pour ouvrir le Usf : Feuille 2007 : Case B2 (Bouton1)
    Il faut ensuite ajouter des dates : 2007-01-10 au 2007-01-11
    ensuite : appuyer sur le bouton afficher

    au lieu d'afficher 00:00 comme avant, j'ai maintenant 4
    00:15 : 1.0416667
    00:30 : 2.083333
    00:15 : 1.0416667
    _____ : ________
    1:00 4.1667

    Alors je me dis que mon 4 doit être 4.1667 arrondi..

    Quelqu'un a une idée comment mettre mon 4 en 1:00?

    merci à l'avance
    Mélanie
    0
  4. lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   4
     
    Bonjour Eric,

    merci pour ta réponse, j'ai essayé mais
    Si je laisse ma variable en date ça me donne 03/01/1900 si je ne défini pas le type ça me donne encore 4...

    merci à l'avance
    Mélanie
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour,

      quel est le rapport avec ce que j'ai écrit ???

      totalpause = totalpause + Val(Range("O" & i))

      eric
      0
    2. lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   4
       
      Bonjour Éric,

      J'ai changé totalpause = Val(Tbox_pause) + Val(.Range("O" & i))
      pour totalpause = totalpause + Val(Range("O" & i))
      qui a effectivement plus d'allure..
      mais ça ne change rien au résultat.. Je sais que ton changement ne devait pas changer mon format.. je cherche toujours la réponse..

      merci encore
      Mélanie
      0
    3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Re,

      ton format est correct et est ici :
      Tbox_pause = Format(totalpause, "hh:mm")

      Chez moi il affiche bien 01:00, je ne vois pas d'où tu sors ton 4.xxx
      Ou alors tu ne parles pas du tbox_pause (?)

      eric
      0
    4. lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   4
       
      Bonjour Eric,

      Chez-moi ça ne fonctionne pas..
      Si je mets ma variable comme suit : Dim totalpause As Date
      ensuite ce code : With Sheets("2007")
      NbLigneAtraiter = .Range("A" & Rows.Count).End(xlUp).Row


      ListBox1.Clear
      Tbox_pause = ""
      Tbox_durée = ""
      For i = 13 To NbLigneAtraiter
      If .Range("L" & i) >= DTPicker_Du.Value And .Range("L" & i) <= DTPicker_Au.Value Then

      ListBox1.AddItem .Range("L" & i)
      ListBox1.List(ListBox1.ListCount - 1, 1) = Format(.Range("M" & i), "hh:mm")
      ListBox1.List(ListBox1.ListCount - 1, 2) = Format(.Range("N" & i), "hh:mm")
      ListBox1.List(ListBox1.ListCount - 1, 3) = Format(.Range("O" & i), "hh:mm")
      ListBox1.List(ListBox1.ListCount - 1, 4) = Format(.Range("P" & i), "hh:mm")
      totalpause = totalpause + Val(Range("O" & i))
      Tbox_pause = Format (totalpause, "hh:mm")
      End If
      Next i
      End With
      End Sub

      J'obtiens : 00:00

      Si j'enlève le format de ma tbox_pause : Tbox_pause = totalpause
      J'obtiens : 1900-01-03


      Si je décalre ma variable ainsi : Dim totalpause et que j'enlève mon format de ma textbox : Tbox_pause = totalpause

      J'obtiens : 4


      As-tu une idée de ce qui peut faire que ça fonctionne chez-toi et pas chez-moi?
      encore merci
      Mélanie
      0
    5. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      pourquoi tu enlèves le format "hh:mm" puisque c'est c'est celui que tu veux ????

      Si je décalre ma variable ainsi : Dim totalpause et que j'enlève mon format de ma textbox : Tbox_pause = totalpause
      Ca ne prouve qu'une chose : c'est donc ce qu'il ne faut pas faire.
      Tu avances au hasard et tu dis ça ne marche pas... Ben oui...

      Moi j'ai fait du 3/1/2007 au 4/1/2007
      Poste le fichier qui est mauvais chez toi, il y a sûrement autre chose.
      Ou reprend celui que tu as posté et change juste ce que je t'ai indiqué.

      eric
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
     
    Bonjour,
    Encore par ici Mélanie?

    Au vu du nombre de lignes à traiter (14 000), je suggère de passer par une variable tableau beaucoup plus rapide...

    Private Sub Userform_initialize() 
    Dim NbLigneAtraiter As Long 
    End Sub 
    
    Private Sub CommandButton1_Click() ' bouton afficher 
    Dim totalpause As Date 
    Dim cpt As Long, ch As String 
    Dim i As Long, Donnees()
    Dim msg As String
    
    With Sheets("2007")
        NbLigneAtraiter = .Range("A" & Rows.Count).End(xlUp).Row
        Donnees = Range("L3:P" & NbLigneAtraiter)
        ListBox1.Clear
        Tbox_pause = ""
        Tbox_durée = ""
        For i = LBound(Donnees, 1) To UBound(Donnees, 1)
            If CDate(Donnees(i, 1)) >= DTPicker_Du.Value And CDate(Donnees(i, 1)) <= DTPicker_Au.Value Then
                cpt = cpt + 1
                ListBox1.AddItem CDate(Donnees(i, 1))
                ListBox1.List(ListBox1.ListCount - 1, 1) = Format(Donnees(i, 2), "hh:mm")
                ListBox1.List(ListBox1.ListCount - 1, 2) = Format(Donnees(i, 3), "hh:mm")
                ListBox1.List(ListBox1.ListCount - 1, 3) = Format(Donnees(i, 4), "hh:mm")
                ListBox1.List(ListBox1.ListCount - 1, 4) = Format(Donnees(i, 5), "hh:mm")
                totalpause = totalpause + CDate(Donnees(i, 4))
                Tbox_pause = Format(totalpause, "hh:mm")
                ch = totalpause & " = " & Format(totalpause, "hh:mm")
            End If
        Next i
    End With
        msg = "compteur date = " & cpt
        msg = msg & vbCrLf & "Total pause : " & ch
        MsgBox msg
    End Sub
    0