Heure dans une cellule Excel

Résolu
RS8 Messages postés 100 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 15 juillet 2009 - 22 juin 2007 à 14:33
RS8 Messages postés 100 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 15 juillet 2009 - 25 juin 2007 à 14:37
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

Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
22 juin 2007 à 16:29
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
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
22 juin 2007 à 14:41
Geste n° 1 pour connaître ta solution : poster la discussion là où il convient (ce qui n'est pas le cas ici !)
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
22 juin 2007 à 15:06
Arf, méa culpa, il s'agit bien de VB et non de VBA, je réouvre le topic.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
22 juin 2007 à 15:13
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) ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
22 juin 2007 à 15:16
Question pose autrement : ton applucation comporte-te-elle un fichier d'extension  .vbp ?
0
RS8 Messages postés 100 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 15 juillet 2009
22 juin 2007 à 15:19
Oui je pilote par VB6 j'ai donc un .vbp !
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
22 juin 2007 à 15:25
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.
0
RS8 Messages postés 100 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 15 juillet 2009
22 juin 2007 à 15:32
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.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
22 juin 2007 à 15:59
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)
0
RS8 Messages postés 100 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 15 juillet 2009
22 juin 2007 à 16:13
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.
0
RS8 Messages postés 100 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 15 juillet 2009
22 juin 2007 à 16:16
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;
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
22 juin 2007 à 16:16
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) ?
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
22 juin 2007 à 16:19
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
0
RS8 Messages postés 100 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 15 juillet 2009
22 juin 2007 à 16:23
00:00:00 donne0 alors que 01:00:00 done 4.6666
0
RS8 Messages postés 100 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 15 juillet 2009
25 juin 2007 à 14:37
J'ai utilisé Cells(2,6).value = format(MaVariable;"hh:mm") et cela fonctionne très bien!

Merci Molenn et aux autres.
0
Rejoignez-nous