Microsoft 365 Mettre la 4ème colonne d'une ListBox au format [h]:mm

NONO14

XLDnaute Impliqué
Bonjour à toutes et à tous,

Dans mon application j'ai supprimé la ComboBox (ceux qui me suivent comprendront - https://excel-downloads.com/threads...omboBox à 3 colonnes avec les données d'un TS ) et je l'ai remplacé par une ListBox.
La ListBox est bien alimentée selon le code ci-joint, cependant je souhaiterai que la 4ème colonne soit au format [h]:mm.
Avec le code ci-joint, la 4ème colonne donne le résultat ":12".
Qu'ai-je fais qui ne convienne pas ?
Merci par avance pour votre aide
1728460462766.png

VB:
Sub RempliListBox()
Dim Ws As Worksheet
Dim Tbl As ListObject
Dim I As Long, Col As Long
Dim Data As Variant

'Définir la feuille de calcul et le tableau structuré
    Set Ws = Sheets("Liste_agents")
    Set Tbl = Ws.ListObjects("t_Noms")
   
'On récupére les données du TS
    Data = Tbl.DataBodyRange.Value
   
   
    With UfGestTemps.MultiPage1.Pages(0)

'On définie le nbre de colonnes de la ListBox
    .Lst_Employ.ColumnCount = 4

'On remplit la ListeBox avec les données du TS
    For I = 1 To UBound(Data, 1)
        .Lst_Employ.AddItem
            For Col = 1 To 4

'On formate la 4ème colonne au format "[h]:mm"
                If Col = 4 Then
                    .Lst_Employ.List(I - 1, Col - 1) = Format(Data(I, Col), "[h]:mm")
                Else
                    .Lst_Employ.List(I - 1, Col - 1) = Data(I, Col)
                End If
            Next Col
    Next I
End With
End Sub
 
Dernière édition:
Solution
Bonjour,

Ta macro de #1 :
VB:
Sub RempliListBox()
'
Dim Ws As Worksheet
Dim Tbl As ListObject
Dim I As Long, Col As Long
Dim Data As Variant

    ' Définir la feuille de calcul et le tableau structuré
    Set Ws = Sheets("Liste_agents")
    Set Tbl = Ws.ListObjects("t_Noms")

    ' On récupére les données du TS
    Data = Tbl.DataBodyRange.Value

    With UfGestTemps.MultiPage1.Pages(0)

        ' On définie le nbre de colonnes de la ListBox
        .Lst_Employ.ColumnCount = 4

        ' On remplit la ListBox avec les données du TS
        For I = 1 To UBound(Data, 1)
            .Lst_Employ.AddItem
            For Col = 1 To 4
                ' On formate la 4e colonne au format "[h]:mm"
                If Col = 4 Then...

patricktoulon

XLDnaute Barbatruc
re
je vous laisse le soin d'en tirer vos conclusions ;)
VB:
Sub test()
    Dim t As String, C As Double
    t = "24/05/2024 22:33:55"
    MsgBox Application.Text(t, "[h]:mm")
    
    t = "22:33:55"
    MsgBox Application.Text(t, "[h]:mm")

    t = "24/05/2024 22:33:55"
    MsgBox Format(CDate(t), "hh:mm")

    t = "22:33:55"
    MsgBox Format(CDate(t), "hh:mm")

    C = 145437.456
    MsgBox Format(CDate(C), "hh:mm")

End Sub
 

patricktoulon

XLDnaute Barbatruc
Bonjour @vgendron
ce que j'ai donné est une formulation universelle qui accepte toute date ou timecode valide sous toute ses formes
comme vous avez pu le constater avec ma petite sub (si vous l'avez testé)
c'est pas le cas avec application.text

le principe est simple
on met la chaine dans le bloc Cdate qui en fait une date avec time code ou pas ou rien que le timecode et on applique le format


en interne cdate transforme la chaine en valeur numérique de date
parti de la comme avec le dernier exemple on applique donc le format a un numéro de serie de date (excel)

c'est simple et ça passe partout ( à condition que la chaine soit valide bien entendu)
 
Dernière édition:

Discussions similaires

Réponses
6
Affichages
555

Statistiques des forums

Discussions
315 111
Messages
2 116 340
Membres
112 720
dernier inscrit
henri marc michel