Convertir des secondes en heures, minutes et secondes [Fermé]

Signaler
Messages postés
274
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
14 avril 2016
-
 Papoux123 -
Bonjour,

Peut t'on le faire avec une seule colonne ? C'est a dire que je met un chiffre comme 4545 et il se converti dans le même carreau à 01:15:45

J'aimerai que la colonne entière B5 ai cette commande.
Présentement j'ai un bon résultat en utilisant deux colonnes, celle de gauche dans laquelle je met le nombre en secondes et celle de droite dans laquelle je convertis le nombres de secondes en divisant par 86400, mais j'aimerai ne pas avoir a utiliser deux colonnes. Et le problème aussi en utilisant deux colonnes c'est que si je n'ai pas de chiffre dans la colonne de gauche, il apparaît quand même des 00:00:00 dans la colonne de droite, j'aimerai que s'il n'y a pas de nombres rien n'apparaisse.

P.S. A chaque rangées le nombres de secondes va varier, c'est une banque de données qui enregistre les temps d'arrêts d'une machine.

Est-ce possible et si oui, quel serai le code de la macro?

Merci de votre aide

papoux123


13 réponses

Messages postés
12446
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
3 août 2020
1 953
Bonsoir

A mettre dans le worksheet de la feuille concernée :

Public w As Integer


Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column <> 2 Or w = 1 Then w = 0: Exit Sub
x = Target.Row
y = Target.Column
w = 1
hh = Target.Value / 86400
Cells(x, y).Value = hh
End Sub

Cdlmnt

"L'imagination est plus importante que le savoir." A. Einstein
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 56849 internautes nous ont dit merci ce mois-ci

Messages postés
274
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
14 avril 2016
32
Merci et que fait cette macro finalement ?

papoux123
Messages postés
12446
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
3 août 2020
1 953
Pour tout nombre entré dans la colonne B elle en effectue la division par 86400 et remplace le nombre entré dans la cellule par la nouvelle valeur ( hh = Target.Value / 86400 puis
Cells(x, y).Value = hh)

Bien mettre la colonne B en format Heure


la variable W mise à 1 avant d'effectuer la division c'est pour éviter qu'excel refasse le calcul en entrant la nouvelle valeur dans la cellule (on échappe avec le if w=1 exit sub) sinon ce serait sans fin et résultat 0 dans la cellule !
Messages postés
274
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
14 avril 2016
32
merci pour l'info c'est très apprécié.
Je ne me souviens plus comment aller mettre le code dans worksheet, quelqu'un pourrais m'éclairer?

Papoux123
Messages postés
274
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
14 avril 2016
32
Private Sub Worksheet_Change(ByVal Target As Range) 

If Target.Column <> 2 Or w = 1 Then w = 0: Exit Sub 
x = Target.Row 
y = Target.Column 
w = 1 
hh = Target.Value / 86400 
Cells(x, y).Value = hh 
End Sub


La colonne B correspond a quoi dans le code car je voudrais changer de colonne ?

Papoux123
Messages postés
12446
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
3 août 2020
1 953
Pour ouvrir l'éditeur VBA ALT+F11
Cliquer sur la feuille concernée

La colonne B c'est la 2eme d'où le target.column <>2 de la1ere ligne pour sortir de la Sub si on est ailleurs qu'en colonne 2

Ne pas oublier de coller avant la macro la déclaration :
Public w As Integer

Cdlmnt
Messages postés
274
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
14 avril 2016
32

L'image n'est pas très clair et pourtant elle est de bonne dimension.

Voila ce que ça donnes, Est-ce bien dans ThisWorkBook que je dois le mettre et quand on a copié, on a juste a sauvegarder ? Il y à une autre macro dans module 1.
Doit t'on créer Module 2 ?

Excuse moi pour mon ignorance, j'essai d'apprendre.

Merci de m'aider

papoux123
Messages postés
12446
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
3 août 2020
1 953
J'avais répondu mais le message a disparu !

Non pas dans this workbook

La macro doit étre liée à la feuille où elle s'applique puisque c'est la modification d'une cellule qui déclenche la macro et qu'elle ne doit pas s'appliquer dans les autres feuilles

Dans l'arborescence au dessus de This workbook il y a les noms des feuilles du classeur
Double cliquer sur le nom de la feuille concernée et mettre le code dans la fenêtre de droite

Je ne sais pas quel est la macro dans module 1
Toutes macro dans un module est accessible de n'importe quel endroit du classeur et dans la liste des Macros dans l'onglet Developpeur

il peut y avoir plusieurs macro dans un même module
On peut classer les macros dans plusieurs modules

Nous sommes tous ignorants et c'est en pratiquant qu'on apprend peu à peu !

