Passer une ligne d'horaire sexagesimale en decimale

bonjour.

Je séche...en VBA ....

j'ai des lignes avec des horaires exprimés en sexagésimal, qu'il me faut dupliquer en décimal

Exemple: (chaque heure est dans une cellule)

Total heure fonction hh:mm 00:20 01:36 10:05 05:30 06:28 05:27 ......

il me faut sur une autre ligne

Total Temps decimal 0,33 1,60 10,08 5,50 6,47 5,45 ......

Problème:

Sur une ligne d'indice "k", j'ai des heures en sexagésimal dans les cellules de la colonne d'indice "i" à la colonne d'indice"j", et je les veux en décimal sur une autre ligne "p".

Merci

Bonjour à tous,

J'en sais rien en vba, mais il te faut multiplier la partie décimale par 24

exp :

3:15 ==> standard ==0,135416666666667

0,135416666666667*24=3,25

Crdlmt

Bonjour.

Merci pour la réponse. Je reformule différemment mon problème , mais avec un nombre fixe de colonnes.

J'ai une ligne quelconque (indice" k") , qui a les 4 premières colonnes (A à D) avec un contenu "texte" que je duplique sans problème sur une ligne (d'indice) "p".

Ensuite j'ai 37 de colonnes , (de la colonne E à la colonne AO) . Toutes les cellules sont des horaires en sexagésimal , soit hh:mm, qu'il me faut convertir en décimal sur une autre ligne "p". Je ne sais plus faire .

Voici ce que j'ai actuellement

Sub passage_hhmm_en_0000()

'

'le début du programme effectue

'---------------------------------------

' recuperation du nombre de ligne a transcrire Nblg et a conserver

' recopie les lignes qu'on mettra en décimal

'Variables obtenues en fin de boucle

' k 'indice de la première ligne contenant les heures en sexagésimal

' p 'indice de la ligne qui doit contenir les horaire en décimal

'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

'Jusque la tout fonctionne

'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

'Pour simplifier mon problème je donne des valeurs

'k = 20 ' indice de la ligne qui contient les horaire en sexagésimal

'p= 100 ' indice de la ligne qui doit contenir les horaire en décimal

'Nblg = 50 ' nombre de ligne a passer de sexagésimal en décimal

'Variable' pour la boucle

Nblg = Nblg + 1

ctp = 1

While cpt < Nblg ' TQ le compteur n'est pas = au nbr de cellule comptées+1

'on recopie les colonnes textes

Range("A" & k, "D" & k).Select ' selection des 4 premieres colonnes sur la ligne indice "g" qui est selectionnée

Selection.Copy

Range("A" & p, "D" & p).Select ' selection des 4 premieres colonnes sur la ligne receptrice d'indice "p"

Application.CutCopyMode = False

ActiveSheet.Paste

'on recopie les colonnes horaires

Range("E" & k, "AO" & k).Select ' selection des colonnes sur la ligne indice "k" qui est selectionnée

Selection.Copy

' '

'Et la ca coince, .....il faudrait que mes heures soient transcrites en decimale (0.00) sur la ligne d'indice "p",... je ne sais comment faire

'

Range("E" & p, "AO" & p).Select ' selection des colonnes sur la ligne receptrice

Selection.NumberFormat = "0.00"

Application.CutCopyMode = False

ActiveSheet.Paste

k = k + 1

p = p + 1

cpt = cpt + 1

Wend

End Sub

' '

'Et la ca coince, .....il faudrait que mes heures soient transcrites en decimale (0.00) sur la ligne d'indice "p",... je ne sais comment faire

'

Comme l'a dit DjiDji59430 , tu as simplement à multiplier par 24 et mettre au format numérique !

Les heures dans excel sont des nombres décimaux, des fr'actions de jour, donc 1h est retranscrite comme 1/24è

bonsoir.

Tout a fait d'accord, mais j'ai une rangée de cellules sur une ligne qu'il me faut convertir en décimal .

Pour convertir une cellule sur une ligne d'indice "p" , une solution est par exemple

Range("E" & k).Select

Selection.Copy

Range("E" & p,).Select

Application.CutCopyMode = False

ActiveCell.FormulaR1C1 = "=0.42*24"

OK .mais pour une série de cellules qui vont de la colonne E à la colonne AO , quelle est la syntaxe à adopter?

?? Range("E" & p, "AO" & p).Select ??

A vous lire.Merci

bonjour.

Voici la partie qui m'ennuie reduite

Voici mon programme (reduit) avec toujours la problématique d'obtenir mes lignes horaire en décimale.

Sub passage_hhmm_en_0000_REDUIT()

'le début du programme effectue

'---------------------------------------

' récupération du nombre de ligne à transcrire "Nblg" et à conserver

'--------------------------------------

'on recopie les lignes qu'on mettra en décimal ( état actuel du fichier (ci joint) toutes les heures sont au format hh:mm)

'--------------------------------------

'Variables obtenues précédemment dans la partie du programme "récupération du nombre de ligne à transcrire "Nblg" et à conserver"

' k indice de la ligne qui contient les horaire en sexagésimal

' p indice de la ligne qui doit contenir les horaire en décimal

' Nblg nombre de ligne à passer de sexagésimal en décimal

'Sep indice de ligne séparatrice mise en couleur

