VBA - Import données depuis CSV - Erreur

Bonjour,

Lorsque j'utilise un code VBA pour importer les données provenant de documents csv, tout fonctionne bien, sauf pour les colonnes qui contiennent des coordonnées ; là, Excel sépare les valeurs lorsqu'il voit apparaître une virgule (alors que je ne crois pas le lui demander) et il semble décaler la virgule vers la droite (mais pas toujours car selon les situations il fait tout simplement disparaître la virgule).

Voici le code en question :

Private Sub CommandButton1_Click()
Dim r As Long, c As Long, a As Long, b As Long, f As Long
Dim ws As Worksheet
Set ws = Worksheets("Formulaire_test")

' r = ws.Cells(Rows.Count, 1).End(xlUp).Row
' c = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
' Range(Cells(1, 1), Cells(r, c)).ClearContents

    Dim mypath As String
    Dim myfile As String

        Application.FileDialog(msoFileDialogFilePicker).Show
        myfile = Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1)

    With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;" & myfile, _
        Destination:=Range("$A$1"))
        .TextFileCommaDelimiter = True
        .TextFilePlatform = 65001
        .TextFileSemicolonDelimiter = True
        .TextFileDecimalSeparator = False
        .Refresh
    End With
'Unload UserForm1
End Sub

J'ai ajouté deux documents :

  • formulaire test => Il contient les valeurs qui doivent être importées, telles qu'elles.
  • Import test => Contient le code qui importe les données.

Vous auriez une idée de l'origine de ce problème ??

Bon après midi !

17formulaire-test.csv (28.00 Octets)
11import-test.xlsm (21.72 Ko)

bonjour

mon conseil :

menu Données / Obtenir/ de fichier texte

facile

et s'il faut un peu transformer les données, ça se fait avec les menus et des clics droits (on n'écrit pas de lignes de code)

c'est le module "Power Query". A apprendre dès maintenant

amitiés

Ce document doit s'adresser à terme à différents membres d'une équipe.

Même si une partie serait prête à changer sa manière de faire, il sera certainement privilégié une solution qui implique le moins d'action de la part de l'utilisateur. Certains sont peu expérimentés sur le logiciel Excel et beaucoup ne souhaitent pas approfondir cette compétence.

J'utilise VBA car ça évitera ensuite d'avoir à reprendre chaque document ou réexpliquer régulièrement la méthode (le simple fait d'avoir à expliquer une nouvelle méthode pourrait d'ailleurs tuer ce projet avant même de le mettre en pratique).

Bonjour,

Je pense que tu devrais privilégier l'utilisation du modèle Power query, comme le sugère JMD,

Cordialement,

Bonjour,

La mouche est toujours allergique à Power Query ?

Ta procédure modifiée.

Cdlt.

9import-test.xlsm (20.26 Ko)
Private Sub CommandButton1_Click()
Dim myfile As String
Dim r As Long, c As Long
Dim ws As Worksheet
    Set ws = Worksheets("Formulaire_test")
    r = ws.Cells(Rows.Count, 1).End(xlUp).Row
    c = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
    Range(Cells(1, 1), Cells(r, c)).ClearContents
    Application.FileDialog(msoFileDialogFilePicker).Show
    myfile = Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1)
    With ActiveSheet.QueryTables.Add(Connection:= _
                                     "TEXT;" & myfile, _
                                     Destination:=Range("$A$1"))
        .TextFileParseType = xlDelimited
        .TextFilePlatform = 1252
        .TextFileSemicolonDelimiter = True
        .Refresh
    End With
End Sub

Salut les branchés !

Moi je fonctionne toujours à la manivelle :

A tester :

Private Sub CommandButton1_Click()
Dim r As Long, c As Long, a As Long, b As Long, f As Long, mypath$, myfile$
Dim ws As Worksheet

Set ws = Worksheets("Formulaire_test")
 r = ws.Cells(Rows.Count, 1).End(xlUp).Row
 c = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
 Range(Cells(1, 1), Cells(r, c)).ClearContents
      Application.FileDialog(msoFileDialogFilePicker).Show
      myfile = Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1)
          Workbooks.OpenText Filename:=myfile, Origin:=xlWindows, _
              StartRow:=1, DataType:=xlDelimited, Semicolon:=True, local:=True
      With ActiveWorkbook
              .Sheets(1).Range("A1").CurrentRegion.Copy ThisWorkbook.Sheets(1).Range("A1")
              .Saved = True
              .Close
      End With
End Sub

A+

Merci beaucoup pour l'aide ! Encore.

De ce que j'en sais, PowerQuery nécessite des opérations par l'utilisateur. Mes collègues ont clairement les capacités d'apprendre de nouvelles façons de travailler sur ordinateur. En revanche, je ne suis pas certain qu'ils soient motivé à apprendre quelque chose de nouveau.

Passer par VBA c'est, pour moi, simplifier les opérations en accompagnant étape après étape l'utilisateur pour extraire les informations dont il a besoin pour pouvoir terminer ses projets.

Nous avons des méthodes, fastidieuses et sources d'erreur, j'aimerais corriger ça sans imposer d'apprendre à utiliser de nouveaux outils.

Et, il est vrai, je ne connais pas PowerQuery, j'aime beaucoup VBA et aimerais apprendre à m'en servir avant d'utiliser autre chose.

J'utiliserais d'avantage PowerQuery pour des opérations qui ne sont pas redondantes peut-être.

En tout cas, le code que vous proposez effectue exactement ce que je cherchais à faire ! Il n'y a visiblement plus d'erreur de ce côté.

Merci !

Edit : La seconde proposition, faite pendant que j’écrivais cette réponse fonctionne également très bien !

Merci beaucoup pour l'aide ! Encore.

De ce que j'en sais, PowerQuery nécessite des opérations par l'utilisateur

bonjour à tous

pas du tout !

comme pour une macro VBA, il y a un concepteur de la requête Power Query

les utilisateurs se contentent ensuite de relancer la requête (bouton Actualiser)

amitiés à tous

Bonjour a tous,

L'avantage de Power Query c'est qu'il est beaucoup plus facile a utiliser que mettre en place un code VBA, enfin c'est mon avis,

L' essentiel est que tu trouve satisfaction à ta demande, et ma remarque s'arrête à un conseil,

Cordialement,

re

c'est parce que P Query n'a qu'un unique rôle : faire des requêtes et du pré-traitement de données

et qu'il est un des meilleurs mondiaux dans ce domaine, chouchouté par son créateur Microsoft qui l'améliore en permanence

amitiés

Rechercher des sujets similaires à "vba import donnees csv erreur"