Cdlmnt
Messages postés
274
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
14 avril 2016
32
Ça fonctionne mais sur un fichier exel qui n'est pas lié a une base de données. SI je l'utilise dans ma base de donnée, ça ne fonctionne pas. Donc je dois fonctionner sur deux colonnes, la première j'entre mes chiffres venant de ma base de donnée et la seconde ou je fais le calcul en me servant de la colonne de gauche. Ça ca fonctionne sauf que ce que je n'aimes pas c'est que dans ma colonne de droite, j'ai dans toute la colonne des 00:00:00 qui apparaissent même si je n'ai aucune valeur dans la colonne de gauche. Peut t'on effacer les cases qui n'ont pas de comparaison a faire. Estt'il possible si j'ai 00:00:00 de demander que la case soit vide et que la valeur apparaissent seulement si j'ai une valeur de mise dans la colonne de gauche ?

Je sais pas si c'est bien expliqué.

Papoux
Messages postés
12446
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
3 août 2020
1 953
Ok je n'avais pas compris que la colonne de chiffres provenait d'une copie d'une base de donnée

alors plusieurs solutions :

Soit une macro qui relit toute la colonne de données et fait la conversion mais est ce que le colonne à toujours le même nombre de lignes ?

Soit pour supprimer les 00:00:00 une condition SI dans la formule :
=SI(B1="";"";B1/86400)
Messages postés
12446
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
3 août 2020
1 953
La macro pourrait être celle-ci pour la colonne B

A mettre dans un module et à lancer depuis Macros de l'onglet Développeur

Sub transfo()
Dim DerLigne As Long
DernLigne = Range("B" & Rows.Count).End(xlUp).Row 'derniere ligne non vide de la colonne
For n = 1 To DerLigne 'boucle de la ligne 1 à la dernière
If Range("B" & n).Value<>"" Then 'si la cellule n'est pas vide
hh = Range("B" & n).Value / 86400 ' on fait la division
Range("B" & n).Value = hh ' on remplace la valeur dans la cellule parle résulta
End If
Next n
End Sub

Ne pas oublier de mettre la colonne B en Format Heure et même en Format personnalisé [h]:mm:ss si des durées peuvent être supérieures à 23 h 59
Ok je ne procèdes pas comme l'autre finalement.

Papoux123
Tous cela fonctionne mais pas dans mon fichier qui fonctionne avec ma banque de données. La première ligne de mon fichier contient les titres correspondant a mes champs.

Il ne semble pas avoir de solution a mon problème on dirais.

papoux123
Est-ce qu'il est possible que ça soit la version d'exel. J'utilise Exel 2010 sur un poste de travail et ça fonctionne mais sur un autre poste avec 2007 ca marche pas.

papoux123
Messages postés
12446
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
3 août 2020
1 953
Je ne sais pas, la macro je l'ai faite sur 2007
Qu'est ce qui ne fonctionne pas avec la banque de données ? Cela affiche une erreur quand tu lances la macro ?

Sinon tu te rabats sur la solution de la 2eme colonne avec la formule que je t'ai donnée précédemment pour supprimer les 00:00
Les deux méthodes ne fonctionnent pas avec la banque de données car je l'aurais pris sans problème la deuxième.

papoux123
Messages postés
12446
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
3 août 2020
1 953
Là je ne sais plus quoi dire !
Bon courage néanmoins
C'est déjà bien gentil de ta part d'avoir investi du temps pour moi. Je t'en remerci.

Une petite question.

Dans Office 2010 quand je met ceci =SI(G1="";"";G1/86400) les deux G1 reste bleu, quand je le met dans Office 2007 le premier G1 est bleu mais le reste est noir.

Est-ce que tu comprend pourquoi ?

Papoux123
Messages postés
12446
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
3 août 2020
1 953
Les 2 références restent bien en bleu chez moi sous 2007 !
Quand l'une reste en noir c'est qu'il y en a une erreur en principe, mais tu devrait avoir un message comme quoi la formule comporte une erreur
J'ai justement une erreur quand j'inscrit la formule et pourtant je viens d'essayer sur un autre poste de travail avec 2007 et ça fonctionne. Je me demande si le fait que j'utilise Windows XP virtual sur mon portable qui a WIndows 7 si ce n'est pas ça qui cause problème. Car mon autre logiciel qui crée les banques de données ne fonctionne pas sur Windows 7 64 bits et j'ai dû installer Windows XP Virtual pour le faire fonctionner.

Je vais refaire des essais complet avec un autre poste de travail.

Je te reviens avec des nouvelles

Papoux123
Finalement, ça fonctionne très bien sur le poste de travail ou sera installé le logiciel d'acquisition de données.

Un GROS MERCI de m'avoir aider, c'est fortement apprécié.
Vous les français, on se passerai pas de vous, d'ailleurs mon gendre est français :)

Bon week end et au plaisir de se rejaser.

Papoux123