Je voudrais charger des données dans une list box au format heure hh:mn
Bonjour a nos contributeurs...
J avance laborieusement ds un projet qui me dépasse, j avais déjà sollicité le forum pour rentrer des données au format date dans un combobox, réponse rapide est fructueuse.
Horreur! cela recommence avec la manip inverse.... je souhaite recharger une listbox à partir d'un fichier qui a été créé par cette m^me listbox, certaines données sont au format hh:mn que je souhaite conserver, hélas au moment du transfert le format nombre est imposé , je ne sais pas comment, alors que le format de départ est bien hh;mn
les valeurs dans la list box apparaissent donc entre 0 et 1...; ce qui est illisible pour le commun des mortels.....
Merci de votre aide
<<<<<<<<<<
Bonjour et
"suite microsoft" n'est pas le renseignement demandé : Attendu une année 2016, 2021... ou 365 si tu as un abonnement suivi de 32 ou 64 bits le cas échant.
Ce renseignement se trouve dans le menu Fichier > Compte (en bas) + Clic sur le point d'interrogation :
puis page suivante :
En particulier s'il est indiqué bits au lieu de 32 le préciser.
Merci de mettre à jour ton profil
A+
Bonsoir,
un format hh:mm sous Excel peut en fait en cacher deux !
l'un numérique c'est à dire le bon, c'est le même principe que les dates sauf que les heures sont des décimales d'1 jour, par exemple midi est égal sous Excel à 0,5 jour, c'est pourquoi votre code demande un format numérique, me semble t il.
Le deuxième c'est un format texte c'est à dire qu'au lieu de 0,5 dans la cellule pour midi il y est inscrit en dur "12:00", pour s'en rendre compte il suffit de supprimer l'alignement en cours dans la cellule afin que le contenu reprenne l'alignement par défaut d'Excel : aligné à gauche c'est du texte, aligné à droite c'est un nombre.
Une fois cette corrigée (si toutes fois c'est cela mais sans fichier ce n'est pas facile de taper dans le mile) votre code fonctionnera peut-être.
Lors de la conception d'une application, on ne touche pas aux alignements standard afin de détecter ce type d'erreur. Le "skin" c'est ce que l'on met à la fin.
@ bientôt
LouReeD
Merci Galopin pour cette information,
J ai essayé ta manip, j ai trouvé grâce a Word ?
Microsoft 365 MSO (Version 2502 Build 16.0.18526.20168) 64 bits
Mais je n'ai pas su le rentrer complétement dans le profil excel qui se verrouille à Microsoft MSO seulement ?
Oui je suis abonné pour bénéficier des dernières MaJ.....
Bonjour,
Au niveau de la conf ça suffira. Par contre l'absence de fichier est très pénalisante. On ne peut guère imaginer ce qui dans ton contexte est en défaut car un problème d'affichage cache probablement un problème de type de donnée. Les contrôles affichent dans l'ensemble plus ou moins ce qu'on leur demande mais renvoient du texte donc tu dois toujours t'assurer que les données sont bien renvoyée sur la feuille via une variable double correctement interprété sur la feuille...
Les ListBox en particulier affichent correctement des valeurs horaires même si la source est du texte donc difficile de comprendre d’où vient ton pb en l'absence de fichier. Essaie d'envoyer un fichier réduit à sa plus simple expression comme dans cette démo.
A+
Merci Galopin Pour cette petite simulation qui m'a donné des idées,
Mon pb n'est pas résolu, mais j'ai pu bâtir ce petit simulateur qui fait bien apparaitre ce que je n' arrive pas à résoudre en terme de format.
J utilise donc deux listbox, une que Galopin m'a fournit (listbox1 ici) qui prend une valeur sélectionnée par sa Rowsource au format heure, que je mets par VBA en C7, la deuxième (ListBox2) sur Commande TRANSFERT, prend cette valeur, la récupère dans cette listBox pour la déposer en D7.
En ligne 8 sont affichées les formats C7, D7, les cases sont affectées au départ au format heure., pour faire tourner dans "A" j'ai mis plusieurs format et valeurs pour voir ce qui se passe en changeant la valeur sélectionnée en ListBox1.
Je pense avoir donné tous les éléments que j'ai compris, mais il y a un hic!
( j ai besoin de récupérer cette valeur au format heure, il y a des calculs par la suite pour planning personnel micro entreprise familiale )
Encore merci pour votre aide
Voilà ce que donne la simulation en sélectionnant en A par lixbox1 10:13, je veux récupérer 10:13 en D7
Le code un peu brouillon que j 'utilise, cela reflète le travail laborieux du novice en la matière, mais ca tourne.....
Private Sub ListBox1_Click()
[C7] = ListBox1
End Sub
Private Sub Combo_H1versLISTBOX2_Click() ' C'est en fait TRANSFERT J'ai changé le nom pour l'affichage
With ListBox2
.AddItem
.Column(0, 0) = [C7]
[D7] = .Column(0, 0)
'_________________________________________________PB________________________________PB__________________
'C est ici me semble t-il mon problème, je ne sais pas forcer le format en heure
Dim ws As Worksheet
Dim cellule As Range
Dim formatCellule As String
' Définit la feuille de calcul et la cellule
Set ws = ThisWorkbook.Sheets("Feuil1")
Set cellule = ws.Range("A1")
' Obtenir le format de la cellule
formatCellule = cellule.NumberFormat
ws.Range("B1") = formatCellule
Set cellule = ws.Range("A2")
' Obtenir le format de la cellule
formatCellule = cellule.NumberFormat
ws.Range("B2") = formatCellule
Set cellule = ws.Range("A3")
' Obtenir le format de la cellule
formatCellule = cellule.NumberFormat
ws.Range("B3") = formatCellule
Set cellule = ws.Range("A4")
' Obtenir le format de la cellule
formatCellule = cellule.NumberFormat
ws.Range("B4") = formatCellule
Set cellule = ws.Range("C7")
' Obtenir le format de la cellule
formatCellule = cellule.NumberFormat
ws.Range("C8") = formatCellule
MsgBox "Le format de la cellule C7 est : " & formatCellule
Set cellule = ws.Range("D7")
' Obtenir le format de la cellule
formatCellule = cellule.NumberFormat
ws.Range("D8") = formatCellule
' Afficher le format de la cellule dans une boîte de message
MsgBox "Le format de la cellule D7 est : " & formatCellule
End With
End Sub
Bonjour,
Hum... A mon avis tu es en train d'essayer de jouer à la roulette russe !
Je te conseille d’utiliser dans tous les cas le format d’heures affichées préconisé pour Excel "hh:mm".
C’est déjà bien assez compliqué comme cela ! Ce format ne considère que l’heure instantanée et pas le temps qui passe (ni la durée du travail)…
Nota : Il n’y a qu’une seule dérogation c’est la notation décimale utilisée par des gestionnaires RH pour les calculs de durée (en centième d’heures). Mais ce n’est pas vraiment une exception car les durées (de temps écoulé) ne doivent pas être considérées comme des heures (en particulier négatives !) Normalement ça ne devrait pas être le cas ici ??? Les durées doivent être gérées au format "[h]:mm" .
Les contrôles stockent habituellement des valeurs textes avec quelques dérogations qui considèrent l’affichage des dates et des heures qui sont correctement interprétées à conditions expresse que tu utilises la forme canonique (v Microsoft)
A plus forte raison en VBA la rigueur doit être la règle. C’est à toi de t’assurer que les données sont valides à la source : On appelle cela de la saisie contrôlée.
Toute tentative de faire estimer à postériori par le biais de NumberFormat la valeur de ce contrôle est aléatoire (donc à bannir du point de vue du programmeur).
Donc mon conseil est d’éliminer à la source les données fantaisistes et en sortie au besoin de gérer dans une variable de type double que tes données sont correctement interprétées.
A+