Export dans fichier .txt

Delirium

XLDnaute Occasionnel
Bonjour à tous.

Je suis entrain de réaliser une appli sous XL qui me permet d'éditer un fichier texte (.txt) qui est ensuite utilisé par un logiciel que j'utilise dans le cadre de mon boulo.

Mon appli Xl fonctionne bien pour générer et traiter toute les données que j'ai besoin dans ce fichier .txt.

J'ai fait une macro qui me permet d'exporter toutes les cellules de la plage "AG4:AI950" de chaque onglet dans une feuille nommé "EXPORT PLEIADE" et qui fait une partie de la mise en forme des données pour les copier/collé dans mon fichier .txt

1) Mon problème est que pour le moment je suis obligé de parcourir chaque onglet 1 par 1 pour exécuter ma macro qui se nome "EXPORT_PLEIADE1" pour que les cellule des plages "AG4:AI950" de chaque onglet soient recopié à la suite les un des autres dans l'onglet "EXPORT PLEIADE" .

Quelqu'un pourrait 'il m'aider pour modifier ma macro de manière à récupérer automatiquement toute les plages "AG4:AI950" de tous les onglets dans l’onglet "EXPORT PLEIADE", sauf de celui nommé « NOTICE » (qui sert de notice à l’utilisation de mon appli), Puis que toutes ces données soient écrite dans un fichier .txt qui se trouve dans le répertoire de mon fichier XL.

Dans mon fichier exemple, j’ai été obligé de faire le ménage pour le mettre en ligne, notamment au niveau de la plage "AG4:AI950" que je veux récupérer. Dans ma macro qui envoi les données dans l’onglet "EXPORT PLEIADE", il y a des mises en forme qui sont réalisées.


2) Le second problème est que pour que mon fichier .txt soit utilisable par le logiciel, il est nécessaire qu’une partie des données soit au format scientifique comme c’est déjà le cas, dans mon fichier, mais XL utilise une « , » alors que mon logiciel utilise des « . ». J’ai bien la solution de modifier cela dans les options d’XL, mais j’aurais bien aimé que cela soit automatique et uniquement pour ce fichier.


Merci a tous ceux qui pourront m’aider.

A+
 

Pièces jointes

  • Planning_XLdownload3.zip
    11 KB · Affichages: 33

jp14

XLDnaute Barbatruc
Re : Export dans fichier .txt

Bonjour

Un exemple de macro.
A compléter et à tester

Code:
Sub essai()
Dim Sh As Worksheet
    For Each Sh In Worksheets
        If Sh.Name <> "NOTICE" Then
            EXPORT_PLEIADE1 Sh.Name
        End If
    Next Sh
End Sub

Sub EXPORT_PLEIADE1(namef As String)
'
' Exporte dans la feuille "EXPORT PLEIADE"
    
    Sheets(namef).Range("AG4:AI950").Copy
........................................

La première procédure liste toutes les feuilles du classeur et lance la deuxième macro en passant le nom de la feuille.
Il faut dans la deuxième procédure indiquer le nom de la feuille en utilisant
Sheets(namef).Range....

JP
 

Delirium

XLDnaute Occasionnel
Re : Export dans fichier .txt

Merci Jp

Pour ma première question, il semble que cela marche, hors mis que la macro liste également la feuille 8 nommé "Notice".

Mais comme dans cette feuille il n'y a pas de donné dans cette plage sur cette feuille il semble que cela ne copie pas les cellules.

Bon il, me reste les 2 autres questions pour finir mon appli XL.

Merci encore une fois pour ton aide, JP.

A+ ;)
 

JNP

XLDnaute Barbatruc
Re : Export dans fichier .txt

Bonjour le fil :)
Pour ma première question, il semble que cela marche, hors mis que la macro liste également la feuille 8 nommé "Notice".
Excel est sensible à la casse. Dans ton premier post, tu avais mis NOTICE, maintenant c'est Notice, donc corrige
Code:
If Sh.Name <> [COLOR=red][B]"Notice"[/B][/COLOR] Then
Bon il, me reste les 2 autres questions pour finir mon appli XL.
Personnellement, je n'en ai vu qu'une autre. Mais en y regardant bien, il y en a une de plus dans la 1) :p...
pour l'export texte qui est caché
Code:
Dim Plage As Range, Cellule As Range
Set Plage = Sheets("EXPORT PLEIADE").Range("AG4:AI950")
Open "C:\FichierTest.txt" For Output As #1    ' Ouvre le fichier en écriture.
For Each Cellule In Plage
Print #1, Cellule.Value & vbCrLf ' Écrit le texte dans le fichier.
Next
Close #1    ' Ferme le fichier.
A adapter pour la forme du TXT souhaité.
Pour la 2). Si l'export nécessite des points, remplacer ci-dessus
Code:
Print #1, replace(Cellule.Value,",",".") & vbCrLf
Bonne journée :)
 

Delirium

XLDnaute Occasionnel
Re : Export dans fichier .txt

Merci JNP pour ton aide.

Cela marche quasiment, sauf que lors de l'export les nombres repassent en format standard dans mon fichier .txt, alors que le logiciel utilise des nombres en format scientifique avec un point a la place de la virgule.

Mais grâce a toi j'ai bien avancé sur un point ou j'étais bloqué depuis un moment.

Merci encore.

;)
 

JNP

XLDnaute Barbatruc
Re : Export dans fichier .txt

Re :),
As-tu bien fait la modif indiquée ?
Code:
Dim Plage As Range, Cellule As Range
Set Plage = Sheets("EXPORT PLEIADE").Range("AG4:AI950")
Open "C:\FichierTest.txt" For Output As #1    ' Ouvre le fichier en écriture.
For Each Cellule In Plage
[COLOR=red][B]Print #1, replace(Cellule.Value,",",".") & vbCrLf[/B][/COLOR]
Next
Close #1    ' Ferme le fichier.
parce qu'il est totalement impossible avec ce code d'avoir une virgule dans le TXT :confused:...
A te lire :cool:
 

Staple1600

XLDnaute Barbatruc
Re : Export dans fichier .txt

Bonsoir çà tous


Une autre possibilité

(chut.. c'est du recyclage ;) )

Code:
Private Sub export_en_txt(Feuille$, Plage$, Chemin$, NomFichier_EXPORT$)
Dim fs, a, s$, r&, c&, pl&, dl&, dc&, PLG As Range
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set a = fs.CreateTextFile(Chemin & NomFichier_EXPORT & ".txt", True)
    With ThisWorkbook.Sheets(Feuille)
    Set PLG = .Range(Plage): pl = PLG.Cells(1, 1).Row
    dl = PLG.Rows.Count + pl: dc = PLG.Columns.Count
    For r = pl To dl - 1
        s = Empty: c = PLG.Cells(1, 1).Column
        While Not IsEmpty(.Cells(r, c))
        s = s & .Cells(r, c) & Chr(59)
            c = c + 1
        Wend
        a.writeline s
    Next r
    End With
End Sub

Code:
Sub exporter()
export_en_txt "EXPORT PLEIADE", "AG4:AI950", "C:\Temp\", "FichierTest"
End Sub
 

Delirium

XLDnaute Occasionnel
Re : Export dans fichier .txt

effectivement JNP, dans mon fichier txt, il n'y a pas de virgule mais des points, par contre cela ne conserve pas la mise en forme des chiffres en format scientifique.


le code de Staple1600 est également intéressant, car il permet quasiment d'avoir la bonne mise en forme, hors mis qu'il y a toujours des virgules a la place des points, le format des nombres scientifique ne sont pas conservé et il y a das points virgule à la fin de chaque ligne.


Je vous donne un fichiers .txt exemple du résultat que je cherche a obtenir.


Merci et A+
 

Pièces jointes

  • Exemple_export.zip
    633 bytes · Affichages: 23

JNP

XLDnaute Barbatruc
Re : Export dans fichier .txt

Re :),
Teste cette modification
Code:
Sub Export()
Dim Plage As Range, Cellule As Range
Set Plage = Sheets("EXPORT PLEIADE").Range("AG4:AI950")
Open "C:\FichierTest.txt" For Output As #1
For Each Cellule In Plage
If Cellule.NumberFormatLocal <> "0,000000000000E+0000" Then
Print #1, Replace(Cellule.Value, ",", ".") & vbCrLf
Else
Print #1, Replace(Format(Cellule.Value, "0,000000000000E+0000"), ",", ".") & vbCrLf
End If
Next
Close #1
End Sub
ça devrait le faire ;).
Bonne soirée :cool:
 

