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 de format de données sur importation de fichier texte. [XL-2007]


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
    Inscrit en
    Octobre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2012
    Messages : 44
    Par défaut Problème de format de données sur importation de fichier texte.
    Bonjour à tous,

    N'ayant pas trouvé la solution à mon problème (de débutant) sur le forum, je m'en remets à vous :

    Lorsque j'importe (en VBA) un fichier texte dans Excel, je perds le format texte originel, c'est à dire que dans certaines colonnes les nombres commencent par 0 (exemple : 01, 02, 03...), et je perds donc ce fameux "0" que je tiens absolument à conserver pour traitement ultérieur.

    Voici l'instruction que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub TEST2()
     
    Workbooks.OpenText _
    Filename:="R:\NEWBD\Transfer\EMLD\RENOM_LOTS\EMLD_FL_LOT101.txt", _
    Origin:=xlWindows _
    , StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlNone, _
    ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False _
    , Space:=False, Other:=False, TrailingMinusNumbers _
    :=True
     
    End Sub
    J'avais trouvé l'instruction : Cells.NumberFormat = "@"
    mais comme l'instruction Workbooks.OpenText... ouvre directement un nouveau classeur pour l'importation, je n'ai pas le temps de placer cette instruction.

    Comment dois-je donc procéder ?

    Merci à ceux qui voudront bien éclairer un pauvre petit débutant, lol.

    A bientôt.

  2. #2
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Bonjour,

    Il faut que tu regardes du côté du paramètre FieldInfo de OpenText.
    L'aide Excel à ce sujet est bien faite. Un extrait:
    FieldInfo: Tableau contenant des informations de redistribution pour des colonnes de données individuelles. L'interprétation dépend de la valeur de DataType. Lorsque les données sont séparées, cet argument est un tableau de tableaux à deux éléments qui indiquent les options de conversion pour une colonne particulière. Le premier élément est le numéro de la colonne (en base 1) et le deuxième élément est l'une des constantes XlColumnDataType indiquant comment la colonne est redistribuée.
    Par exemple si tu veux que les colonnes n° 1, 5 et 7, soient au format texte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Workbooks.OpenText _
    Filename:="R:\NEWBD\Transfer\EMLD\RENOM_LOTS\EMLD_FL_LOT101.txt", _
    Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlNone, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False, Space:=False, Other:=False, _
    FielInfo:= Array(Array(1, 2), Array(5, 2), Array(7 ,2) ,TrailingMinusNumbers :=True
    '  2 étant la valeur de l'énumération XlColumnDataType correspondant à xlTextFormat
    Cordialement.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2012
    Messages : 44
    Par défaut
    Bonjour Issoram,

    Merci beaucoup de t'intéresser à mon problème.

    La solution que tu me proposes est très prometteuse, il y a juste un petite incohérence car lorsque j'applique l'exemple que tu m'as donné, seules les colonnes 2 et 3 sont au format texte au lieu des colonnes 1, 5 et 7, bizarre non ?

    Pour y remédier, y aurait-il une instruction afin de convertir l'intégralité des colonnes en format texte ?

    Oups, j'ai oublié de préciser que mon fichier texte contient 278 colonnes, donc s'il est possible d'éviter l'énumération de chaque colonne, ce serait vraiment très appréciable.
    Merci à toi.

    Bien cordialement.

  4. #4
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Alors:
    seules les colonnes 2 et 3 sont au format texte au lieu des colonnes 1, 5 et 7, bizarre non ?
    Oui ce n'est pas normal effectivement. Peux tu joindre ton fichier txt source?

    j'ai oublié de préciser que mon fichier texte contient 278 colonnes, donc s'il est possible d'éviter l'énumération de chaque colonne, ce serait vraiment très appréciable.
    Comme ça du coup:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Const nbCol As Integer = 278
    Dim tabInfo() As Variant
     
    ReDim tabInfo(1 To nbCol)
    For i = 1 To nbCol
        tabInfo(i) = Array(i, 2)
    Next i
     
    Workbooks.OpenText Filename:="R:\NEWBD\Transfer\EMLD\RENOM_LOTS\EMLD_FL_LOT101.txt", _
                  Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlNone, _
                  ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False, Space:=False, Other:=False, _
                  FieldInfo:=tabInfo, TrailingMinusNumbers:=True

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2012
    Messages : 44
    Par défaut
    Ouahh ! Trop génial, ça marche !!!

    Merci infiniment Issoram, t'es trop fort. Moi qui travaille souvent à partir de fichiers texte, j'ai déjà beaucoup appris grâce à toi.

    Sans vouloir abuser de ta gentillesse, j'aimerais t'exposer un autre problème que je viens de rencontrer :

    J'ai un tableau :

    A B C
    1 2 14
    2 8 19

    Si la cellule (A, 2)=8 et que la cellule (B, 2)=19, je voudrais sélectionner la cellule qui se trouve à leur droite : la cellule (C, 2).

    J'ai trouvé un bout de code, mais n'ai pas réussi à l'adapter, évidemment.

    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
     
    Sub Test3()
     
    Dim nbligne As Long
    Dim i As Integer
     
    'nbligne = Range("A1").CurrentRegion.Rows.Count
     
    For i = 1 To 25
     
    If Cells(i, 1).Value = "8" And Cells(i, 2).Value = "19" Then
    Selection.EntireRow.Select
     
    End If
    Next i
    End Sub
    D'une part, la sélection se fait sur toute une ligne et non pas sur une cellule, et d'autre part la sélection adéquate ne s'effectue pas : il sélectionne la ligne entière de la cellule active au moment du lancement de la procédure.

    Voilà, si jamais tu as un peu de temps à perdre, fais moi signe, lol, et merci encore et d'avance pour tes lumières.

    Bien cordialement.

  6. #6
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Hello,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Test3()
     
    Dim i As Integer
     
    For i = 1 To 25
        If Cells(i, 1).Value = "8" And Cells(i, 2).Value = "19" Then
              Cells(i, 3).Select
         End If
    Next i
     
    End Sub
    Mais d'une manière générale (sauf obligation) je te déconseille fortement de travailler avec des Select, Selection, Activate et ActiveCell. Tu éviteras de biens mauvaises surprises!

    PS: N'oublie de mettre le post en résolu.

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

Discussions similaires

  1. Import Excel : problème de format des données
    Par Fanette85 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 21/02/2008, 13h08
  2. Réponses: 2
    Dernier message: 08/02/2008, 20h53
  3. Problème de liaison de donnée sur un datasource
    Par dubidon dans le forum VB.NET
    Réponses: 1
    Dernier message: 01/06/2007, 16h05
  4. problème d'accès aux données sur serveur par poste client
    Par rahan_dave dans le forum Requêtes
    Réponses: 1
    Dernier message: 25/02/2006, 09h13
  5. Réponses: 5
    Dernier message: 11/03/2004, 15h34

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