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 :

Probleme sur macro access pour importer fichier CSV [XL-2010]


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
    Consultant en finance de marché
    Inscrit en
    Janvier 2017
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant en finance de marché

    Informations forums :
    Inscription : Janvier 2017
    Messages : 40
    Par défaut Probleme sur macro access pour importer fichier CSV
    Bonjour,

    j'ai un fichier excel qui dispose d'une macro pour importer un fichier CSV et en copier les données, j'ai trouvé un très bon code sur ce site pour pouvoir le faire.

    Toutefois ce code, après avoir splité les données du CSV sur le fichier source ne copie que la première colonne sur mon fichier cible et pas toutes les autres colonnes du CSV file.

    Une adaptation est-elle à fournir au code ou quelque chose à modifier ? Je suis preneur de tout conseil.

    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
    Sub csvImport()
    Dim Wbcsv As Workbook
    Dim Fichier As String, Chemin As String
    Dim LastLig As Long, NewLig As Long
    Dim c As Range
    Dim Tablo
    Const Sep As String = ","
     
    Application.ScreenUpdating = False                       'Inhibe la mise à jour affichage
    With Application.FileDialog(msoFileDialogFolderPicker)
       .Show
       If .SelectedItems.Count = 1 Then Chemin = .SelectedItems(1)
    End With
     
    If Chemin <> "" Then
       Chemin = Chemin & "\"
       Fichier = Dir(Chemin & "*.csv")                       'Le premier fichier csv trouvé
       Do While Fichier <> ""                                'on fait une boucle jusqu'à ce qu'on ne trouve plus de fichier csv
          Set Wbcsv = Workbooks.Open(Chemin & Fichier)       'On ouvre le fichier csv qu'on affecte à la variable Wbcsv
          With Wbcsv.Sheets(1)
             LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row  'LastLig est la dernière ligne remplie du fichier csv ouvert
          End With
          With ThisWorkbook.Worksheets("FFPOS")
             For Each c In Wbcsv.Sheets(1).Range("A2:A" & LastLig)   'Pour chaque cellule de A2:Axxx
                NewLig = .Cells(.Rows.Count, 1).End(xlUp).Row + 1   'la première cellule vide de la colonne 1 de Feuil1 de ce classeur
                Tablo = Split(c.Value, Sep)                     'On sépare les données par rapport au séparateur (ici le point virgule)
                .Range(.Cells(NewLig, 1), .Cells(NewLig, UBound(Tablo) + 1)).Value = Tablo   'on copie
             Next c
          End With
          Wbcsv.Close                                        'On ferme le fichier csv
          Fichier = Dir()                                    'on cherche le fichir csv suivant
       Loop                                                  'on reboucle
    End If
    End Sub
    Si je n'ai pas été clair, merci de m'en faire part j'essayerais de donner le plus de détails possibles.

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Apparemment rien d'anormal (je me vois dedans)

    Peux tu donner un exemple (une ligne) de ton csv?

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each c In Wbcsv.Sheets(1).Range("A2:A" & LastLig)   'Pour chaque cellule de A2:Axxx
    donc, pourmoi, ça semble normal que ça ne copie que la 1ere colonne, non?

  4. #4
    Expert éminent
    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
    Par défaut
    Bonjour,

    comme copier/coller n'est pas coder, utiliser donc un code ne correspondant pas strictement au besoin …

    Qui plus est, pour un fichier csv il suffit juste de l'ouvrir normalement pour qu'il soit importé
    et ce sans ligne de code pour peu qu'il respecte la norme nationale telle que paramétrée dans Windows.

    S'il ne respecte pas la norme, le renommer temporairement en .txt et l'ouvrir :
    l'Assistant d'importation apparaît, il suffit de juste bien répondre lors de ses différentes étapes !
    Et une fois l'opération manuelle réussie, s'il y a vraiment besoin d'une automatisation, il suffit juste d'activer
    l'Enregistreur de macro et de réitérer l'opération manuelle : une base de code est livrée sur un plateau !

    Et pour ceux sachant lire, voir dans l'aide VBA interne - tout y est déjà ! - l'aide de la méthode Workbooks.Open

    comme celle de Workbooks.OpenText entre autres ! (dont QueryTable pour moi le meilleur choix ici …)

    Si l'auteur de ce code avait consulté l'aide VBA (Open comme OpenText) pourtant à portée de clic,
    il n'aurait même pas eu besoin de Split

    Bref, il y a différentes solutions et déjà présentées dans les discussions de ce forum …
    Le découpage par Split étant plutôt réservée aux utilisateurs avancés pour des cas spéciaux.

    _________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  5. #5
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Cells(NewLig, 1).Resize(0,UBound(Tablo) )=Tablo 'on copie

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Ca ressemble à un problème de séparateur.
    Il faut savoir que Excel en français utilise ";" comme séparateur alors que VBA (fidèle à la version anglophone) utilise ",".

    Personnellement, pour m'affranchir de ce problème, j'ouvre systématiquement les CSV avec Workbooks.OpenText (comme le suggère Marc).
    Ainsi, je suis sûr du séparateur utilisé (entre autres). Plus compliqué mais plein de paramètres intéressants.
    https://msdn.microsoft.com/fr-fr/lib.../ff837097.aspx

  7. #7

  8. #8
    Membre averti
    Homme Profil pro
    Consultant en finance de marché
    Inscrit en
    Janvier 2017
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant en finance de marché

    Informations forums :
    Inscription : Janvier 2017
    Messages : 40
    Par défaut Thanks
    Hello,

    merci à tous pour vos retours, et j'ai effectivement trouvé la solution grâce à vos commentaires et retours.

    J'ai complètement remove la partie split qui, effectivement, n'était pas forcément nécessaire dans ce cas et aurait mérité que j'y réfléchisse plus en profondeur.

    Pour ce qui est du reste, je m'efforce au maximum de fouiller dans le forum, les topics et les tutos existants afin de poser le moins de questions possibles qui pourraient faire doublons sur le forum.

    Désolé si ça a fait doublon, ce n'était pas mon intention, et je ne fais pas de copier coller de code, ça n'a aucun intérêt pour ma compréhension personnelle et mon apprentissage sur VBA qui ne fait que débuter. En l'occurrence c'est juste que le code matchait parfaitement pour mes attentes du début.

    Au cas ou je repost le code que j'utilise si ça intéresse qq'un :

    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
    Sub csvImport()
    Dim Wbcsv As Workbook
    Dim Fichier As String, Chemin As String
    Dim LastLig As Long, NewLig As Long
    Dim c As Range
    Dim Tablo
    Const Sep As String = ","
     
    Application.ScreenUpdating = False                       'Inhibe la mise à jour affichage
    With Application.FileDialog(msoFileDialogFolderPicker)
       .Show
       If .SelectedItems.Count = 1 Then Chemin = .SelectedItems(1)
    End With
     
    If Chemin <> "" Then
       Chemin = Chemin & "\"
       Fichier = Dir(Chemin & "*.csv")                       'Le premier fichier csv trouvé
        Set Wbcsv = Workbooks.Open(Chemin & Fichier)       'On ouvre le fichier csv qu'on affecte à la variable Wbcsv
        With Wbcsv.Sheets(1)
        LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row  'LastLig est la dernière ligne remplie du fichier csv ouvert
        End With
        With ThisWorkbook.Worksheets("FFPOS")
        Range("A1").Select
        Range(Selection, Selection.End(xlDown)).Select
        Range(Selection, Selection.End(xlToRight)).Select
        Selection.Copy
        Windows("OrangeIsTheNewMacro.xlsm").Activate
        Range("A1").Select
        ActiveSheet.Paste
          End With
          Wbcsv.Close                                        'On ferme le fichier csv
    End If
    End Sub

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

Discussions similaires

  1. [XL-2003] Probleme sur macro qui eclate un fichier
    Par Bernard67 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 08/07/2010, 14h09
  2. VBA excel : piloter BdD access et y importer fichier CSV
    Par hnokia dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/05/2007, 17h30
  3. VBScript : création base Access pour import fichier XML
    Par abertaud dans le forum VBA Access
    Réponses: 3
    Dernier message: 02/04/2007, 14h35
  4. VBScript : création base Access pour import fichier XML
    Par abertaud dans le forum VBScript
    Réponses: 1
    Dernier message: 02/04/2007, 14h34
  5. Réponses: 9
    Dernier message: 31/01/2006, 22h42

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