Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 fichier txt

  • Initiateur de la discussion Initiateur de la discussion lepiouf
  • 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 !

lepiouf

XLDnaute Nouveau
Bonjour,
A partir d'un fichier csv (ici xls pour exemple), je voudrais extraire les 3 premières lignes A1:T3 automatiquement pour en créer un fichier "data.txt" sans l'onglet 1.
Comment puis-je faire?
j'ai mis un exemple (les 3 lignes doivent être inversées (donc A3:T1) par rapport à Onglet 1) je n'arrive pas à le sauvegarder? Mon fichier data ne doit donc contenir que 3 lignes
MERCI le piouf
 

Pièces jointes

Bonjour Sylvanu
Le fichier csv est le 1er onglet sans séparateur, 20 nombres de F à T sur 3 lignes
L'onglet 2 est mon fichier data que je voudrais avoir, 3 lignes inversées, avec séparateur virgule sans aucun espace et donc en format txt de wordpad ou word ( je viens de l' apprendre) et non en cellule A d'un excel!
Est_ ce possible? Merci
 
Re,
Un fichier csv est un fichier texte, non un fichier XL.
Un essai en PJ.
Le fichier généré est dans le même dossier que votre fichier XL.
VB:
Sub GénérerFichierTexte()
Fichier = ThisWorkbook.Path & "\" & "FichierTexte.txt"  ' Nom FichierTexte à modifier
If Len(Dir(Fichier)) > 0 Then
    Kill Fichier                                        ' Supprime le fichier s'il existe
End If
Open Fichier For Output As #1                           ' Ouverture fichier pour écriture
Tablo = [E2:X4]                                         ' Récupération des 3 premières lignes
For L = 3 To 1 Step -1                                  ' Pour les 3 lignes
    Chaine = ""
    For C = 1 To UBound(Tablo, 2)                       ' Et toutes les colonnes
        Chaine = Chaine & "," & Tablo(L, C)             ' Concaténér chaine
    Next C
    Print #1, Mid(Chaine, 2)                            ' Ecriture chaine sans la première virgule
Next L
Close #1                                                ' Fermeture fichier texte
End Sub
Le résultat donne :

En commençant par la 3eme ligne puis la 2eme puis la première ( si j'ai bien compris )
 

Pièces jointes

Bonsoir lepiouf, sylvanu,

@sylvanu ces 3 lignes de code sont tout à fait inutiles :
VB:
If Len(Dir(Fichier)) > 0 Then
    Kill Fichier                                        ' Supprime le fichier s'il existe
End If
En effet la ligne :
VB:
Open Fichier For Output As #1                           ' Ouverture fichier pour écriture
crée le fichier texte s'il n'existe pas ou écrase toutes ses données s'il existe.

A+
 
Bonjour le forum,

Avec ce code on traite un fichier CSV comme demandé au post #1 :
VB:
Sub RechercheCSV()
Dim fichier As Variant, ligdeb%, derlig&, ub&, col1%, col2%, sep$, a(), x%, i&, texte$, col%, deb%, j%, n&
'---fichier CSV---
fichier = Application.GetOpenFilename("Fichiers csv (*.csv),*.csv")
If fichier = False Then Exit Sub
ligdeb = 2
derlig = 4
ub = derlig - ligdeb
col1 = 4
col2 = 24
sep = ","
ReDim a(ub) 'base 0
x = FreeFile
Open fichier For Input As #x 'ouverture du fichier en lecture séquentielle
Do
    i = i + 1
    Line Input #x, texte
    If i >= ligdeb Then
        texte = Replace(texte, ";", sep) 'remplacement du séparateur
        col = 0: deb = 0
        For j = 1 To Len(texte)
            If Mid(texte, j, 1) = sep Then
                col = col + 1
                If col = col1 Then deb = j
                If col = col2 Then Exit For
            End If
        Next j
        a(ub - n) = Mid(texte, deb + 1, j - 1 - deb)
        n = n + 1
    End If
Loop While i < derlig
Close #x
'---fichier TXT---
fichier = Left(fichier, Len(fichier) - 3) & "txt" 'même chemin, même nom
x = FreeFile
Open fichier For Output As #x 'ouverture du fichier en écriture séquentielle
Print #x, Join(a, vbCrLf)
Close #x
MsgBox "Le fichier TXT a été créé..."
End Sub
Téléchargez les fichiers zippés joint où vous voulez et choisissez le fichier CSV à traiter.

A+
 

Pièces jointes

On peut se passer de la boucle j, c'est plus rapide :
VB:
Sub RechercheCSV()
Dim fichier As Variant, ligdeb%, derlig&, ub&, col1%, col2%, sep$, s$, a(), x%, i&, texte$, y$, deb%, fin%, n&
'---fichier CSV---
fichier = Application.GetOpenFilename("Fichiers csv (*.csv),*.csv")
If fichier = False Then Exit Sub
ligdeb = 2
derlig = 4
ub = derlig - ligdeb
col1 = 4
col2 = 24
sep = ";"
s = ","
ReDim a(ub) 'base 0
x = FreeFile
Open fichier For Input As #x 'ouverture du fichier en lecture séquentielle
Do
    i = i + 1
    Line Input #x, texte
    If i >= ligdeb Then
        texte = Replace(texte, sep, s) 'remplacement du séparateur
        y = Replace(texte, s, sep, , col1 - 1)
        deb = InStr(y, s)
        y = Replace(texte, s, sep, , col2)
        fin = InStrRev(y, sep)
        a(ub - n) = Mid(texte, deb + 1, fin - 1 - deb)
        n = n + 1
    End If
Loop While i < derlig
Close #x
'---fichier TXT---
fichier = Left(fichier, Len(fichier) - 3) & "txt" 'même chemin, même nom
x = FreeFile
Open fichier For Output As #x 'ouverture du fichier en écriture séquentielle
Print #x, Join(a, vbCrLf)
Close #x
MsgBox "Le fichier TXT a été créé..."
End Sub
Pour tester j'ai recopié les lignes 2 3 4 du fichier CSV sur 300 000 lignes, durées d'exécution chez moi :

- fichier du post #4 => 4,9 secondes

- fichier du post #7 => 3,8 secondes (hors boîte de dialogue)

- ce fichier => 2,5 secondes.
 

Pièces jointes

- 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

Réponses
12
Affichages
623
Réponses
3
Affichages
534
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…