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 pour Transformer EOL de Windows à Unix


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2024
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2024
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Problème pour Transformer EOL de Windows à Unix
    Bonjour,

    J'utilise une macro "Changement_EOL_File" qui convertit toutes les sauts de ligne d'un fichier texte qui a précédemment était généra par la macro "Manipule_Datas" ==> le tout est dans le fichier excel "exemple_pour_aide.xlsm"

    Les macros fonctionnent "parfaitement" mais j'ai un phénomène étrange qui se produit lors de la conversion de mes "fin de lignes". Je dois passer d'un format windows "vbCrLf" vers un format Unix "vbLf"

    Lors de la conversion, dans mon fichier texte de retour, j'ai des lignes qui sont générées en doublon à la fin et qui conservent le format Windows contrairement aux premières lignes qui sont bonnes. ==> fichier "Pabx04_22_retours_en-utilisant-Changement_EOL_File.txt"


    Si j'utilise la macro "Manipule_Datas" sans appeler à la fin de celle-ci la macro "Changement_EOL_File", mon fichier de retour contient exactement le même nombre de lignes que mon onglet "Retours" qui a été généré. ==> fichier "Pabx04_22_retours_sans-utiliser-Changement_EOL_File.txt"

    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
     
    Sub Changement_EOL_File(Fichier As String)
     
    Dim FileLength As Long
    Dim iFile As Integer
    Dim strTemp As String
     
        iFile = FreeFile
        Open Fichier For Binary As #iFile
            FileLength = LOF(iFile)
            strTemp = String(FileLength, Chr(0))
            Get #iFile, 1, strTemp
            strTemp = Replace(strTemp, vbCrLf, vbLf)
            Put #iFile, 1, strTemp
        Close #iFile
     
    End Sub
    J'ai l'impression que c'est au moment d'utiliser la fonction Put que le problème se produit mais je ne vois pas comment faire autrement.

    Si quelqu'un a une idée, je suis preneur.

    Manu,
    Fichiers attachés Fichiers attachés

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 389
    Points : 2 022
    Points
    2 022
    Par défaut
    Salut,

    Un fichier, ça se comporte un peut comme une bande magnétique.
    Lorsque tu fait des opérations d'écriture, tu écrases son contenu (à ne pas confondre avec le fichier lui même).

    Si le nouveau contenu est plus important que l'ancien, pas de problèmes, la taille du fichier sera agrandie, "la tête d'écriture à dépassé la fin du fichier".
    Par contre, si le nouveau contenu est plus petit que l'ancien, la partie "en surplus" reste dans le fichier, "la tête d'écriture n'a pas dépassé la fin du fichier".
    Dans ce cas, il n'y a pas 36 solutions:
    1) Supprimer l'ancien fichier.
    2) Le recréer.

    PS:
    C'est plutôt bizarre de lire en fichier texte en binaire.
    Quid de la traiter comme ce qu'il est ? Un fichier texte ?
    Et tant qu'a faire, par respect pour le SRP (https://fr.wikipedia.org/wiki/Princi...t%C3%A9_unique), diviser ton code en sous fonction plus petites, plus facile à comprendre et à maintenir:
    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
    Sub Changement_EOL_File(Fichier As String)
        Dim Data As String
        Data = ReadFile(Fichier)
     
        Data = Replace$(Data, vbCr, vbLf)
        WriteFile Fichier, Data
    End Sub
     
    Public Function ReadFile(ByVal Fichier As String) As String
        Dim Fso As Scripting.FileSystemObject
        Set Fso = CreateObject("Scripting.FileSystemObject")
     
        Dim IStream As Scripting.TextStream
        Set IStream = Fso.OpenTextFile(Fichier, ForReading)
     
        ReadFile = IStream.ReadAll
    End Function
     
    Public Sub WriteFile(ByVal Fichier As String, ByVal Data As String)
        Dim Fso As Scripting.FileSystemObject
        Set Fso = CreateObject("Scripting.FileSystemObject")
     
        Dim OStream As Scripting.TextStream
        Set OStream = Fso.OpenTextFile(Fichier, ForWriting, True)
     
        OStream.Write Data
    End Sub

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2024
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2024
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour ce retour rapide.

    En essayant les fonctions proposées, j'ai ce message d'erreur :

    Nom : erreur.jpg
Affichages : 53
Taille : 84,4 Ko

    Mes connaissances en vba ne sont pas assez pointues pour trouver la solution.
    Une idée ?

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 389
    Points : 2 022
    Points
    2 022
    Par défaut
    Il faut ajouter la référence Microsoft Scripting Runtime,

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/06/2021, 18h30
  2. Problem de / et \ dans une apli pour la porter window / unix
    Par skad dans le forum Général Python
    Réponses: 3
    Dernier message: 26/05/2007, 10h36
  3. Réponses: 1
    Dernier message: 12/04/2007, 12h30
  4. Script oracle pour windows & unix
    Par ALLFA dans le forum Oracle
    Réponses: 2
    Dernier message: 05/07/2005, 15h52
  5. [langage] Windows -> Unix
    Par Jibees dans le forum Langage
    Réponses: 6
    Dernier message: 17/04/2003, 10h16

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