J'ai un classeur de type xls, je voudrais le transformer en csv. Quand
j'enregistre manuellement le classeur sous le format CSV, Fichier,
Enregistrer sous, CSV, une première boite me demande "Voulez-vous conserver
le format du classeur csv" je réponds OUI. Puis je ferme avec Fichier,
Fermer et Excel me demande alors si je veux enregistrer les modifs, je
réponds OUI, et une seconde boite, identique à la première, me redemande si
je veux conserver le format CSV, je réponds à nouveau OUI et le classeur se
ferme. Puis j'ouvre ce classeur avec le bloc-notes et les données disposées
en colonnes sont bien séparées par le point-virgule. Cela fonctionne bien
manuellement. Malheureusement je ne peux reproduire le code avec
l'enregistreur de macro.
Je voudrais seulement automatiser ce processus afin de ne pas voir de boite
de dialogue s'afficher et pourtant répondre oui quand il le faut. J'ai
essayé le code ci-dessous mais il ne fonctionne pas vraiment, il me crée
bien un fichier csv mais les données sont illisibles et le volume est
quasiment identique au fichier xls, alors qu'avec du csv généralement c'est
plus léger. Dans quel ordre faut-il mettre Wait, SendKeys et SaveAs?
Application.DisplayAlerts = False
Workbook(essai.xls).Activate
ActiveWorkbook.SaveAs Filename:="C\TOTO\essai.csv"
Application.Wait Now + TimeValue("00:00:05")
Workbooks(essai.xls).Close True 'enregistre les modifs
Application.Wait Now + TimeValue("00:00:05")
Application.SendKeys "{LEFT}~~", True
ActiveWorkbook.SaveAs Filename:="C\TOTO\essai.csv" 'voulez-vous conserver le
format, OUI
Application.Wait Now + TimeValue("00:00:05")
Application.SendKeys "{LEFT}~~", True
ActiveWorkbook.SaveAs Filename:="C\TOTO\essai.csv" 'voulez-vous conserver le
format, OUI
Application.Wait Now + TimeValue("00:00:05")
Application.SendKeys "{LEFT}~~", True
Application.DisplayAlerts = True
Ceci fonctionne tres bien ... L'utilisation de SendKeys est compliquée.
Sub FichierCSV() ActiveWorkbook.SaveAs Filename:="test", FileFormat:=xlCSV, local:=True ActiveWorkbook.Close SaveChanges:úlse End Sub
khinoa
Bonjour Garette,
Oui cela fonctionne manuellement très bien, mais c'est assez fastidieux (surtout qu'Excel demande 2 fois la même chose) et c'est pour cela que je voudrais l'automatiser. Le problème est simplement de savoir quel est le bon enchaînement des instructions avec SendKeys et Wait puisque Wait semble nécessaire au bon fonctionnement.
J'ai fait des essais mais cela me crée un classeur csv quasiment du même poids que le xls et surtout totalement illisible à l'ouverture par le bloc-notes.
A +
"Garette" a écrit dans le message de news:
Bonjour,
Ceci fonctionne tres bien ... L'utilisation de SendKeys est compliquée.
Sub FichierCSV() ActiveWorkbook.SaveAs Filename:="test", FileFormat:=xlCSV, local:=True ActiveWorkbook.Close SaveChanges:úlse End Sub
Bonjour Garette,
Oui cela fonctionne manuellement très bien, mais c'est assez fastidieux
(surtout qu'Excel demande 2 fois la même chose) et c'est pour cela que je
voudrais l'automatiser. Le problème est simplement de savoir quel est le bon
enchaînement des instructions avec SendKeys et Wait puisque Wait semble
nécessaire au bon fonctionnement.
J'ai fait des essais mais cela me crée un classeur csv quasiment du même
poids que le xls et surtout totalement illisible à l'ouverture par le
bloc-notes.
A +
"Garette" <nospam.Garette@hotmail.com> a écrit dans le message de news:
OyxyIs7CHHA.5068@TK2MSFTNGP02.phx.gbl...
Bonjour,
Ceci fonctionne tres bien ...
L'utilisation de SendKeys est compliquée.
Sub FichierCSV()
ActiveWorkbook.SaveAs Filename:="test", FileFormat:=xlCSV, local:=True
ActiveWorkbook.Close SaveChanges:úlse
End Sub
Oui cela fonctionne manuellement très bien, mais c'est assez fastidieux (surtout qu'Excel demande 2 fois la même chose) et c'est pour cela que je voudrais l'automatiser. Le problème est simplement de savoir quel est le bon enchaînement des instructions avec SendKeys et Wait puisque Wait semble nécessaire au bon fonctionnement.
J'ai fait des essais mais cela me crée un classeur csv quasiment du même poids que le xls et surtout totalement illisible à l'ouverture par le bloc-notes.
A +
"Garette" a écrit dans le message de news:
Bonjour,
Ceci fonctionne tres bien ... L'utilisation de SendKeys est compliquée.
Sub FichierCSV() ActiveWorkbook.SaveAs Filename:="test", FileFormat:=xlCSV, local:=True ActiveWorkbook.Close SaveChanges:úlse End Sub
Garette
Khinoa,
Il ne faut pas utiliser SendKeys. L'utilisation de SendKeys à mon avis doit etre faites dans des cas specifiques quand il n'y a pas d'autres solution. Ici, il y a des solutions beaucoup plus fiables. Le code ci-dessous devrait répondre à ta question.
Il crée un fichier CSV séparer par des ";" sans poser de question à l'utilisateur. Tu peux l'adapter à ton contexte.
Sub FichierCSV() ActiveWorkbook.SaveAs Filename:="test", FileFormat:=xlCSV, local:=True ActiveWorkbook.Close SaveChanges:úlse End Sub
Khinoa,
Il ne faut pas utiliser SendKeys.
L'utilisation de SendKeys à mon avis doit etre faites dans des cas
specifiques quand il n'y a pas d'autres solution.
Ici, il y a des solutions beaucoup plus fiables.
Le code ci-dessous devrait répondre à ta question.
Il crée un fichier CSV séparer par des ";" sans poser de question à
l'utilisateur.
Tu peux l'adapter à ton contexte.
Sub FichierCSV()
ActiveWorkbook.SaveAs Filename:="test", FileFormat:=xlCSV, local:=True
ActiveWorkbook.Close SaveChanges:úlse
End Sub
Il ne faut pas utiliser SendKeys. L'utilisation de SendKeys à mon avis doit etre faites dans des cas specifiques quand il n'y a pas d'autres solution. Ici, il y a des solutions beaucoup plus fiables. Le code ci-dessous devrait répondre à ta question.
Il crée un fichier CSV séparer par des ";" sans poser de question à l'utilisateur. Tu peux l'adapter à ton contexte.
Sub FichierCSV() ActiveWorkbook.SaveAs Filename:="test", FileFormat:=xlCSV, local:=True ActiveWorkbook.Close SaveChanges:úlse End Sub
MichDenis
As-tu essayé quelque chose comme ceci :
'------------------------------ Sub FichierCSV() Application.DisplayAlerts = False 'Choisis la feuille que tu veux transformer en CSV Worksheets("Feuil1").Copy 'Sauvegarde en CSV de la feuille choisie With ActiveWorkbook .SaveAs Filename:="test", FileFormat:=xlCSV, local:=True .Close False End With Application.DisplayAlerts = False End Sub '------------------------------
"khinoa" a écrit dans le message de news: 4560086f$0$5385$ Bonjour à tous,
J'ai un classeur de type xls, je voudrais le transformer en csv. Quand j'enregistre manuellement le classeur sous le format CSV, Fichier, Enregistrer sous, CSV, une première boite me demande "Voulez-vous conserver le format du classeur csv" je réponds OUI. Puis je ferme avec Fichier, Fermer et Excel me demande alors si je veux enregistrer les modifs, je réponds OUI, et une seconde boite, identique à la première, me redemande si je veux conserver le format CSV, je réponds à nouveau OUI et le classeur se ferme. Puis j'ouvre ce classeur avec le bloc-notes et les données disposées en colonnes sont bien séparées par le point-virgule. Cela fonctionne bien manuellement. Malheureusement je ne peux reproduire le code avec l'enregistreur de macro.
Je voudrais seulement automatiser ce processus afin de ne pas voir de boite de dialogue s'afficher et pourtant répondre oui quand il le faut. J'ai essayé le code ci-dessous mais il ne fonctionne pas vraiment, il me crée bien un fichier csv mais les données sont illisibles et le volume est quasiment identique au fichier xls, alors qu'avec du csv généralement c'est plus léger. Dans quel ordre faut-il mettre Wait, SendKeys et SaveAs?
Application.DisplayAlerts = False Workbook(essai.xls).Activate ActiveWorkbook.SaveAs Filename:="CTOTOessai.csv" Application.Wait Now + TimeValue("00:00:05") Workbooks(essai.xls).Close True 'enregistre les modifs Application.Wait Now + TimeValue("00:00:05") Application.SendKeys "{LEFT}~~", True ActiveWorkbook.SaveAs Filename:="CTOTOessai.csv" 'voulez-vous conserver le format, OUI Application.Wait Now + TimeValue("00:00:05") Application.SendKeys "{LEFT}~~", True ActiveWorkbook.SaveAs Filename:="CTOTOessai.csv" 'voulez-vous conserver le format, OUI Application.Wait Now + TimeValue("00:00:05") Application.SendKeys "{LEFT}~~", True Application.DisplayAlerts = True
D'avance merci
khinoa
As-tu essayé quelque chose comme ceci :
'------------------------------
Sub FichierCSV()
Application.DisplayAlerts = False
'Choisis la feuille que tu veux transformer en CSV
Worksheets("Feuil1").Copy
'Sauvegarde en CSV de la feuille choisie
With ActiveWorkbook
.SaveAs Filename:="test", FileFormat:=xlCSV, local:=True
.Close False
End With
Application.DisplayAlerts = False
End Sub
'------------------------------
"khinoa" <zzzzz@zzz.zz> a écrit dans le message de news: 4560086f$0$5385$426a74cc@news.free.fr...
Bonjour à tous,
J'ai un classeur de type xls, je voudrais le transformer en csv. Quand
j'enregistre manuellement le classeur sous le format CSV, Fichier,
Enregistrer sous, CSV, une première boite me demande "Voulez-vous conserver
le format du classeur csv" je réponds OUI. Puis je ferme avec Fichier,
Fermer et Excel me demande alors si je veux enregistrer les modifs, je
réponds OUI, et une seconde boite, identique à la première, me redemande si
je veux conserver le format CSV, je réponds à nouveau OUI et le classeur se
ferme. Puis j'ouvre ce classeur avec le bloc-notes et les données disposées
en colonnes sont bien séparées par le point-virgule. Cela fonctionne bien
manuellement. Malheureusement je ne peux reproduire le code avec
l'enregistreur de macro.
Je voudrais seulement automatiser ce processus afin de ne pas voir de boite
de dialogue s'afficher et pourtant répondre oui quand il le faut. J'ai
essayé le code ci-dessous mais il ne fonctionne pas vraiment, il me crée
bien un fichier csv mais les données sont illisibles et le volume est
quasiment identique au fichier xls, alors qu'avec du csv généralement c'est
plus léger. Dans quel ordre faut-il mettre Wait, SendKeys et SaveAs?
Application.DisplayAlerts = False
Workbook(essai.xls).Activate
ActiveWorkbook.SaveAs Filename:="CTOTOessai.csv"
Application.Wait Now + TimeValue("00:00:05")
Workbooks(essai.xls).Close True 'enregistre les modifs
Application.Wait Now + TimeValue("00:00:05")
Application.SendKeys "{LEFT}~~", True
ActiveWorkbook.SaveAs Filename:="CTOTOessai.csv" 'voulez-vous conserver le
format, OUI
Application.Wait Now + TimeValue("00:00:05")
Application.SendKeys "{LEFT}~~", True
ActiveWorkbook.SaveAs Filename:="CTOTOessai.csv" 'voulez-vous conserver le
format, OUI
Application.Wait Now + TimeValue("00:00:05")
Application.SendKeys "{LEFT}~~", True
Application.DisplayAlerts = True
'------------------------------ Sub FichierCSV() Application.DisplayAlerts = False 'Choisis la feuille que tu veux transformer en CSV Worksheets("Feuil1").Copy 'Sauvegarde en CSV de la feuille choisie With ActiveWorkbook .SaveAs Filename:="test", FileFormat:=xlCSV, local:=True .Close False End With Application.DisplayAlerts = False End Sub '------------------------------
"khinoa" a écrit dans le message de news: 4560086f$0$5385$ Bonjour à tous,
J'ai un classeur de type xls, je voudrais le transformer en csv. Quand j'enregistre manuellement le classeur sous le format CSV, Fichier, Enregistrer sous, CSV, une première boite me demande "Voulez-vous conserver le format du classeur csv" je réponds OUI. Puis je ferme avec Fichier, Fermer et Excel me demande alors si je veux enregistrer les modifs, je réponds OUI, et une seconde boite, identique à la première, me redemande si je veux conserver le format CSV, je réponds à nouveau OUI et le classeur se ferme. Puis j'ouvre ce classeur avec le bloc-notes et les données disposées en colonnes sont bien séparées par le point-virgule. Cela fonctionne bien manuellement. Malheureusement je ne peux reproduire le code avec l'enregistreur de macro.
Je voudrais seulement automatiser ce processus afin de ne pas voir de boite de dialogue s'afficher et pourtant répondre oui quand il le faut. J'ai essayé le code ci-dessous mais il ne fonctionne pas vraiment, il me crée bien un fichier csv mais les données sont illisibles et le volume est quasiment identique au fichier xls, alors qu'avec du csv généralement c'est plus léger. Dans quel ordre faut-il mettre Wait, SendKeys et SaveAs?
Application.DisplayAlerts = False Workbook(essai.xls).Activate ActiveWorkbook.SaveAs Filename:="CTOTOessai.csv" Application.Wait Now + TimeValue("00:00:05") Workbooks(essai.xls).Close True 'enregistre les modifs Application.Wait Now + TimeValue("00:00:05") Application.SendKeys "{LEFT}~~", True ActiveWorkbook.SaveAs Filename:="CTOTOessai.csv" 'voulez-vous conserver le format, OUI Application.Wait Now + TimeValue("00:00:05") Application.SendKeys "{LEFT}~~", True ActiveWorkbook.SaveAs Filename:="CTOTOessai.csv" 'voulez-vous conserver le format, OUI Application.Wait Now + TimeValue("00:00:05") Application.SendKeys "{LEFT}~~", True Application.DisplayAlerts = True
D'avance merci
khinoa
khinoa
Garette,
Sub FichierCSV() ActiveWorkbook.SaveAs Filename:="test", FileFormat:=xlCSV, local:=True ActiveWorkbook.Close SaveChanges:úlse End Sub
Mais tu as parfaitement raison mais qu'à une seule condition, il faut qu'avant d'enregistrer sous le format csv il ait été appuyé sur CTRL+S (Fichier, Enregistrer), car sinon avec ActiveWorkbook.Close SaveChanges:úlse le classeur se retrouverait vide puisqu'aucune modification n'aurait été enregistrée.
Avec les 3 instructions suivantes, cela marche du tonnerre!!! Il fallait impérativement ActiveWorkbook.Save.
Grand merci, tu me sauves. Tu avais raison, SendKeys était inutile dans ce cas-là.
Au revoir
khinoa
Garette,
Sub FichierCSV()
ActiveWorkbook.SaveAs Filename:="test", FileFormat:=xlCSV, local:=True
ActiveWorkbook.Close SaveChanges:úlse
End Sub
Mais tu as parfaitement raison mais qu'à une seule condition, il faut
qu'avant d'enregistrer sous le format csv il ait été appuyé sur CTRL+S
(Fichier, Enregistrer), car sinon avec ActiveWorkbook.Close
SaveChanges:úlse le classeur se retrouverait vide puisqu'aucune
modification n'aurait été enregistrée.
Avec les 3 instructions suivantes, cela marche du tonnerre!!! Il fallait
impérativement ActiveWorkbook.Save.
Sub FichierCSV() ActiveWorkbook.SaveAs Filename:="test", FileFormat:=xlCSV, local:=True ActiveWorkbook.Close SaveChanges:úlse End Sub
Mais tu as parfaitement raison mais qu'à une seule condition, il faut qu'avant d'enregistrer sous le format csv il ait été appuyé sur CTRL+S (Fichier, Enregistrer), car sinon avec ActiveWorkbook.Close SaveChanges:úlse le classeur se retrouverait vide puisqu'aucune modification n'aurait été enregistrée.
Avec les 3 instructions suivantes, cela marche du tonnerre!!! Il fallait impérativement ActiveWorkbook.Save.
Grand merci, tu me sauves. Tu avais raison, SendKeys était inutile dans ce cas-là.
Au revoir
khinoa
Garette
Oui, effectivement, mon exemple partait du principe que le fichier XLS d'origine était existant et dèjà enregistré. Pour le conserver, il faut comme tu le dis, faire d'abord un ActiveWorkbook.Save, s'il y a eu des modifs. Bonne journée.
Oui, effectivement, mon exemple partait du principe que le fichier XLS
d'origine était existant et dèjà enregistré.
Pour le conserver, il faut comme tu le dis, faire d'abord un
ActiveWorkbook.Save, s'il y a eu des modifs.
Bonne journée.
Oui, effectivement, mon exemple partait du principe que le fichier XLS d'origine était existant et dèjà enregistré. Pour le conserver, il faut comme tu le dis, faire d'abord un ActiveWorkbook.Save, s'il y a eu des modifs. Bonne journée.
khinoa
MichDenis,
Merci quand même mais ça y est grâce au code de Garette. Sacré "ActiveWorkbook.Save" que j'avais oublié.
A +
khinoa
MichDenis,
Merci quand même mais ça y est grâce au code de Garette. Sacré
"ActiveWorkbook.Save" que j'avais oublié.
| Merci quand même mais ça y est grâce au code de Garette. Sacré | "ActiveWorkbook.Save" que j'avais oublié.
Tu retiens la procédure qui te convient ...c'est ok. mais celle que je t'ai soumise fonctionne très bien.
Garette
Les 2 macros font la meme chose. Une sauve les datas avant d'enregistrer et l'autre les copie pour les enregistrer.
En revanche, pourquoi mettre "Application.DisplayAlerts = False" alors qu'il n'y a pas de DisplayAlert dans ce cas ? (Ca marche tres bien sans) Si une telle commande est conservée dans le code, n'est-ce pas le risque de passer à coté d'un message Excel ... Par exemple c'est le risque d'écraser le précédent fichier Test.csv auquel on tient peut-etre ;-)
Les 2 macros font la meme chose.
Une sauve les datas avant d'enregistrer et l'autre les copie pour les
enregistrer.
En revanche, pourquoi mettre "Application.DisplayAlerts = False" alors qu'il
n'y a pas de DisplayAlert dans ce cas ?
(Ca marche tres bien sans)
Si une telle commande est conservée dans le code, n'est-ce pas le risque de
passer à coté d'un message Excel ...
Par exemple c'est le risque d'écraser le précédent fichier Test.csv auquel
on tient peut-etre ;-)
Les 2 macros font la meme chose. Une sauve les datas avant d'enregistrer et l'autre les copie pour les enregistrer.
En revanche, pourquoi mettre "Application.DisplayAlerts = False" alors qu'il n'y a pas de DisplayAlert dans ce cas ? (Ca marche tres bien sans) Si une telle commande est conservée dans le code, n'est-ce pas le risque de passer à coté d'un message Excel ... Par exemple c'est le risque d'écraser le précédent fichier Test.csv auquel on tient peut-etre ;-)
khinoa
Oui merci mais te ne vexe pas.
Je sais que ta procédure fonctionne également.
Au revoir
"MichDenis" a écrit dans le message de news:
| Merci quand même mais ça y est grâce au code de Garette. Sacré | "ActiveWorkbook.Save" que j'avais oublié.
Tu retiens la procédure qui te convient ...c'est ok. mais celle que je t'ai soumise fonctionne très bien.
Oui merci mais te ne vexe pas.
Je sais que ta procédure fonctionne également.
Au revoir
"MichDenis" <michdenis@hotmail.com> a écrit dans le message de news:
OWP6b38CHHA.3548@TK2MSFTNGP03.phx.gbl...
| Merci quand même mais ça y est grâce au code de Garette. Sacré
| "ActiveWorkbook.Save" que j'avais oublié.
Tu retiens la procédure qui te convient ...c'est ok.
mais celle que je t'ai soumise fonctionne très bien.