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 :

Importer Fichier *.CSV et *.xlsx


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Par défaut Importer Fichier *.CSV et *.xlsx
    Bonsoir,

    Voila j´ai un petit problème en VBA, j'ai 4 fichiers:

    - le premier fichier est E2_RM.xlms, c´est le fichier principal
    - Les trois autres contiennent les infos, chacune avec un classeur que je dois copier vers mon fichier principal. Dans le fichier principal j´ai déjàtrois classeurs pour recevoir les données. Nom des fichiers: QueryWS.CSV, QueruUC.xlsx et QueryES.csv. Donc c´est 2 fichiers *.CSV et 1 fichier *.xlsx à importer. Les noms des classeurs sur le fichier principal sont identiques.

    Ce que je voudrai c´est ouvrir mon fichier E2_RM.xlms et à partir de là commander l´importation des trois classeurs et tout ça enVBA.

    Ce que j´essaye de faire, c´est d'ouvrir une boite de dialogue pour aller chercher les trois fichiers, j´ai pensé même a 3 boite de dialogue, une pour chaque fichier. Très important c´est de pouvoir aller les chercher dans n´importe quel répertoire.

    Ca a l´air compliqué mais je suis là pour apprendre, en fait je sais pas trop par où commencer. Je suis en train de commencer avec ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     Sub import()
    Filename = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Ouvrir Fichier CSV")
    If Filename = "False" Then Exit Sub
    End Sub
    J´ai deja essayer quelque variante mais il me parait plus facil utilizer GetOpenFilename et associer tous ça a des userForm

    Pouvez vous m'indiquer si je suis sur le bon chemin, ou même un bon tutoriel que pourrait m´aider.


    Merci pour le Forum

  2. #2
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Par défaut
    J´ai réussi a passer mon fichier *.xlsx en*.CSV, c'est plus facil pour importer maintenant les 3 fichiers en *.CSV. Je continu ma recherche sur le forum mais pas facil

    J´arrive maintenant a importer mes trois fichier a partir de un repertoire c:\MYTEXTFILES, j ai repris le code d'un autre exemple et je suis en train de l'adapter pour moi:
    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
    Sub Macro1()
     
    '
    Dim strPath As String
    Dim strFile As String
    '
    strPath = "C:\MYTEXTFILES\"
    strFile = Dir(strPath & "*.csv")
    Do While strFile <> ""
    With ActiveWorkbook.Worksheets.Add
    With .QueryTables.Add(Connection:="TEXT;" & strPath & strFile, _
    Destination:=.Range("A1"))
    .Parent.Name = Replace(strFile, ".csv", "")
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(1)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
    End With
    End With
    strFile = Dir
    Loop
     
    End Sub
    Je vais essayer dans un premier temps de corriger l importation vue que le tableau est separé par ";".

    Une petite aide SVP serait bien venue

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Par défaut
    pour le ";" réécrit ces 2 lignes comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .TextFileSemicolonDelimiter = true
    .TextFileCommaDelimiter = false

  4. #4
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Par défaut
    Ok merci, c'est fait et ça marche bien. Maintenant j'essaye de determiner le chemin de mon fichier excel principal (dans se dossier vont etre reuni tous mes fichier a importer) au lieu de le definir direct dans le programme. J'essaye de utilizer la commande ThisWorkbook.Path et de la renvoyer a ma String strPath mais ça marche pas. Je suis en debug pour pouvoir voir les valeur de strPath

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Par défaut
    thisworkbook.path ne renvoie pas le dernier "/"
    donc plutôt comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strPath=thisworkbook.path & "\"

  6. #6
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Par défaut
    Je suis content

    Maintenant mon fichier principal va chercher tous les fichiers *.CSV du dossier et les importe dans mon classeur excel.

    Voila le code:

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Sub Macro1()
     
    '
    Dim strPath As String
     
    Dim strFile As String
    Dim Pasta As String
    '
    Pasta = ThisWorkbook.Path
    If Right(Pasta, 1) <> "\" Then
    Pasta = Pasta & "\"
    End If
     
    strPath = Pasta
    strFile = Dir(strPath & "*.csv")
     
    Do While strFile <> ""
    With ActiveWorkbook.Worksheets.Add
    With .QueryTables.Add(Connection:="TEXT;" & strPath & strFile, _
    Destination:=.Range("A1"))
    .Parent.Name = Replace(strFile, ".csv", "")
    .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .TextFilePromptOnRefresh = False
            .TextFilePlatform = 850
            .TextFileStartRow = 1
            .TextFileParseType = xlDelimited
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileConsecutiveDelimiter = False
            .TextFileTabDelimiter = True
            .TextFileSemicolonDelimiter = True
            .TextFileCommaDelimiter = False
            .TextFileSpaceDelimiter = False
            .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
    End With
    End With
    strFile = Dir
    Loop
     
    End Sub
    Vue que je vais faire ça une fois par mois, les feuilles du mois précédent ont le même nom, alors ce qu´il faudrait c'est additionner une ligne de commande pour faire la substitution des feuilles ayant le même nom

    Le probleme se situe ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Parent.Name = Replace(strFile, ".csv", "")
    Je pense que le plus facil serait de les importer dans des feuilles deja existante au lieux de creer de nouvelles feuilles

  7. #7
    Membre Expert
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Par défaut
    je saisis pas bien le dernier problème

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

Discussions similaires

  1. Import fichier CSV
    Par oki972 dans le forum SQLite
    Réponses: 5
    Dernier message: 08/10/2007, 20h58
  2. [Pb Importation fichier CSV]
    Par Jeremie_Vi dans le forum Access
    Réponses: 2
    Dernier message: 04/05/2007, 06h54
  3. Importation fichier CSV Excel
    Par @lex(is) dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 22/06/2006, 02h16
  4. Update de plusieurs tables, import fichier csv sql loader
    Par fusuke dans le forum SQL*Loader
    Réponses: 2
    Dernier message: 18/05/2006, 15h08
  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