Macro automatique - Export TXT

yabbyyou

XLDnaute Nouveau
Bonjour à tous,

Meilleurs vœux pour cette nouvelle année



Voici le détail de ma demande:



Description du projet :

Je souhaite exécuter une exportation automatique toutes les heures de fichiers Excel.
J'entends par "automatique": sans intervention humaine.
L'exportation doit se faire en TXT avec séparateur ";".


Pour se faire, je compte procéder de cette manière:
->créer un fichier .bat qui ouvre un fichier Excel précis.
->utiliser ce fichier .bat avec le planificateur de tâches Windows qui l’exécutera toutes les heures.
->Exécuter une macro à l'ouverture du fichier. Et c'est là que je bloque !!!


Description de la Macro nécessaire:
->Exécution à l'ouverture du fichier
->Doit "patienter" +/- 1 minute le temps que le fichier se mette à jour avec les connexion ODBC.
->Doit effectuer un export TXT avec séparateur ";" de la "feuil1". C'est la seule feuille à exporter.
->Doit fermer le fichier Excel source sans enregistrer les modifications
->Doit se fermer sans bloquer sur les boites de dialogues liées à la fermeture ou aux fichiers CSV.


Malgré mes plusieurs tentatives et recherches sur le net, je n'arrive pas à trouver la solution.


Si vous avez la moindre question, n'hésitez pas à me contacter.


D'avance un tout grand merci pour l'aide que vous pourrez m'apporter !
 

Lone-wolf

XLDnaute Barbatruc
Re : Macro automatique - Export TXT

Bonsoir yabbyyou,
bienvenu sur XLD et très bonne année à toi aussi :D


Voici la macro pour l'exportation en TXT

Code:
Sub Export()

With Worksheets("Feuil1")
rg = .Range("a1:e100").Value   'COLONNES A MODIFIER
End With

nFile = ThisWorkbook.Path & "\Main.txt"

Open nFile For Output As #1

For a = 1 To UBound(rg, 1)
tmp = " "
For b = 1 To UBound(rg, 2)
If tmp > " " Then
tmp = tmp & Chr(59) & "   " & rg(a, b)
Else
tmp = rg(a, b)
End If
Next
Print #1, tmp
Next
Close #1
Application.DisplayAlerts = False
Application.Quit
End Sub
'-----------------------------------------
Sub Appel()
UserForm1.Show
End Sub


Dans ThisWorkbook:

Code:
Private Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineA" () As Long
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (lpString As Any) As Long
Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (lpString1 As Any, lpString2 As Any) As Long

Private Function GetCmd() As String
   Dim lpCmd As Long
   lpCmd = GetCommandLine()
   GetCmd = Space$(lstrlen(ByVal lpCmd))
   lstrcpy ByVal GetCmd, ByVal lpCmd
End Function

Private Sub Workbook_Open()
Dim macmdline As Variant
Dim monparam As Variant 'déclare une variable

    macmdline = GetCmd 'affecte la valeur de la ligne de commande
    If Not IsNull(macmdline) Then 'si la variable est nulle
        If Len(macmdline) > 0 Then 'on s'assure qu'il y a eu une ligne de commande passée
            If InStr(macmdline, "/cmd") > 0 Then
                macmdline = Replace(macmdline, ThisWorkbook.FullName, "", , , vbTextCompare)
                monparam = Split(macmdline, "/cmd")
                Application.Run Mid(monparam(1), 2, Len(monparam(1)) - 3)
            End If
        End If
    End If
End Sub


Et pour le batch:

Code:
@echo off
start EXCEL.exe  /cmd/Appel "C:\Users\Louis\Desktop\Test\Classeur1.xls"    
@echo on


EDIT: En PJ le fichier test

A+ :cool:
 

Pièces jointes

  • Test.zip
    18.1 KB · Affichages: 25
  • Test.zip
    18.1 KB · Affichages: 25
  • Test.zip
    18.1 KB · Affichages: 25
Dernière édition:

yabbyyou

XLDnaute Nouveau
Re : Macro automatique - Export TXT

Bonjour Lone-wolf,

Un tout grand merci !

c'est exactement ce que je cherchais ! ça fonctionne parfaitement !!

Mon prochain challenge: créer ce même fichier en .xlsx !! car le .xls est limité à 65 000 lignes :(

Un grand merci!
 

Lone-wolf

XLDnaute Barbatruc
Re : Macro automatique - Export TXT

Bonjour yabbyyou,


essaie ce code

Code:
Sub Test()
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & "Nouveau classeur" , FileFormat:=xlOpenXMLWorkbook
End sub



A+ :cool:
 

yabbyyou

XLDnaute Nouveau
Re : Macro automatique - Export TXT

Bonjour Lone-wolf,

Je suis finalement resté en .xls. En effet j'ai réduit le nombre de lignes avant l'exportation :cool:

Encore un grand merci. J'ai pu parfaitement intégrer ton code dans le projet.

Il me reste un dernier point noir: réaliser un refreshall avant l'exportation. Le but est de rafraîchir le fichier avec la connexion ODBC.

Si j'ajoute cette ligne "ActiveWorkbook.RefreshAll" dans ton code, ça fonctionne parfaitement avec le débogueur.

Par contre, en exécutant la Macro, ça ne fonctionne plus (Afficher Macro -> Exécuter) !! :confused: :mad: Il n'exécute pas le RefreshAll !!!!!
 

yabbyyou

XLDnaute Nouveau
Re : Macro automatique - Export TXT

Bonjour Lone-wolf,

le refreshAll fonctionne parfaitement merci.


Crois-tu qu'il soit possible de modifier la macro afin d'enregistrer le fichier dans un autre dossier que le dossier "source".

Car si je remplace :
Code:
nFile = ThisWorkbook.Path & "\Main.txt"

par
Code:
nFile = ThisWorkbook.Path & "C:\Main.txt"

-->cela ne fonctionne plus :(


je ne suis pas arrivé à changer le chemin pour l'enregistrement du fichier :confused:

décidément, j'ai des difficultés avec cette macro !!!
 

Lone-wolf

XLDnaute Barbatruc
Re : Macro automatique - Export TXT

Bonjour yabbyyou,

oui bien sûr, mais il faut écrire le chemin complet. "C:\Users\yabbyyou\Documents\Main.txt"

On met ThisWorkbook.Path, quand le fichier est dans le même dossier du classeur. Comme toi tu as rajouté ThisWorkbook.Path "C:\Main.txt", c'est normal qu'il ne sache pas où il doit aller.


A+ :cool:
 
Dernière édition:

yabbyyou

XLDnaute Nouveau
Re : Macro automatique - Export TXT

oui oui j'ai essayé avec un chemin complet (plusieurs tests même), mais ça ne fonctionne pas. je ne comprends pas.

j'ai donc ajouté une ligne dans le code:

Code:
ChDir "C:\...\"
ActiveWorkbook.SaveAs Filename:= _
"C:\...\nom-du-fichier.csv", Local:=True, FileFormat:=xlCSV, _CreateBackup:=False


et là c'est ok.

c'est en csv mais séparateur ";" donc ça me convient :cool:

encore merci pour ton intervention !!!
 

Discussions similaires

Réponses
6
Affichages
264
Réponses
2
Affichages
416
Réponses
27
Affichages
1 K

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof