Heure dans une cellule Excel

Résolu
Signaler
Messages postés
100
Date d'inscription
vendredi 18 mai 2007
Statut
Membre
Dernière intervention
15 juillet 2009
-
Messages postés
100
Date d'inscription
vendredi 18 mai 2007
Statut
Membre
Dernière intervention
15 juillet 2009
-
Bonjour,

je souhaite récupérer le contenu des cellules d'un fichier Excel et les transposer dans un autre fichier. J'y arrive sauf pour une cellule. Cette cellule contient l'heure à laquelle le fichier a été sauvegardé. Elle est de la forme "hh:mm:ss". Le problème est que quand je remets le contenu dans une autre cellule, ce n'est plus l'heure mais un réel. J'imagine que VB effectue un calcul. Est-ce que les ":" signifient un calcul à faire en VB ? Comment puis-je faire pour signaler à VB de garder le contenu de la cellule tel quel ?

Merci.

15 réponses

Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
Mais durant le "transfert" la variable contenant l'heure a été convertit!

Encore une fois, je me répète mais : ni Excel, ni VB ne convertisse quoi que ce soit !!!

Tu as donc 2 solutions pour résoudre ton problème, soit tu appliques le format (c'est à toi de l'appliquer, VB ou Excel ne font que ce que tu leur dis de faire !) sur la cellule, soit sur la variable que tu injectes (et là, EXCEL l'interprèetra comme il le faut).

- sur la Cellule : cf mon post précédent
      => Copier la cellule entre fichier Excel (.cpoy, .pasteSpecial)
      => ou Appliquer le format voulu sur la cellule (.formatnumber )
- sur la variable :
      => Soit faire Cells(2,6).value = format(MaVariable;"hh:mm")
      => Soit déclarer ta variable en type Date : Dim Mavariable As Date

Ces 4 solutions fonctionnent.

Molenn
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Geste n° 1 pour connaître ta solution : poster la discussion là où il convient (ce qui n'est pas le cas ici !)
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
131
Arf, méa culpa, il s'agit bien de VB et non de VBA, je réouvre le topic.
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Juste une précision :
Tu pilotes Excel depuis le logiciel VB6 ou tu gères depuis VBA Visual Basic For Application = le VB utilisé par Excel) ?
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Question pose autrement : ton applucation comporte-te-elle un fichier d'extension  .vbp ?
Messages postés
100
Date d'inscription
vendredi 18 mai 2007
Statut
Membre
Dernière intervention
15 juillet 2009

Oui je pilote par VB6 j'ai donc un .vbp !
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
voilà qui est maintenant clair.
Si tu pilotes depuis VB, il te faut, pendant que tu es encore en pilotage de ton premier fichier, transposer le contenu de la cellule du fichier source en format string puis alimenter la cellule correspondante du fichier Excel de destination par cette donnée de type String.

Une autre méthode (mais je ne connais pas suffisamment VBA) serait de continuer ton pilotage d'Excel directement (sans passer ta lecture à VB) d'un fichier Excel à l'autre.
Messages postés
100
Date d'inscription
vendredi 18 mai 2007
Statut
Membre
Dernière intervention
15 juillet 2009

En fait je stacke le contenu de ma cellule dans une variable de type String et ensuite, dans l'autre fichier, je fais "Cells(5, 6) = MaVariable". Mais il me convertit mon contenu à savoir "09:08:26" par un réel du genre "0.81823".

On ne peut pas le forcer à conserver cette forme ?

Merci.
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
C'est à mon avis avant (pendant l'étape pilotage) que tu dois transformer en string ce que tu vas passer à VB6, pas une fois que VB6 a récupéré...
Reste que je demeure persuadé que VB6 peux piloter directement les deux fichiers sans lui-même servir de tremplin pour tes cellules lues dans l'un et copiées dans l'autre (exactement comme si tu le faisais, sans pilotage, d'Excel vers Excel)
Messages postés
100
Date d'inscription
vendredi 18 mai 2007
Statut
Membre
Dernière intervention
15 juillet 2009

Oui mais je ne touche pas du tout au fichier Excel! Mon programme ouvre un fichier Excel choisit par l'utilisateur , Vb prend le contenu des cellules, les stockes dans des variables, referme le fichier, crée un nouveau classeur dans lequel il mets les variables dans les cellules; Mais durant le "transfert" la variable contenant l'heure a été convertit!

Et ça je ne veux pas ! Excel ne change rien! Je vais essayé de définir la variable en tant que réel.

Merci.
Messages postés
100
Date d'inscription
vendredi 18 mai 2007
Statut
Membre
Dernière intervention
15 juillet 2009

Ce n'est pas possible car quand je fais MaVar = Cells(4, 5) par exemple et si je définit MaVar As Double, il me dit type incompatible. Il faut doànc que ca reste un String; Mais comment forcer VB a ne rien changer ?

Merci;
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Alors attends (je n'ai pas Excel, mais toi oui):
que te donnerait exactement l'heure 00:00:00 (lue par VB) ?
Et que te donnerait l'heure 01:00:00 (également lue par VB) ?
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
Si tu le pilotes par VB6, je suppose que tu as un code du genre :

xlFichier1.xlFeuille("Toto").cells(1,3).value où xlFichier1 est un objet Workbook et xlFeuille un objet Worksheet ?

Au lieu de faire Mavariable = xlFichier1.xlFeuille("Toto").cells(1,3).value puis
xlFichier2.xlFeuille("Tata").cells(2,4).value  = MaVariable

Il faut que tu fasses quelque chose du style 
xlFichier1.xlFeuille("Toto").cells(1,3).copy
xlFichier2.xlFeuille("Tata").cells(2,4).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
xlFichier2.xlFeuille("Tata").cells(2,4).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
Où alors, si tu tiens absolument à ta variable, une fois que tu l'a injectée (Cells(5, 6) MaVariable", lui donner le format voulu :   Cells(5, 6).NumberFormat "h:mm:ss;@"

Molenn
Messages postés
100
Date d'inscription
vendredi 18 mai 2007
Statut
Membre
Dernière intervention
15 juillet 2009

00:00:00 donne0 alors que 01:00:00 done 4.6666
Messages postés
100
Date d'inscription
vendredi 18 mai 2007
Statut
Membre
Dernière intervention
15 juillet 2009

J'ai utilisé Cells(2,6).value = format(MaVariable;"hh:mm") et cela fonctionne très bien!

Merci Molenn et aux autres.