Addition Heures Listbox vba [Résolu/Fermé]

Signaler
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
-
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
-
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

Messages postés
24110
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
19 juin 2021
6 807
Bonjour,

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

eric
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 620
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
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
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
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
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 620
peut être pourrais tu nous repasser un fichier avec le code VBA actualisé...
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
Bonjour Pijaku

Voici mon fichier après modifications...
https://www.cjoint.com/?3Grqw7mIpNE
merci
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 620
A priori, ce code semble fonctionner avec CDate()...
Du moins chez moi.
As tu essayé de remplacer :
totalpause = totalpause + Val(.Range("O" & i))

par :
totalpause = totalpause + CDate(.Range("O" & i))
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
Bonjour Pijaku et Eric

ça y est ça fonctionne grâce à vous deux!!!! merci beaucoup! :)
En rajoutant le Cdate et en chageant mon format ça fonctionne!

Voici dons le code qui fonctionne :

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

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
cpt = cpt + 1
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 + CDate(.Range("O" & i))
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

un énorme merci à vous deux!
MÉlanie
Messages postés
24110
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
19 juin 2021
6 807
Re,

et bien tout s'arrange.

Pour le format heure, conserve quand même [h]:mm qui est capable d'afficher plus que 24 heures.

eric
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 620
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