XL 2013 Macro export vers .txt

Leché

XLDnaute Junior
Bonjour,

Je souhaiterai mettre en place une macro permettant de faire ceci :

J’ai un fichier Excel nommée « FDS », dans ce fichier il y a plusieurs onglets dont :
  • Un onglet nommé « X »
  • Un onglet nommé « Y »
Pour ces deux onglets, je souhaiterai exporter dans deux fichiers .txt différents , (nommé de la même façon que les noms des onglets) l’ensemble des valeurs de la colonne F (A partir de la ligne 7 jusqu’à la dernière ligne non-vide)

Soit un fichier .txt nommé Y, reprenant l’ensemble des valeurs de la colonne F de l’onglet Y (à partir de la 7eme ligne)

Et un fichier .txt nommé X, reprenant l’ensemble des valeurs de la colonne F de l’onglet X (à partir de la 7eme ligne)

Cette macro sera lancée depuis un fichier Excel « vierge » (juste ouvert pour lancer la macro) ciblant donc le fichier excel « FDS » (qui sera dans le même dossier)
Les deux fichier .txt seront enregistrer dans le même fichier que FDS et le fichier vierge.

Si vous avez un bout de code pour commencer :)

Merci d'avance pour vos retour,

Bonne journée
 
Solution
VB:
Sub test()
With Workbooks.Open(ThisWorkbook.Path & "\FDS.xlsm")  'Ouvre le Fichier Source à voir
   FichierTxt .Sheets("30x2"), ThisWorkbook.Path & "\30x2.txt"
   FichierTxt .Sheets("35x2"), ThisWorkbook.Path & "\35x2.txt"
   .Close
End With
End Sub
Sub FichierTxt(Onglet As Worksheet, Txt As String)
Dim F As Long
F = FreeFile
  With Onglet
    Enrgt = ""
    For Each C In .Range("F7", .Cells(.Rows.Count, "F").End(xlUp))
     If Not C.EntireRow.Hidden And CStr(C) <> "" Then
        If Enrgt <> "" Then Enrgt = Enrgt & vbCrLf
            Enrgt = Enrgt & C.Value
            End If
    Next C
  End With
Open Txt For Append As #F
    Print #F, Enrgt
Close #F
End Sub

danielco

XLDnaute Accro
Bonjour,

Essaie :

VB:
Sub test()
  Dim Enrgt As String, Wbk As Workbook, C As Range
  Close #1
  Set Wbk = Workbooks.Open("FDS.xlsx")
  Open "X.txt" For Output As #1
  With Sheets("X")
    For Each C In .Range("F7", .Cells(.Rows.Count, 6).End(xlUp))
      Enrgt = C.Value
      Print #1, Enrgt
    Next C
  End With
  Close #1
  Open "Y.txt" For Output As #1
  With Sheets("Y")
    For Each C In .Range("F7", .Cells(.Rows.Count, 6).End(xlUp))
      Enrgt = C.Value
      Print #1, Enrgt
    Next C
  End With
  Close #1
End Sub

Cordialement.

Daniel
 

dysorthographie

XLDnaute Accro
bonjour,
c'est quand même plus parlant comme ça? non?
VB:
 For Each C In .Range("F7", .Cells(.Rows.Count, "F").End(xlUp))

Code:
With Sheets("X")
    Enrgt = ""
    For Each C In .Range("F7", .Cells(.Rows.Count, "F").End(xlUp))
        If Enrgt <> "" Then Enrgt = Enrgt & vbCrLf
        Enrgt = Enrgt & C.Value
    Next C
    Open "X.txt" For Output As #1
        Print #1, Enrgt
   Close #1
End With
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonjour à tous
avant de se lancer dans des exercices de style je pense qu'il faudrait demander au demandeur
si il veut les données écrites horizontalement ou verticalement ?
doit on mettre un séparateur ?
si oui le quel ?
doit on vraiment faire sauter les lignes vides?
etc...etc...
le demandeur aurait pu donner ces précisions de lui même ;)
 

danielco

XLDnaute Accro
j'ai juste repris ton code alors regarde tes erreurs et non les miennes!

ces deux ligne sont strictement identique!
VB:
    For Each C In .Range("F7", .Cells(.Rows.Count, "F").End(xlUp))
    For Each C In .Range("F7", .Cells(.Rows.Count, 6).End(xlUp))
Non pas. Mon code fonctionne, lui. Ne sois pas si agressif. Si tu ne veux pas qu'on critique ton code, ne le poste pas sur un forum. Pour la plage F6:F7 non vides, par exemple :

VB:
  Set C = .Range("F7", .Cells(.Rows.Count, "F").End(xlUp))
  Debug.Print C.Address
donne F7:F8 pour C.Address

Daniel
 

Leché

XLDnaute Junior
bonjour à tous
avant de se lancer dans des exercices de style je pense qu'il faudrait demander au demandeur
si il veut les données écrites horizontalement ou verticalement ?
doit on mettre un séparateur ?
si oui le quel ?
doit on vraiment faire sauter les lignes vides?
etc...etc...
le demandeur aurait pu donner ces précisions de lui même ;)

Bonjour,

Merci pour vos différents retour, je vais essayer vos solutions dans la journée..
Il est vrai que j'aurais pu vous donner les précisions suivantes :

Il faut que le fichier .txt soit organisé de la façon suivante :

26302059 '(Valeur 1)
26302056 '(Valeur 2)
26302458 '(Valeur 3)
26302459 '(Valeur 4)
........ '(Valeur X)

Soit : pas de séparateur, juste un retour a la ligne entre chaque ligne du fichier excel (comme si on effectuais un copier/coller de la colonne sur le fichier txt)

Le fait qu'il y est des espaces ne changent en rien (donc si pas de valeur dans [F7 : F32] puis une valeur en F33 et pas de valeur jusqu'a F99 , cela ne m'impacte pas)

Cordialement,
 

ChTi160

XLDnaute Barbatruc
Bonjour ,
moi j'ai pas compris ça !
Mettons que tu aies uniquement F1 et F7 non vides, tu utilises seulement alors F2:F7 dans la macro.
alors que Leché dit :
A partir de la ligne 7 jusqu’à la dernière ligne non-vide
que viennent faire les
C'est surtout incorrect s'il y a des cellules non vides en F1:F6.
et
Mettons que tu aies uniquement F1 et F7 non vides, tu utilises seulement alors F2:F7 dans la macro.
Bonne journée
jean marie
 

Leché

XLDnaute Junior
Lors de l’exécution , j'ai cette erreur pour commencer .. :

1611649526289.png
 

Discussions similaires

Réponses
6
Affichages
264
Réponses
2
Affichages
222
Réponses
13
Affichages
474

Statistiques des forums

Discussions
311 720
Messages
2 081 897
Membres
101 833
dernier inscrit
sandra25