JNP

XLDnaute Barbatruc
Re : Export dans fichier .txt

Re :),
C'est que le fichier que tu as fourni au départ ne contient pas le bon format scientifique. Chez moi, avec un des 2 formats personnalisé (j'ai peut-être pas pris le bon...), ça fonctionne parfaitement...
Code:
Sub Export()
Dim Plage As Range, Cellule As Range
Set Plage = Sheets("EXPORT PLEIADE").Range("AG4:AI950")
Open "C:\FichierTest.txt" For Output As #1
For Each Cellule In Plage
If Cellule.NumberFormatLocal <> "[B][COLOR=red]0,000000000000E+0000[/COLOR][/B]" Then
Print #1, Replace(Cellule.Value, ",", ".") & vbCrLf
Else
Print #1, Replace(Format(Cellule.Value, "[COLOR=red][B]0,000000000000E+0000[/B][/COLOR]"), ",", ".") & vbCrLf
End If
Next
Close #1
End Sub
la partie rouge est ton format personnalisé (à vérifier le nombre de zéro), si ta cellule est dans ce format, alors elle est exportée avec ce format, ce qui fonctionne sans problème.
Si tu as plus de formats personnalisés, alors, il va falloir envisager chaque cas (avec un Select Case par exemple).
Vérifie les formats et refait un test, je te garantie que ça marche ;).
Bonne soirée :cool:
 

Delirium

XLDnaute Occasionnel
Re : Export dans fichier .txt

Salut c'est encore moi qui vient vous embêter avec mes problèmes ;)

Bon effectivement le code de JNP conserve bien le format scientifique, mais il ne conserve pas exactement celui que j'ai sous XL.

Je m'explique.

Lorsque la valeur d'une cellule est par exemple 52 dans XL le format scientifique me donne 5,20000000000000E+0001 , Ce qui correspond bien au format que j'ai besoin dans mon logiciel.

Or lorsque j'applique la macro, celle-ci la transforme en 520*000*000*000*000E-013
La valeur est la même, mais ce format n'est pas accepté dans le logiciel, du fait des espaces et du E-013.

En fait il faut que l'export conserve exactement le format affiché dans XL, si non l'import dans mon logiciel ne marche pas.

Bon je suis sur la bonne voie mais cela ne marche pas encore.

Merci de ton aide JNP.

A+
 

JNP

XLDnaute Barbatruc
Re : Export dans fichier .txt

Re :),
Tu vois qu'on progresse...
Avec tes formats à la c... :p... Vu que ça passe en 10 puissance -13, c'est bizarre. As-tu testé
Code:
Print #1, Replace(Format(Cellule.Value, [COLOR=black]"0[SIZE=5][COLOR=red].[/COLOR][/SIZE]000000000000E+0000[/COLOR]"), ",", ".") & vbCrLf
car je pense que c'est entre les "."et les "," que ça se joue.
A + :cool:
 

Delirium

XLDnaute Occasionnel
Re : Export dans fichier .txt

salut JNP

Désolé de ne pas avoir donné de nouvelle sur mon projet, mais j'étais en congé.


Bon j'ai modifié le code comme tu me l'a conseillé ce qui me donne :

Code:
Dim Plage As Range, Cellule As Range
Set Plage = Sheets("EXPORT PLEIADE").Range("A:A")
Open "C:\FichierTest.txt" For Output As #1
For Each Cellule In Plage
If Cellule.NumberFormatLocal <> "0,00000000000000E+0000" Then
Print #1, Replace(Cellule.Value, ",", ".") & vbCrLf
Else
Print #1, Replace(Format(Cellule.Value, "0.00000000000000E+0000"), ",", ".") & vbCrLf
End If
Next
Close #1
End Sub

Le problème c'est que maintenant le format des nombres est bon, mais il y a des saut de lignes entre chaque ligne, ce qui provoque un bug lorsque j'importe dans le logiciel.

encore une fois merci pour ton coup de main.

A+
 

Pièces jointes

  • FichierTest.zip
    483 bytes · Affichages: 22
  • FichierTest.zip
    483 bytes · Affichages: 26
  • FichierTest.zip
    483 bytes · Affichages: 27

Discussions similaires