Extraire vers un .txt

Bonjour,

me voilà à nouveau bloqué sur un de mes projets...

Grâce à vos dernières aides, j'ai pu déjà apprendre beaucoup mais là, c'est la première fois que j'intègre un logiciel extérieur à Excel et malgré mes recherches je ne trouve pas la solution...

Ci joint j'ai mis un fichier que nous remplissons lorsque l'un de nos logiciel est en panne.

Ce fichier permet de regrouper l'ensemble des informations importantes.

Il peut être rempli de multiples fois et surtout, il peut contenir un nombre infini de valeurs.

Lorsque le logiciel fonctionne, nous extrayons son contenu en fichier .txt afin de l’intégrer à un autre logiciel.

Dans ce fichier txt nous trouvons ligne après ligne :

numérocarte;montantcarte

Ce qui donne par exemple :

6275982180039075787;20,00

6275982180039078088;10,00

Je souhaite faire la même chose avec le tableau ci joint.

Inclure un bouton qui permet par macro de créer un fichier .txt au même format que le logiciel le ferait.

Il faut également que cette macro puisse fonctionner pour toutes les offres définies dans le tableau par des onglets différents.

Enfin, il ne faut pas extraire les cartes dont le montant est à déduire.

Je vous remercie d'avance pour votre aide,

Bonne journée à tous et bon été !

ps : je suis actuellement sur mac, je ne sais donc pas si les tests que je ferais fonctionneront chez moi...

Bonjour,

désolé pour le double post, mais je suis toujours bloqué sur mon problème...

Bonne journée et encore merci d'avance

Bonsoir,

Ça dans un module:

Option Explicit