'ctp un compteur

'tamp1 tampon1

'tamp2 tampon2

k = 2

Nblg = 10

p = Nblg

tamp1 = k

tamp2 = p

' --------------------

'on sépare les tableaux par une bande de couleur en JAUNE pour plus de visibilité

'--------------------

Sep = Nblg + 2 ' on passe a la ligne suivante "Nblg+(1 +ligne des titres)

Range("A" & Sep, "R" & Sep).Interior.Color = 65535 ' mise en couleur de la ligne séparatrice

'---------------------

'on recopie les colonnes textes

'ensuite

'on recopie les colonnes horaires ---------que je n'arrive pas pas a obtenir en format décimal

'---------------------

'Variable' pour la boucle TQ colonne texte

p = p + 3

cpt = 0

While cpt < Nblg '

'on recopie les colonnes textes

Range("A" & k, "D" & k).Select ' sélection des 4 premières colonnes sur la ligne indice "k"

Selection.Copy

Range("A" & p, "D" & p).Select ' sélection des 4 premières colonnes sur la ligne réceptrice d'indice "p"

Application.CutCopyMode = False

ActiveSheet.Paste

k = k + 1

p = p + 1

cpt = cpt + 1

Wend

'

'maintenant il faut recopier les heures et les mettre sous un format décimal, de la colonne E"p" à la colonne R"p"

'Voici ce que j'ai fait

'Variable' pour la boucle TQ horaire décimal

k = tamp1

p = tamp2 + 3

cpt = 0

While cpt < Nblg

'on recopie les colonnes horaire

Range("E" & k, "R" & k).Select ' sélection des 4 premières colonnes sur la ligne indice "k"

Selection.Copy

Range("E" & p, "R" & p).Select ' sélection des 4 premières colonnes sur la ligne receptrice d'indice "p"

Application.CutCopyMode = False

ActiveSheet.Paste

k = k + 1

p = p + 1

cpt = cpt + 1

Wend

End Sub

Voici un extrait de mon fichier

6po-vba-reduit.xlsx (50.71 Ko)

Cordialement

1-

Si tu mets dans cet ordre, cela ne peut pas fonctionner !!

Application.CutCopyMode = False
ActiveSheet.Paste

Il faut mettre

ActiveSheet.Paste
Application.CutCopyMode = False

2-

Si tu recopies en l'état, rien ne change, tu as toujours des hh:mm.

Il faut multiplier chaque valeur par 24 et mettre en numérique

Proposition de correction

Sub passage_hhmm_en_0000_REDUIT()
'le début du programme effectue
'---------------------------------------
' récupération du nombre de ligne à transcrire "Nblg" et à conserver
'--------------------------------------
'on recopie les lignes qu'on mettra en décimal ( état actuel du fichier (ci joint) toutes les heures sont au format hh:mm)
'--------------------------------------

'Variables obtenues précédemment dans la partie du programme "récupération du nombre de ligne à transcrire "Nblg" et à conserver"

' k indice de la ligne qui contient les horaire en sexagésimal
' p indice de la ligne qui doit contenir les horaire en décimal
' Nblg nombre de ligne à passer de sexagésimal en décimal
'Sep indice de ligne séparatrice mise en couleur
'ctp un compteur
'tamp1 tampon1
'tamp2 tampon2

k = 2
Nblg = 10
p = Nblg
tamp1 = k
tamp2 = p
' --------------------
'on sépare les tableaux par une bande de couleur en JAUNE pour plus de visibilité
'--------------------

Sep = Nblg + 2 ' on passe a la ligne suivante "Nblg+(1 +ligne des titres)
Range("A" & Sep, "R" & Sep).Interior.Color = 65535 ' mise en couleur de la ligne séparatrice

'---------------------
'on recopie les colonnes textes
'ensuite
'on recopie les colonnes horaires ---------que je n'arrive pas pas a obtenir en format décimal
'---------------------

'Variable' pour la boucle TQ colonne texte
p = p + 3
cpt = 0

While cpt < Nblg '

'on recopie les colonnes textes

Range("A" & k, "D" & k).Select ' sélection des 4 premières colonnes sur la ligne indice "k"
Selection.Copy
Range("A" & p, "D" & p).Select ' sélection des 4 premières colonnes sur la ligne réceptrice d'indice "p"
ActiveSheet.Paste
Application.CutCopyMode = False
k = k + 1
p = p + 1
cpt = cpt + 1
Wend
'
'maintenant il faut recopier les heures et les mettre sous un format décimal, de la colonne E"p" à la colonne R"p"
'Voici ce que j'ai fait

'Variable' pour la boucle TQ horaire décimal
k = tamp1
p = tamp2 + 3
cpt = 0

While cpt < Nblg

'on recopie les colonnes horaire
Range("E" & p, "R" & p).FormulaR1C1 = "=R[-" & (Nblg + 1) & "]C*24"
Range("E" & p, "R" & p).NumberFormat = "0.00"
p = p + 1
cpt = cpt + 1
Wend

End Sub
13po-vba-reduit.xlsm (19.48 Ko)

Merci SUPER et ca marche pile poil

L'important c'est que tu aies compris comment sont transformées les heures hh:mm en décimales

Rechercher des sujets similaires à "passer ligne horaire sexagesimale decimale"