IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème récupération texte d'une ligne de classeur pour écriture dans fichier txt


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Septembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Septembre 2018
    Messages : 13
    Par défaut Problème récupération texte d'une ligne de classeur pour écriture dans fichier txt
    Bonjour,

    Je pète un plomb depuis hier après-midi, après maintes configurations de code différentes je n'arrives pas à inscrire (écrire) dans un fichier Texte le contenu Texte des lignes (de la colonne A à H) d'un classeur.

    je me prends toujours un message d'erreur bloquant.

    Je vous ai retenu 4 configurations (noté "CONFIGURATION", voir plus) que je vous expose et j'aimerais grandement que vous puissiez me dire ce qui ne va pas dans mon code pour chacune.

    Toutes les anos se manifestent au niveau de la ligne Writeline et du code qui suit sur cette même ligne.

    JE VOUS REMERCIE si vous pouvez me sortir de cette m....


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    Private Sub Export_fic_txt_CommandButton1_Click()
     
    Dim oFSO As Scripting.FileSystemObject
    Dim oTxt As Scripting.TextStream
     
    'Instanciation du FSO
    Set oFSO = New Scripting.FileSystemObject
    Set oTxt = oFSO.CreateTextFile("C:\Users\p_bez\ExportListe_Listbox.txt", True) 'Le True ecrase le fichier si il existe déjà !!!!
     
    Application.ScreenUpdating = True
     
    Dim lig_num As Long
    Dim Last_Row As Long
    Dim i As Integer
    Dim Plage
     
    Set Feuil = Worksheets("RegistreTemp")
    Last_Row = Feuil.[A65000].End(xlUp).row 'dernière ligne non vide de la feuille concernée
     
    'CONFIGURATION 1 : avec l'utilisation d'une plage là j'ai abandonné, trop difficile !!!
    Plage = Feuil.Range("A1:H" & Feuil.[A65000].End(xlUp).row).Value 'Feuil.[A65000].End(xlUp).Row donne le dernier numéro de ligne renseigné
     
    i = 1
     
    With oTxt
     
    For lig_num = 1 To Worksheets("RegistreTemp").Rows.Count
    If i > Last_Row Then
          Exit For
    End If
     
    'CONFIGURATION 2 : avec l'utilisation de Rows
    .WriteLine Worksheets("RegistreTemp").Rows(i).Text
    '=> ici je prends Erreur d'exécution "94" : utilisation incorrecte de NUll
     
    'OU
     
    'CONFIGURATION 3 : avec l'utilisation de Range directement
    .WriteLine Range(Cells(i, 1), Cells(i, 8)).Text
    '=> ici je prends Erreur d'exécution "94" : utilisation incorrecte de NUll
     
    i = i + 1
    Next
     
    End With
     
    '--------------------------------------------------------------
     
    i = 1
    With oTxt
    Dim lig As Range
     
    For Each lig In Worksheets("RegistreTemp").Rows
     
    If i > Last_Row Then
          Exit For
    End If
     
    'CONFIGURATION 4 : avec l'utilisation d'un élément Range
    .WriteLine lig(Cells(i, 1), Cells(i, 8)).Text
    '=> Erreur d 'exécution '1004" : Erreur définie par l'application ou par l'objet
     
    i = i + 1
    Next
     
    End With
     
    '---------------------------------------------------------------
     
    'Il ne faut absolument pas oublier de fermer le fichier
     oTxt.Close
     
    Application.ScreenUpdating = False
     
    End Sub

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Une méthode plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim WB As Workbook
    Dim Plage As Range
     
    Set Plage = Worksheets("RegistreTemp").Columns("A:H")
    Set WB = Workbooks.Add
    Plage.Copy Range("A1")
    WB.SaveAs Filename:="C:\Users\p_bez\ExportListe_Listbox.txt", FileFormat:=xlTextWindows
    WB.Close
    Je n'ai pas testé. Tu auras donc peut-être du débugage à faire.

  3. #3
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Septembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Septembre 2018
    Messages : 13
    Par défaut
    Merci Menhir pour ta réactiver.

    Je viens de tester : Ca marche au niveau de l'écriture dans le fichier txt.
    En revanche j'ai un problème d'alignement des colonnes de texte (à l'image de ce que j'avais bien sur sur ma feuille excel de départ).
    Je te joins le fichier pour visualisation.
    En fait, il faudrait pouvoir délimiter des espaces "colonnes" dans le fichier txt pour avoir correctement les données bien alignées verticalement.

    Ton code est impressionnant succins et efficace.
    Je laisse le post ouvert pour savoir si quelqu'un pourrait me donner l'astuce pour correctement aligner mes colonnes dans ce fichier txt en écriture ou revenir sur l'une de mes configurations de conding d'origine exposées dans mon premier message.

    Merci encore Menhir de m'avoir aider.
    Je cherche de mon coté pour ce problème de colonnage du txt.

    Cdlt.
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par john78 Voir le message
    En revanche j'ai un problème d'alignement des colonnes de texte (à l'image de ce que j'avais bien sur sur ma feuille excel de départ).
    Je te joins le fichier pour visualisation.
    Il n'y a pas de format dans un fichier texte, il n'y a que du contenu.
    Si les données ne paraissent pas alignées dans le résultat, c'est que les données sont délimitées avec une tabulation (ce qui est le standard texte Windows).
    La position de chaque "colonne" dépend donc des écarts entre les taquets de tabulation de l'éditeur où tu l'ouvres.
    Si la taille de la donnée dépasse la distance entre deux taquets de tabulation, les données suivantes s'alignent un taquet plus loin.
    Donc, si les données sont de taille (nb de caractères) variables, elles peuvent s'aligner sur des taquets différents.

    Tu peux faire l'expérience en ouvrant ton fichier texte sur une application dont on peut régler l'espacement des taquets de tabulation (Word par exemple) et en mettant un assez grand espace entre chaque taquet. Les données paraitront parfaitement alignées.

    En fait, il faudrait pouvoir délimiter des espaces "colonnes" dans le fichier txt pour avoir correctement les données bien alignées verticalement.
    Comme je l'ai dit, les données sont déjà délimitées par des tabulations.
    Si tu veux que tes données soient séparées par un nombre d'espaces variables pour qu'elles paraissent alignées sans délimiteur, le code sera beaucoup plus compliqué. On ne pourra pas se contenter d'un enregistrement des données sources. Il va falloir rajouter un nombre variable d'espaces en fonction de leur nombre de caractères.

  5. #5
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Septembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Septembre 2018
    Messages : 13
    Par défaut
    J'ai parfaitement compris. Merci.

    Effectivement, et j'ai donc réfléchi à ce sujet, il faudrait au final intégrer tous les champs de ma plage excel dans un tableau puis ensuite en fonction de chaque longueur de données de chaque cellule du tableau l'insérer sur chaque position d'une ligne à écrire avec le nombre d'espace exact entre elles calculé dynamiquement à chaque passage d'une cellule à l'autre.
    Cela ne m’effraie pas mais en revanche faut avoir déjà la procédure purement vba excel on va dire pour écrire zone à zone (pour une même ligne) et de ligne à ligne chacune des cellules du tableau dans un fichier txt et là on rejoint pratiquement mes configurations qui plantaient dans mon premier message et que l'on a court-circuité par ton code très simple et d'une efficacité redoutable mais qui s'est éloigné de l'objectif du début.

  6. #6
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Septembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Septembre 2018
    Messages : 13
    Par défaut
    il y aurait aussi la possibilité et là ca doit être bien plus simple et ca peut satisfaire des utilisateurs qui reprennent le fichier txt ensuite, pouvoir intégrer des séparateurs du style ";" par exemple.
    Quoiqu'il y en a en ce moment même mais ils sont invisibles car ce ne sont que des espaces vides entre taquets comme tu dis si bien.

Discussions similaires

  1. [FLASH 8] texte suit une ligne??
    Par steeves5 dans le forum Flash
    Réponses: 2
    Dernier message: 27/01/2006, 10h41
  2. [RegEx] problème récupération texte
    Par Kerod dans le forum Langage
    Réponses: 2
    Dernier message: 25/01/2006, 16h10
  3. [Tableaux]texte sur une ligne
    Par bakonu dans le forum Balisage (X)HTML et validation W3C
    Réponses: 11
    Dernier message: 11/01/2006, 15h25
  4. [Tlistview] Couleur de fond et de texte d'une ligne
    Par radimby dans le forum Composants VCL
    Réponses: 8
    Dernier message: 21/12/2005, 09h17
  5. [JTable] problème après suppression d'une ligne
    Par fredo3500 dans le forum Composants
    Réponses: 7
    Dernier message: 17/03/2005, 10h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo