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 :

Fichier txt/Import espace de début de ligne


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Fichier txt/Import espace de début de ligne
    Bonjour,

    Je viens de coder une petite macro qui me permet d'importer et convertir dans Excel, des fichiers de données au format txt. ( une ligne / un enregistrement).
    Jusque là tous se passe bien sauf quand je traite des fichiers dont le début des lignes commence par 1 ou plusieurs espaces.
    Ma question est la suivante : est-il envisageable sous VBA de coder une procédure qui rapatrie le ou les espaces de début de ligne en les comptabilisant comme une absence de données pour le champ correspondant.
    L'enjeux est le suivant : chaque ligne de données représente une série de champs agrégés. Le premier champ est de longueur 1, dans d'autres fichiers 2. Lors de l'import, Excel doit être capable d'interpréter le ou les espaces comme autant d'absences de valeurs, ( cad : le premier champ n'est pas renseigné).
    Merci pour l'aide que vous pourrez m'apporter. Je travaille sous VBA, excel 2003 et c'est malheureusement un impératif. Les fichiers de données ne sont pas des csv.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Montre ton code d'import de ton/tes txt, on va t'arranger ça
    A+

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Voilà la bête ( partie import).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim i As String
    Dim fichier As Worksheets
        source = Application.GetOpenFilename("Text Files (*.txt), *.txt")
        Workbooks.OpenText Filename:=source, Origin:= _
    xlMSDOS, StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(100, 1)), TrailingMinusNumbers:=True
        ActiveSheet.Move Before:=Workbooks("Monfichier.xls").Sheets("LB")
        Rows("10:10").Delete Shift:=xlUp
        ActiveSheet.Name = "Srce"
        ActiveSheet.Tab.ColorIndex = 3
    End Sub
    Merci pour ton aide Ouskel'n'or. Je suis vraiment dans le brun.

    Cdt,

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Ok. La raison est simple, dans cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Workbooks.OpenText Filename:=source, Origin:= _
    xlMSDOS, StartRow:=1, DataType:=xlFixedWidth, TrailingMinusNumbers:=True
        ActiveSheet.Move Before:=Workbooks("Monfichier.xls").Sheets("LB")
    tu n'indiques pas de séparateur de données.
    Ou bien tu le connais et tu nous l'indiques, ou tu nous joins quelques lignes de ton txt en fichier joint pour qu'on l'identifie (Le trombone en haut de ta réponse en mode d'édition)
    A+

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Merci pour ta réponse.

    En fait le fichier source (.txt) n'est pas un csv (aucun caractère séparateur n’est présent : espace,;:/ tabulation....).Mon application procède à l’import dans un premier temps et ensuite une procédure ternaire permet de convertir le texte importé selon les spécifications à appliquer à chaque ligne de données.
    Le problème avec Excel, et à la différence d’Access, quand on procède à un import, l’application considère les espaces de début de ligne comme des caractères non significatifs. De fait, elle supprime ceux-ci et ne les intègre pas dans les cellules de destination. Toute spécification de conversion appliquée à ces dites cellules aboutira invariablement à des résultats faux, décalés (d’autant d’espaces en moins qu’il y en a en plus dans chaque début de ligne du fichier source). Pas facile hein ?
    Fichiers attachés Fichiers attachés

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Autant de cellules vides qu'il y a d'espaces en début de lignes et le reste du texte dans une cellule unique ?
    Si c'est ça et que tu es sûr qu'il y a autant de cellules que d'espaces dans ton txt, alors tu peux t'en sortir autrement.
    Que veux-tu obtenir ?
    A+

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Non ce n'est pas cela. J'importe l'ensemble de mes lignes de données dans une feuille XLS, et dans une même colonne. Chaque cellule étant remplie par une ligne de données provenant du fichier source ( format txt). Comme je l'expliquais précédemment, au moment de l'import, Excel rapatrie depuis le fichier source, des lignes de données en supprimant les espaces de début de ligne. Mon objectif est toujours de rapatrier chaque ligne de données, mais en incluant les espaces de début de lignes. Il me semble qu'il y a 3 stratégies envisageables :

    - ou XLS possède comme Access la possibilité de préciser au moment de l'import un code indiquant que l'espace ou la tabulation ( du fichier source) est un caractère significatif.
    - ou coder en VBA une routine comptabilisant le nombre d'espaces initiant une ligne de données pour ordonner à XLS l'intégration d'autant d'espaces
    - une requête SQL. La çà me dépasse.

    En fait, en matière de gestion de BDD ou de flux de données, c'est un très grand classique par contre, pas moyen de trouver quoique ce soit la dessus.


    Merci à toi.

    Cdt,

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Tu peux tester ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub FichierTexteLireEtEcrireDansUneFeuille(Chemin, NomFich)
    Dim Ligne As String, NoLigne As Long
    Application.ScreenUpdating = False
        Open Chemin & NomFich For Input As #1
        While Not EOF(1)
            Input #1, Ligne
            NoLigne = NoLigne + 1
            Cells(NoLigne, 1).Value = Ligne
            Next
        Wend
        Close #1
    Application.ScreenUpdating = True
    End Sub
    A tout hasard et n'ayant pas encore compris la structure de ton txt

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Pourrais-tu m'apporter un peu plus d'information sur ce bout de code.Merci.

    Cdt,

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Il lit ton fichier texte ligne par ligne et insère la ligne dans ton le classeur.
    l'apostrophe n'est pas visible en début de formule et indique à Excel qu'il s'agit d'un texte. Ainsi, si tu as des espaces avant un nombre, si ces espaces existent bien dans ton txt, alors tu auras ton nombre précédé d'estpaces.
    De ça, je suis sûr. Mais maintenant, dans ton txt, sont-ce bien des espaces ? Si ce sont des caractères de contrôles remplacés par ce qui "semble" être un espace, j'ignore ce que ça va donner dans Excel.
    Sur ce, j'y vais
    Je dirais même plus
    Bonne nuit

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Merci pour ta réponse, mais cela ne donne strictement rien.

    Cdt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Compter le nombre de caractères d’un fichier txt importé par LoadVars
    Par boz_j dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 28/08/2009, 22h11
  2. Réponses: 1
    Dernier message: 21/09/2008, 18h35
  3. [Débutant] Ajouter deux espaces en début de ligne d'un fichier txt
    Par niepoc dans le forum MATLAB
    Réponses: 19
    Dernier message: 30/04/2008, 16h40
  4. Ecrire dans un fichier txt sans espace avant la 1ère valeur
    Par fatma hamdi dans le forum Fortran
    Réponses: 4
    Dernier message: 17/04/2008, 13h46
  5. Regexp de suppression d'espaces en début de ligne
    Par batmatm dans le forum Langage
    Réponses: 4
    Dernier message: 20/10/2005, 15h25

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