Conversion heure décimale en heure normale VBA

Bonjour

Dans la Feuil1, les cellules A1 à A4 contiennent des heures, la cellule A5 contient le total d’heures

Respectivement 05 :00 – 12 :00 – 17 :30 – 08 :00

Avec le format Personnalisé hh :mm le total en cellule A5 affiche 18 :30

Avec le format Personnalisé [hh] :mm le total en cellule A5 affiche 42 :30

Jusque là rien d’anormal à la lecture sur différents forums

Le problème se pose quand je veux afficher le contenu de la cellule A5 dans l’Userform1

Pour le TextBox1 et pour le TextBox2

Avec le code : UserForm1.TextBox1 = Worksheets(1).Cells(5, 1).Value

J’obtiens 1.77083333333333

Avec le code : UserForm1.TextBox2 = Format(Worksheets(1).Cells(5, 1).Value, ("[hh]:mm"))

J’obtiens :12 (pourquoi 2points et 12 ????)

Après plusieurs essais en changeant le format, en supprimant Value en passant pas une variable intermédiaire rien n’y fait.

Merci d’avance à ceux et celles qui m’apporteront leurs compétences pour résoudre ce problème.

Cordialement votre.

Bonjour,

Le [h] n'est pas un format valable en VBA.

La solution est de décomposer ton heure.

Tu récupères tes heures, tu les multiplies par 24 et tu concatène le résultat avec ':' et les minutes.

Bonjour,

Essaie ainsi :

TextBox2 = Worksheets(1).Cells(5, 1).Text

Merci pour l'info mais à mon age (71 ans) les neurones ne sont plus à leurs meilleurs forme

Pouvez vous me donner la formule en VBA

Merci d'avance

Je laisse les experts VBA te donner la réponse !

Bonjour beaujack, le forum,

au lieu de :

UserForm1.TextBox2 = Format(Worksheets(1).Cells(5, 1).Value, ("[hh]:mm"))

essaye avec :

UserForm1.TextBox2 = Format(Worksheets(1).[A5], "[h]:mm")

dhany

Pour ma part, cela fonctionne avec :

TextBox1 = CStr(Int(Worksheets(1).Cells(5, 1).Value * 24)) & ":" & Minute(Worksheets(1).Cells(5, 1).Value)

En gros, je convertis en String les heures (d'où le *24) et je prends la valeur entière de ce résultat.

Ensuite je concatène avec ":" et uniquement les minutes, tout ceci dans un String

Bonjour

avec un modèle de ton fichier ca serait plus facile

car la il manque pas mal de chose

A+

Maurice

Re,

La totale :

UserForm1.TextBox2.Value = ActiveWorkbook.Worksheets(1).Cells(5, 1).Text

Re,

La totale :

UserForm1.TextBox2.Value = ActiveWorkbook.Worksheets(1).Cells(5, 1).Text

Voila pourquoi je dois laisser les experts VBA répondre, c'est tellement plus simple que ce que j'ai proposé !

Salut à tous !

J'ai essayé de me pencher sur la raison de ce renvoi :12 par la fonction Format !

Il est clair que la partie de format [hh] n'étant pas reconnue par Format, la fonction renvoie le séparateur horaire suivi d'un numéro de mois.

Pourtant, si je comprends bien que pour une valeur horaire inférieure à 24h (valeur inférieure à 1), puisse s'afficher 12 (=décembre, mois qui précède janvier), j'attendrais l'affichage de 01 dès lors que la valeur atteint ou dépasse 24h (valeur de la cellule >=1). Or cela continue d'afficher 12, jusqu'à ce que la valeur de la cellule atteigne 2 (soit une valeur horaire de 48h), là elle affiche effectivement 01.

Ce décalage me laisse perplexe... !

Noter pour ce qui est de la mise en forme lors de l'affectation à la TextBox, on peut y parvenir de cette façon :

    With Worksheets(1).Cells(5, 1)
        TextBox1.Value = Int(.Value * 24) & Format(.Value, ":nn")
    End With

Il peut être utile de le savoir... cependant la solution la plus simple étant généralement la meilleure (à mon sens), la proposition de Jean-Eric s'impose !

Cordialement.

Bonjour MFerrand,

et avec "[h]:mm", peut-être que ça marche mieux ?

(avec un seul h entre crochets)

dhany

Non, ce qui ne fonctionne pas en VBA, c'est la reconnaissance du format de cumul simulé par les [ ] en format de cellule.

@jpbt84

tu parles des crochets pour une cellule, comme par exemple [A1] ; c'est exact : c'est l'équivalent de Range("A1") ; mais en 2ème argument de la fonction Format(), et donc entre guillemets, l'ambiguïté est levée : il s'agit bien d'un format et non d'une référence de cellule ; et pour moi, il n'y a aucune raison qu'un format qui marche au niveau d'Excel soit refusé au niveau VBA quand il est utilisé en 2ème argument de Format() ; c'est pourquoi j'ai été très sceptique quand tu as écrit dans ton post de 10:36 : « Le [h] n'est pas un format valable en VBA. » ; et c'est aussi pourquoi j'ai proposé ceci dans mon post de 11:38 :

UserForm1.TextBox2 = Format(Worksheets(1).[A5], "[h]:mm")

bien sûr, les formats français au niveau de la feuille doivent être écrits en anglais au niveau du VBA.

exemple : "dd/mm/yyyy" au lieu de "jj/mm/aaaa"

dhany

Un format horaire égal ou supérieur à 24h ne semble en effet pas pouvoir être produit par la fonction Format qui en comporte cependant pas mal (elle permet par exemple des conversions de chaînes en majuscules ou minuscules...), et un tel format n'est pas indiqué dans l'Aide sur la fonction.

Une lacune de Microsoft !

Possible Dhany,

Je vais vous laisser parler entre expert VBA, là, ça dépasse mes compétences.

Pour affiner, le format existant en tant que format de cellule, si on code :

    ActiveCell.NumberFormat = "[h]:mm"

la cellule active se verra bien dotée du format d'affichage d'heures égales ou supérieures à 24h.

Mais dans le cas d'espèce, c'est la fonction VBA Format qui est en cause, et qui elle ne le prend pas en compte.

Cordialement.

coucou MFerrand, qu'est-ce que c'est qu'ce Crosoft qui fait les choses à moitié, s'il est même pas foutu d'faire une fonction Format() complète ? et même pas dans ta version d'Excel 2010, en plus ! remboursez !!! euh, peut-être dans la version 2016, alors ? non ? même pas ??? ah ben, ça vaut drôlement l'coup d'payer un abonnement exorbitant, alors !!!

coucou MFerrand, qu'est-ce que c'est qu'ce Crosoft qui fait les choses à moitié, s'il est même pas foutu d'faire une fonction Format() complète ? et même pas dans ta version d'Excel 2010, en plus ! remboursez !!! euh, peut-être dans la version 2016, alors ? non ? même pas ??? ah ben, ça vaut drôlement l'coup d'payer un abonnement exorbitant, alors !!!

Bonjour,

comme ce format ne fonctionne pas en vba, on peut utiliser sa version feuille :

tempsTxt = Application.Text([A2], "[h]:mm")

euh, peut-être dans la version 2016, alors ? non ? même pas ???

Et la retro-compatibilité alors !!!! Tu y penses ?

C'est comme l'affichage des heures négatives. Il pourrait faire un effort

eric

Rechercher des sujets similaires à "conversion heure decimale normale vba"