RS8
Messages postés100Date d'inscriptionvendredi 18 mai 2007StatutMembreDernière intervention15 juillet 2009
-
22 juin 2007 à 14:33
RS8
Messages postés100Date d'inscriptionvendredi 18 mai 2007StatutMembreDernière intervention15 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 ?
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 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
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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.
RS8
Messages postés100Date d'inscriptionvendredi 18 mai 2007StatutMembreDernière intervention15 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 ?
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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)
RS8
Messages postés100Date d'inscriptionvendredi 18 mai 2007StatutMembreDernière intervention15 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.
RS8
Messages postés100Date d'inscriptionvendredi 18 mai 2007StatutMembreDernière intervention15 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 ?
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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) ?
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 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;@"