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
Cordialement
1-
Si tu mets dans cet ordre, cela ne peut pas fonctionner !!
Application.CutCopyMode = False
ActiveSheet.PasteIl faut mettre
ActiveSheet.Paste
Application.CutCopyMode = False2-
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
Merci
L'important c'est que tu aies compris comment sont transformées les heures hh:mm en décimales