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 :

Convertir des données


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 284
    Points : 66
    Points
    66
    Par défaut Convertir des données
    Bonjour,
    J’ai un fichier texte constitué de plusieurs lignes. Chaque ligne contient plusieurs informations concaténées.
    Voici un exemple d’une ligne de mon fichier texte :
    DUPONTMARCPARIS10/12/2014GARDIEN

    Je souhaite créer une macro Excel qui charge ce fichier dans Excel et le formate de la manière suivante :
    DUPONT MARC PARIS 10/12/2014 GARDIEN

    Pour que je puisse faire ceci j’ai tableau qui me renseigne sur la position de la colonne et la longueur.

    Nom Colonne	Long	Position
    Nom	               6	1
    Prenom	               4	7
    Ville	               5	11
    Date	               10	16
    Profess	               7	26
    J'espère que c'est clair.
    et merci pour votre aide.

  2. #2
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonsoir Ouinih, bonsoir le forum,

    Tu as plusieurs lignes donc plusieurs tableaux, non ? Où se trouve le tableau par rapport à la ligne ? Bref, sans un petit fichier exemple on va tourner en rond...
    À plus,

    Thauthème

    Je suis Charlie

  3. #3
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Bonsoir,
    nul besoin de fichiers ,voir l'aide en ligne et la fonction Mid ..

  4. #4
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonsoir le fil, bonsoir le forum,

    Imaginons que je me promène en voiture en Ariège... C'est une très belle région dit-on. Mais, me voilà paumé et je te croise Bbil. Je te demande mon chemin... Tu vas ne répondre quoi ? Ils vendent des cartes Michelin au bureau de tabac au centre du village... Je me demande ?!...


    À plus,

    Thauthème

    Je suis Charlie

  5. #5
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 284
    Points : 66
    Points
    66
    Par défaut
    Bonsoir,
    Pour répondre à Thautheme,
    Au fait avec mon exemple j'ai essayé de décrire le principe. mon vrai fichier est composé de presque 100 champs concaténés. L'ensemble des lignes respectent le même découpage. Donc un seul tableau décrivant la taille des champs est valide pour l'ensemble des lignes.
    j'arrive à faire le formatage en mettant la formule directement dans les cases Excel. Mais il faut que je trouve une manière automatisée pour le faire vu que je travaille sur des gros fichiers.

  6. #6
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    Même problème, mon petit cerveau ne comprend pas sans fichier exemple... Je me demande si Bbil n'avait pas raison finalement...
    À plus,

    Thauthème

    Je suis Charlie

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    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
    Sub test()
    Dim intFic As Long
    Dim Txt As String
    Dim Le
    intFic = FreeFile
    Open "C:\RepTest\test.txt" For Input As intFic 'ouvrir le fichier
    While EOF(intFic) = False
        Line Input #intFic, Txt 'lire une ligne
        EcrireExcel Sheets("Import"), Txt 'traiter la ligne
    Wend
    Close intFic
    End Sub
     
    Sub EcrireExcel(Feuille As Worksheet, Txt As String)
    Dim Pose
    Dim derL As Long
    Dim c As Integer
    derL = Feuille.Range("A" & Feuille.Cells.Rows.Count).End(xlUp).Row + 1
    c = 1
    'pose(Start,Length,Start,Length)
    'Mid(Txt,Start, Length)
    'star1,Length1,Star2=star1+Length1,Length2
    Pose = Array(1, 6, 7, 8, 15, 4,19, 5)
    For I = 0 To UBound(Pose) Step 2
        Feuille.Cells(derL, c) = Mid(Txt, CLng(Pose(I)), CLng(Pose(I + 1))) 'découpe la ligne
        c = c + 1
    Next
    End Sub
    Dernière modification par Invité ; 24/10/2014 à 09h46.

  8. #8
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 284
    Points : 66
    Points
    66
    Par défaut
    Merci pour l'exemple.
    En l'éxecuatnt j'ai le message d'erreur : indice n'appartient pas à la selection
    Sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    EcrireExcel Sheets("Import"), Txt 'traiter la ligne
    Faudrait-il pas définir la variable Import?

  9. #9
    Invité
    Invité(e)
    Par défaut
    non je dirait définir un onglet Import! ou replacer Import par le nom de l’onglet dans lequel tu veux récupérer les données de ton fichier!

    de même qu'il faut redéfinir la découpe de ton ficher en fonction de la taille des champs comme tu l'as précisé dans ton premier poste.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pose = Array(1, 6, 7, 8, 15, 4,19, 5)

  10. #10
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 284
    Points : 66
    Points
    66
    Par défaut
    Merci je vais tester

  11. #11
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    Je vous prie d'accepter mes excuses pour l'intervention dans un fil qui dépasse largement mes compétences... Je vais essayer d'être plus malin dorénavrant. Est-ce possible ? j'en doute...
    À plus,

    Thauthème

    Je suis Charlie

  12. #12
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut



    Bonjour, bonjour !

    T'inquiète Robert, on a le droit à l'erreur et vu la présentation initiale incomplète !

    J'aurais répondu comme bbil, utiliser la fonction Mid, en lisant l'aide VBA, niveau débutant …


    _________________________________________________________________________________________________
    If you can’t explain it simply, you don’t understand it well enough … (Albert Einstein)
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  13. #13
    Invité
    Invité(e)
    Par défaut
    bonjour Thauthème,
    les excuses sont inutile, nous sommes tous de bonne volontés, tu n'as pas commis de crime de l'aise majesté. si l'erreur est humaine, tu n'en est pas moins un et tes intervention ne sont pas idiotes, elles nous rappellent en tout cas qu'il y à plusieurs niveaux de compétences et que nous devons pas l'oublier et laisser qui que ce soit sur le bord du chemin.

    pour ce qui concerne ce poste... pourquoi pas un fichier avec 1 ou 2 ligne pour faire de tests et le XLS de rendu; j'ai répondue de façon générique mais on voie bien dans la réponse que tout ne passe pas.

    merci Marc les un console les autre

  14. #14
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonsoir le fil, bonsoir le forum,

    Merci pour votre soutien. Ça fait chaud au cœur pour un bleu b... comme moi.
    À plus,

    Thauthème

    Je suis Charlie

  15. #15
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu
    Bonjour
    si tu a ce tableau pour chaque ligne DIFFERENT A CHAQUE FOIS FORCEMENT
    Nom Colonne Long Position
    Nom 6 1
    Prenom 4 7
    Ville 5 11
    Date 10 16
    Profess 7 26

    tu peut effectivement te servir de la fonction mid
    mais si tu n'a pas ce tableau pour chaque ligne il te sera impossible d'automatiser ce transfert (text to cell)
    exel et vba ne DEVINENT PAS
    maintenant il me viens une réflexion juste comme ca
    si tu a ces tableaux pour chaque ligne le découpage a été préprogrammé

    si oui comment !!!
    et pourquoi faire une 2 fois le travail
    j'avoue que j'ai du mal AVEC CA
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  16. #16
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 284
    Points : 66
    Points
    66
    Par défaut
    Ta méthode "rdurupt" fonctionne bien merci beaucoup !!
    J’ai une question, le fichier que je dois formater contient presque 300 000 lignes. Ce qui fait que je suis obligé de faire le traitement sur une partie du fichier et ensuite sur la 2ème partie et ainsi de suite.
    y-a-t-il un moyen d’accélérer mes traitements ?

  17. #17
    Invité
    Invité(e)
    Par défaut
    bonsoir, test ça
    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
    Sub test()
    Dim intFic As Long
    Dim Txt As String
     
    Application.ScreenUpdating = False
    Application.EnableEvents = False 
     
    intFic = FreeFile
    Open "C:\RepTest\test.txt" For Input As intFic 'ouvrir le fichier
    While EOF(intFic) = False
        Line Input #intFic, Txt 'lire une ligne
        EcrireExcel Sheets("Import"), Txt 'traiter la ligne
    Wend
    Close intFic
     
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    End Sub

Discussions similaires

  1. Convertir des données excel en diagramme de classe
    Par rashania dans le forum Diagrammes de Classes
    Réponses: 0
    Dernier message: 04/05/2010, 12h49
  2. [XL-2003] convertir des données au moyen d'une Formule
    Par lafanchette2000 dans le forum Excel
    Réponses: 2
    Dernier message: 09/08/2009, 17h38
  3. Convertir des données présentes dans une colonne
    Par padawan31 dans le forum MySQL
    Réponses: 1
    Dernier message: 16/07/2009, 11h11
  4. Réponses: 5
    Dernier message: 04/12/2007, 13h40
  5. Convertir des données selon un charset defini
    Par localhost dans le forum Langage
    Réponses: 1
    Dernier message: 14/03/2006, 12h16

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