Macro automatique - Export TXT

  • Initiateur de la discussion Initiateur de la discussion yabbyyou
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 !
 
Re : Macro automatique - Export TXT

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


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+ 😎
 

Pièces jointes

Dernière édition:
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!
 
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+ 😎
 
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 😎

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) !! 😕 😡 Il n'exécute pas le RefreshAll !!!!!
 
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 😕

décidément, j'ai des difficultés avec cette macro !!!
 
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+ 😎
 
Dernière édition:
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 😎

encore merci pour ton intervention !!!
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour