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

Access Discussion :

[Export] Cadrage des numériques à droite pour un export en txt


Sujet :

Access

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Août 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [Export] Cadrage des numériques à droite pour un export en txt
    Bonjour,

    Après moult recherches ici et ailleurs, je me lance sur ce Forum connu de n'importe quel développeur français (de combien de galères m'avez-vous déjà tiré... ).

    Commençons par le début : je travaille sous Access 97, eh oui, je sais, mais c'est pas moi qui choise. Voici mon souci : lors de l'export formaté d'une table vers un fichier txt ou csv (j'ai entré à la main la longueur fixe de chaque colonne, il n'y a donc pas de séparateur), Access cadre les données numériques à gauche. Or je souhaite transférer ce fichier sur une machine (AS400) qui lit les données numériques cadrées à droite...

    Voici les quelques pistes que j'ai pour l'instant explorées... sans succès :
    - Il existe, dans les options avancées de la fonctionnalité d'export, une case "Leading zeros" ou quelque chose du genre. Malheureusement, je n'en ai pas compris l'utilité ni repéré son action... sur quoi que ce soit !

    - Astuce ! J'ai converti tous mes champs Numériques en Texte (cadrés à gauche également) et j'ai rajouté, sur chaque donnée ex-numérique-nouvellement-texte, des "0" complétant à gauche la donnée sur la longueur voulue. J'ai également essayé avec des espaces. Mais lors de l'export, tout ceci (les "0" ou les espaces) disparaît et Access... cadre encore à gauche !

    Je suis ouvert à toute proposition ou toute manipulation même tordue et/ou complexe. VB est la bienvenue s'il peut me sortir du pétrin...

    Merci d'avance !

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,

    voila un petit exemple en VBA.
    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
    Sub ExportTxtclSTOCK()
    Dim strRcd As String
    Dim strTmp As String, strDecSep As String
    Dim db As DAO.Database, rs As DAO.Recordset
    Dim FichierCible As String
    
    Set db = CurrentDb
     ' Ouvre table ou requête
    Set rs = db.OpenRecordset("clSTOCK")
     ' Si pas d'enregistrement quitter
    If rs.EOF Then Exit Sub
    
     ' récupère séparateur décimal paramètres régionnaux
    strDecSep = Mid(Format(9.9, "0.0"), 2, 1)
    
    FichierCible = "E:\Mes Documents\clSTOCK.txt"
    
    Close #1
    Open FichierCible For Output As #1
    
    Do
      strRcd = String(80, " ")
      ' Colonne1
      '     valeur numérique entière
      strTmp = CStr(Nz(rs("Réf produit"), ""))
      Mid(strRcd, 1, 10) = String(10 - Len(strTmp), " ") & strTmp
      
      ' Colonne2
      '     Texte
      Mid(strRcd, 11, 40) = Nz(rs("Nom du produit"), "")
      
      ' Colonne3
      '     valeur monétaire
      strTmp = Format(Nz(rs("Prix unitaire"), ""), "0.0000")
      ' force séparateur décimal à "." par exemple
      strTmp = Replace(strTmp, strDecSep, ".")
      Mid(strRcd, 51, 20) = String(20 - Len(strTmp), " ") & strTmp
      
      ' Colonne 4
      '     valeur numérique entière
      strTmp = CStr(Nz(rs("Unités en stock"), ""))
      Mid(strRcd, 71, 10) = String(10 - Len(strTmp), " ") & strTmp
      
      Print #1, strRcd
      rs.MoveNext
    Loop Until rs.EOF
    
    Close #1
    rs.Close
    db.Close
    End Sub
    strRcd est la variable texte qui correspond à un enregistrement (80 caractères ds mon exemple).
    On remplit avec Mid(strRcd, postion, taille) = chaîne de caractères.
    String(taille - Len(strTmp), " ") complète avec des espaces à gauche.

    En espèrant que ça t'aide.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Août 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Navré du délai, je sais qu'il est fort impoli de solliciter une réponse et de ne plus donner de nouvelles, donc me revoilà.

    En fait, comme stipulé dans mon premier message, j'avais déjà tenté de compléter par des espaces à gauche. Néanmoins, il est vrai que je n'avais pas ensuite réalisé l'export sous VB mais directement depuis Access. En revanche, je peux effectivement confrimer que tous mes numériques étaient bien précédés de N espaces dans mes tables, bref, tout avait l'air d'aller pour le mieux.

    Mais, lors de l'export, patatras : dans le fichier final exporté, les espaces ont disparu. Alors, alors, alors, j'avoue que je n'ai pas essayé en exportant depuis VB mais, puisque j'avais bien fait attention aux options d'export depuis Access, est-ce que cela pourrait changer quelque chose ?

    Bref, au final, je propose de clôturer ce sujet pour la simple et bonne raison que ce problème n'existe plus chez moi : c'est ma machine de destination qui s'est adaptée... en prenant un fichier avec séparateurs.

    Bien entendu, si ce topic continue d'intéresser des gens...

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    pour un export je n'utilise pas les tables mais une requête de mise en
    forme

    la fonction suivante me renvoie toujours un champ de bonne longueur
    cadré selon mon souhait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Function travchamp(x As Variant, longu As Byte, droite As Boolean) As String
    Dim rep As String
    Const vide = "                                                                                 "
    If droite Then
    'cadrage à droite
    travchamp = Right(vide & x, longu)
    Else
    'cadrage à gauche
    travchamp = Left(x & vide, longu)
     
    End If

Discussions similaires

  1. [AC-2007] Marco pour un export pesronnalisé des tables
    Par coolmek dans le forum Macros Access
    Réponses: 1
    Dernier message: 10/07/2013, 15h34
  2. Réponses: 17
    Dernier message: 05/06/2010, 22h30
  3. Réponses: 12
    Dernier message: 27/08/2008, 12h06
  4. Formater des données pour l'export en txt
    Par opacho dans le forum Langage
    Réponses: 1
    Dernier message: 15/01/2008, 11h21
  5. Réponses: 1
    Dernier message: 05/09/2006, 18h56

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