Public Function XportTxt(Sh As Worksheet) As Boolean
Dim FSO As Scripting.FileSystemObject
Dim Ts As TextStream
Dim i%
  Set FSO = New Scripting.FileSystemObject
  Set Ts = FSO.CreateTextFile("C:\" & Format(Date, "ddmmyyyy") & "_" & Sh.Name & ".txt") 'Changer le dossier de destination
    For i = 5 To Sh.Range("E" & Rows.Count).End(xlUp).Row 'De 5 à la dernière ligne non vide de la colonne E
      If Len(Sh.Range("G" & i)) = 0 Then Ts.WriteLine (Sh.Range("E" & i) & ";" & Sh.Range("F" & i) & Sh.Range("H" & i))
    Next i 'Si rien en colonne G, on écrit sur une nouvelle ligne d'un txt la valeur en colonne E; valeur en F et H
  Set FSO = Nothing : Set Ts = Nothing 'On libère la mémoire
  XportTxt = True 'Pour éviter que le texte de la celulle A1 soit selectionné.
End Function

Et ça dans chaque feuille:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  If Not Application.Intersect(Target, Range("A1")) Is Nothing Then Cancel = XportTxt(Me) 'N'exécute la fonction que sur un double clic en A1
End Sub

Mais bon coder sur Mac... C'est un peu comme faire du Photoshop sur PC, niveau compatibilité c'est pas le top...

Cdt,

Darzou

Edit; Il faut aussi activer la référence Microsoft Scripting Runtime.

Bonjour,

désolé pour le temps de test, mais hier j'étais de repos...

J'ai testé votre code, cependant, j'ai un message d'erreur...

Je mets en pièce jointe une copie d'écran.

Enfin, est il possible que l'exportation se fasse en cliquant sur un bouton?

Merci beaucoup pour votre aide,

Je reconnais patauger totalement sur cette macro là...

Bonne journée

capture capture2

Bonjour,

J'ai rajouté des commentaires sur le code.

Pensez à activer la référence Microsoft Scripting Runtime (Dans l'éditeur de macros: outils -> références).

Si vous travaillez sur mac, je ne peux rien de plus pour vous. Je ne connais pas l'environnement mac...

Cdt,

Darzou

Bonjour,

je suis actuellement au travail, je suis donc sur un ordinateur sous windows.

Je viens de retester les codes, je n'ai actuellement plus de message d'erreur, mais rien ne se passe... (j'ai bien activé la référence)

Peut être est ce dû au chemin d'accès que j'ai donné?

Nous travaillons en reseau, ainsi chacun a des disques d'accès dufférents, le plus simple serait d'enregistrer le fichier sur le bureau, dois je simplement mettre "desktop"? Si c'est le cas, après avoir testé, je confirme que rien ne se passe.

Merci encore pour votre aide,

cordialement.

Le fichier se crée, ne s'ouvre pas. Donc oui ça donne l'impression que rien ne se passe mais si vous allez dans le répertoire choisi, normalement un txt aura été créé.

Pour le bureau, essayez avec

Set DSK = CreateObject("WScript.Shell").SpecialFolders("Desktop") & Application.PathSeparator

Cdt,

Darzou

Je suis affreusement désolé mais je ne veux pas faire de bêtises...

Le code :

Set Ts = FSO.CreateTextFile("C:\" & Format(Date, "ddmmyyyy") & "_" & Sh.Name & ".txt") 'Changer le dossier de destination

doit être entièrement remplacé par :

Set DSK = CreateObject("WScript.Shell").SpecialFolders("Desktop") & Application.PathSeparator

?

Est il possible d'ajouter une fenetre qui informe du bon enregistrement du fichier?

Milles merci !

Petit double post pour dire que j'ai testé sous plusieurs formes le code ci dessus.

J'ai a chaques fois un message d'erreur, je mets une copie d'écran en pièce jointe.

Merçi encore

capture3

La ligne

Set Ts = FSO.CreateTextFile("C:\" & Format(Date, "ddmmyyyy") & "_" & Sh.Name & ".txt") 

crée un fichier dans le disque C nommé sous le nom jjmmaaaa_nom_de_la_feuille

Format(Date, "ddmmyyyy")

renverra aujourd'hui à 02082013.

Option Explicit

Public Function XportTxt(Sh As Worksheet) As Boolean
Dim FSO As Scripting.FileSystemObject
Dim Ts As TextStream
Dim i%, LeNom$
  LeNom = "C:\" & Format(Date, "ddmmyyyy") & "_" & Sh.Name & ".txt" ' à ajuster
  Set FSO = New Scripting.FileSystemObject
  Set Ts = FSO.CreateTextFile(LeNom) 
    For i = 5 To Sh.Range("E" & Rows.Count).End(xlUp).Row 'De 5 à la dernière ligne non vide de la colonne E
      If Len(Sh.Range("G" & i)) = 0 Then Ts.WriteLine (Sh.Range("E" & i) & ";" & Sh.Range("F" & i) & Sh.Range("H" & i))
    Next i 'Si rien en colonne G, on écrit sur une nouvelle ligne d'un txt la valeur en colonne E; valeur en F et H
    If FSO.FileExists(LeNom) Then MsgBox "Fichier créé.", vbInformation, "Confirmation"
  Set FSO = Nothing: Set Ts = Nothing   'On libère la mémoire
  XportTxt = True 'Pour éviter que le texte de la celulle A1 soit selectionnée.
End Function

J'ai mis la date comme variable pour le nom du fichier puisque avec ce code, si vous créez deux fichiers du même nom, le premier sera écrasé.

Le message d'erreur variable non définie vient du fait que vous n'avez pas déclaré DSK comme variable (my bad...). Mais ce n'est pas indispensable de passer par ça. Un "C:\Users\Desktop" ou autre chemin, tout dépend de votre arborescence devrait suffire.

Cdt,

Darzou

Bonjour !

Navré mais j'ai encore une erreur qui se produit... Je reconnais encore mon erreur en avouant que je ne comprends pas grand chose à ce code, et que depuis hier je me triture l'esprit pour résoudre le problème mais que rien n'y fait...

Lors du bug, c'est cette ligne ci qui se met en surbrillance :

Dim FSO As Scripting.FileSystemObject

Je vous mets en pièce joitne une nouvelle copie d'écran.

Bonne journée et une nouvelle fois merci

capture4
Darzou a écrit :

Pensez à activer la référence Microsoft Scripting Runtime (Dans l'éditeur de macros: outils -> références).

Alt+F11, Alt+O, Alt+R... Puis cochez la case correspondant à Microsoft Scripting Runtime. Je ne peux pas faire plus...

Cdt,

Darzou

Je me suis rendu compte de mon erreur ultime après avoir posté ce message.

Mais j'ai toujours un problème, je mets en pièce joitne les captures d'écran...

Je pense que ceci est peut être dû aux permissions dur éseau au travail...

Comment fair epour éviter cela?

Existe t'il une fenêtre comme pour "enregistrer sous"?

Merci encore

capture5 capture6

Je ne pense pas que ce soit un problème d'autorisations. Vérifiez juste que le chemin C\Users\Desktop existe bien et rajoutez un "\" après Desktop dans le code.

Cdt,

Darzou

Cela fonctionne enfin, j'ai réussi à trouve run disque commun à tous les collaborateurs...

Il reste un dernier petit détail, lorsque j'extraie le fichier txt, ilf aut que le montant se finisse toujours par ",00".

Par exemple :

6275982180039078088;10,00

Actuellement, ca met :

6275982180039078088;10

y a t'il moyen que ca se fasse automatiquement?

Merci énooormément

If Len(Sh.Range("G" & i)) = 0 Then Ts.WriteLine (Sh.Range("E" & i) & ";" & Format(Sh.Range("F" & i) & Sh.Range("H" & i), "0.00"))

Cdt,

Darzou

Merciii !

Tout est absolument parfait et fonctionne à merveille !

Bonne journée et bon été

Rechercher des sujets similaires à "extraire txt"