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 :

Conversion fichier CSV


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai  
    Inscrit en
    Novembre 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 18
    Par défaut Conversion fichier CSV
    Bonjour.
    Mon problème est le suivant:
    j'ai dans feuill1 des données au format CSV des enregistrements de largeur fixe du genre: en A1 j'ai "DATE HEURE ETAT DUREE" et je voudrais éclater le contenu de ces cellules en 4 colonnes comme ceci: en A1 "DATE" en B1"HEURE" en C1 "ETAT" et en D1 "DUREE" puis mettre le résultat dans une nouvelle feuille.
    En le faisant avec le menu données-Convertir ça marche nickel par contre quant j'automatise par macro VBA, cela ne marche pas. voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Columns("A:A").Select
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _
            FieldInfo:=Array(Array(0, 1), Array(10, 1), Array(21, 1), Array(51, 1)), _
            TrailingMinusNumbers:=True

  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
    Par défaut
    Bonjour,
    Je te mets une URL où tu trouveras "une" solution utilisée pour séparer le nom d'un prénom placés dans une même cellule.
    Le problème des majuscules/minuscules ne se pose pas pour toi mais qui peut le plus peut le moins... Et puis rien ne t'empêche de simplifier...
    http://www.developpez.net/forums/m1940803-8/
    Bonne journée

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour, bonjour Ousk,
    Pourrais-tu montrer le libellé d'un enrégistrement avant séparation.
    A+

  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
    Par défaut
    Désolé, zakou76, j'avais mal lu ta question. Teste ça sans utiliser les arrays inutiles ici si le séparateur est bien un espace.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Columns("A").Select
     Selection.TextToColumns DataType:=xlDelimited, _
        ConsecutiveDelimiter:=True, Space:=True
    (Bonjour l'homme des bois )

  5. #5
    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
    Par défaut
    Citation Envoyé par ouskel'n'or
    Teste ça sans utiliser les arrays inutiles ici si le séparateur est bien un espace.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Columns("A").Select
     Selection.TextToColumns DataType:=xlDelimited, _
        ConsecutiveDelimiter:=True, Space:=True
    Mais je pratique toujours à l'envers par rapport à ce que tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        NomFeuil = ActiveSheet.Name
        Sheets.Add
        Worksheets(NomFeuil).Columns("D:D").Copy ActiveSheet.Range("A1")
    L'avantage ? Jamais d'erreur !

    PS - Quel séparateur de données as-tu dans ton csv ? Si ce sont des ";" remplace "Space:=True" par "Semicolon:=True"

  6. #6
    Membre à l'essai  
    Inscrit en
    Novembre 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 18
    Par défaut
    Bonjour à tous.
    Merci pour toutes ces réponses mais mon problème est resté tel quel.
    j'ai testé ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Columns("A").Select
     Selection.TextToColumns DataType:=xlDelimited, _
        ConsecutiveDelimiter:=True, Space:=True
    ca marche mais c'est pas ce que je veux car des cellules contenant du texte sont fractionnées à chaque espace. par exemple j'ai dans une cellule "NON" et dans la cellule à droite "TEMRMINE" alors que moi je veux avoir dans la meme cellule: "NON TERMINE" et c'est pour cela que j'utilise les ARRAY. En effet avec le menu: DONNEE CONVERTIR j'ai l'option COLONNE NON DISTRIBUEE.
    Merci à +

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 48
    Par défaut
    Salut,
    Peut etre, vite fait, à ameliorer :

    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
    Dim DEP
    DEP = 1
    Dim POS1
    Dim POS2
    Dim POS3
    SEP = " "' si separateur espace
    ETUDE = Cells(1, 1)'cellule etudiée
    DEPART:
    For CHERCH = DEP To Len(ETUDE) + 1
     
    If Mid(ETUDE, CHERCH, 1) = SEP And POS1 = "" Then
    POS1 = CHERCH
    DEP = CHERCH + 1
    GoTo DEPART
    End If
     
    If Mid(ETUDE, CHERCH, 1) = SEP And POS2 = "" Then
    POS2 = CHERCH
    DEP = CHERCH + 1
    GoTo DEPART
    End If
     
    If Mid(ETUDE, CHERCH, 1) = SEP And POS3 = "" Then
    POS3 = CHERCH
    DEP = CHERCH + 1
    GoTo DEPART
    End If
     
    Next CHERCH
    'cellules d'arrivées
    Cells(2, 1) = Mid(ETUDE, 1, POS1)
    Cells(3, 1) = Mid(ETUDE, POS1 + 1, POS2 - POS1)
    Cells(4, 1) = Mid(ETUDE, POS2 + 1, POS3 - POS2)
    Cells(5, 1) = Mid(ETUDE, POS3 + 1, Len(ETUDE) - POS3 + 1)

  8. #8
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Je pense que tu devrais regarder la fonction split

    L'équivalent de ton code avec la fonction split et on peu avoir autant de séparateur qu'on le souhaite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dim tableau() as string 'c'est plus économe en terme de mémoire de donner un type au variables
    dim i as integer
    tableau=split(Cells(1, 1)," ")
    for i=0 to ubound (tableau)
    cells(1,i+1)=tableau(i)
    next i
    Mais je pense que les piste de Leforestier et Ouskel'n'or pour résoudre le problème à l'importation seront plus efficace

Discussions similaires

  1. Conversion fichier CSV
    Par PatrickVB dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/11/2010, 23h21
  2. Conversion fichier .csv en .xls
    Par Peachplume dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 05/03/2008, 09h27
  3. conversion d'un fichier csv en xls
    Par yandoka dans le forum Langage
    Réponses: 11
    Dernier message: 23/07/2007, 16h37
  4. [CSV] Conversion d'un tableau html en un fichier csv
    Par MnzNezo dans le forum Langage
    Réponses: 5
    Dernier message: 11/07/2007, 15h53
  5. Conversion fichier plat vers CSV
    Par linar009 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 23/11/2006, 13h35

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