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 :

import .csv dans plusieurs colonnes [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2010
    Messages : 59
    Par défaut import .csv dans plusieurs colonnes
    Bonsoir,

    Je ne comprend pas pourquoi lorsque j'importe un .csv , la 1ere ligne se repartie bien dans 3 colonnes distinctes alors que les lignes suivantes restent dans la colonnes "A" ?
    J'ai mis "," comme séparateur de liste dans les paramètres du panneau de configuration / région.

    Merci de votre aide.

    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
    Sub LireFichierTexte(ByVal fichier)
    '------------------------ajouter la reference MICROSOFT SCRIPTING RUNTIME------------------------------------------------------
    ' [Developpeur][Outils][Réferences]
        Dim oFSO As Scripting.FileSystemObject
        Dim oFl As Scripting.File
        Dim oTxt As Scripting.TextStream
        Dim i As Integer
        Filename = Environ("HOMEPATH") & "\Documents\" & fichier
        Set oFSO = New Scripting.FileSystemObject
        Set oFl = oFSO.GetFile(Filename)
        Set oTxt = oFl.OpenAsTextStream(ForReading)
        'Lire
        While Not oTxt.AtEndOfStream
            i = i + 1
            Range("A" & i) = oTxt.ReadLine
            'convertir en colonne
            Application.DisplayAlerts = False
            Range("A" & i).TextToColumns , DataType:=xlDelimited, _
                TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Comma:=True, Other:=False, FieldInfo _
                :=Array(Array(1, 1)), TrailingMinusNumbers:=True
            Application.DisplayAlerts = True
        Wend
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Je pense que cela vient de là : TextQualifier:=xlDoubleQuote

    Il ne faudrait rien mettre comme délimiteur de texte, car ton fichier n'a pas une structure classique.

    Philippe

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par loncle Voir le message
    Bonjour,

    C'est normal, les chaînes de texte sont encadrées par des guillemets. Le code ci-dessous les supprime :
    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
     
    Sub LireFichierTexte(ByVal Fichier As String)
    '------------------------ajouter la reference MICROSOFT SCRIPTING RUNTIME------------------------------------------------------
    ' [Developpeur][Outils][Réferences]
        Dim oFSO As Scripting.FileSystemObject
        Dim oFl As Scripting.File
        Dim oTxt As Scripting.TextStream
        Dim i As Integer
        Dim CheminComplet As String  ' Filename est un nom réservé, il ne faut pas l'utiliser.
        Dim MaChaine As String
     
        CheminComplet = Environ("HOMEPATH") & "\Documents\" & Fichier
        Set oFSO = New Scripting.FileSystemObject
        Set oFl = oFSO.GetFile(CheminComplet)
        Set oTxt = oFl.OpenAsTextStream(ForReading)
        'Lire
        While Not oTxt.AtEndOfStream
            i = i + 1
            Range("A" & i) = oTxt.readline ', 2, Len(oTxt.readline) - 2)
            'convertir en colonne
            MaChaine = Mid(Range("A" & i), 2, Len(Range("A" & i)) - 4)
            Range("A" & i) = MaChaine
            Application.DisplayAlerts = False
            Range("A" & i).TextToColumns , DataType:=xlDelimited, _
                TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Comma:=True, Other:=False, FieldInfo _
                :=Array(Array(1, 1)), TrailingMinusNumbers:=True
            Application.DisplayAlerts = True
           ' ExtraireLesChampsDeLaColonneC Range("C" & i)  ' Supprimer la cote ' pour extraire les champs contenus dans la colonne C
        Wend
     
        Set oFSO = Nothing
        Set oFl = Nothing
        Set oTxt = Nothing
     
    End Sub
    Si vous souhaitez transformer les informations contenues dans la colonne C en champs, utilisez le code ci-dessous et activez la ligne correspondant à ce code dans la procédure ci-dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub ExtraireLesChampsDeLaColonneC(ByVal CelluleChaine As Range)
     
    Dim MatriceChaine As Variant
    Dim J As Integer
     
        MatriceChaine = Split(CelluleChaine.Value, "-")
        If UBound(MatriceChaine, 1) > 0 Then
            For J = LBound(MatriceChaine) To UBound(MatriceChaine)
                CelluleChaine.Offset(0, J + 1) = MatriceChaine(J)
            Next J
        End If
    End Sub
    Dernière modification par Invité ; 26/08/2017 à 05h36.

  4. #4
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2010
    Messages : 59
    Par défaut
    Bonjour,

    Merci pour votre aide. Effectivement, je n'avais pas remarqué (entre autre) que le fichier au format .txt comportait des "guillemets" qui n'apparaissent pas lorsqu'on change le type de fichier pour du .csv . C'est surprenant ce phénomène
    Est ce que quelqu'un peut m'expliquer?

    Merci pour le rappel aux bonnes règles (ByVal As ...... pour Filename et Nothing )

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par loncle Voir le message
    Est ce que quelqu'un peut m'expliquer?
    Non pour ma part, il faudrait voir comment le fichier a été généré.

  6. #6
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2010
    Messages : 59
    Par défaut
    Merci pour le temps passé. Je vais poursuivre mes investigations. J'ai eu la réponse à ma question.

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

Discussions similaires

  1. [2008] Import de plusieurs CSV dans plusieurs tables
    Par Swiss_GaGGy dans le forum SSIS
    Réponses: 6
    Dernier message: 08/09/2012, 09h56
  2. Import de plusieurs CSV dans plusieurs Tables
    Par nephen dans le forum Import/Export
    Réponses: 3
    Dernier message: 15/04/2010, 14h13
  3. Import fichier csv dans plusieurs tables
    Par Gbillou dans le forum VBA Access
    Réponses: 3
    Dernier message: 16/11/2009, 15h57
  4. Import XML dans plusieurs tables
    Par fbe66 dans le forum HyperFileSQL
    Réponses: 1
    Dernier message: 05/08/2006, 15h55
  5. Importer CSV dans MySQL
    Par The_freeman dans le forum Administration
    Réponses: 6
    Dernier message: 14/02/2006, 22h18

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