Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

NONO14

XLDnaute Occasionnel
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

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
bonjour juste en passant
pour être sur
.Lst_Employ.List(I - 1, Col - 1) = Format(cdate(Data(I, Col)), "hh:mm")

au cas ou tes cellules serait du texte de date

Oupss !! edit :j'ai réédité le format
 
Dernière édition:

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
 

NONO14

XLDnaute Occasionnel
Bonjour à tous,
Effectivement le code proposé par patricktoulon au #5 ne fonctionne pas.
Par contre celui de Vgendron au #4 fonctionne bien.
Merci à tous pour votre aide.
Encore un problème de résolu.
 

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…