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

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 10
    Points
    10
    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 à l'essai
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 10
    Points
    10
    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 expérimenté
    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
    Points : 1 394
    Points
    1 394
    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 à l'essai
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 10
    Points
    10
    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 expérimenté
    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
    Points : 1 394
    Points
    1 394
    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 à l'essai
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 10
    Points
    10
    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 expérimenté
    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
    Points : 1 394
    Points
    1 394
    Par défaut
    je saisis pas bien le dernier problème

  8. #8
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Ok je vais expliquer:

    Dans mon fichier principal, j´ai donc mes feuille d´importation et des feuilles de calcul que dépende des feuille importation.

    En faite tous ça c'est pour faire des rapports et les données proviennes des 3 fichiers *.CSV

    Je fait ça une fois par mois.

    Pour le Premier mois pas de prob, mes calculs (fonction, etc...) je les reporte au feuilles que j ai importer.

    2º Mois, il me donne une erreur car les feuilles existe dejá, je ne peut pas les éliminer pour mettre les nouvelles sinon mes calcules vout me donner l erreur "#REF".



    Alors se que j ai penser c importer le fichier 1.CSV dans la feuille1, 2.CSV dans la feuille2 et 3.CSV dans la feuille3 au lieu de crée les feuille selon le nom des fichiers *.CSV


    Mes fichiers CSV ont toujours le meme nom et elle provienne de un system OPC Server. Juste pour l info se sont des donner d un parc éolien.

  9. #9
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    OK j'ai réussi a faire mon importation, au lieu utiliser des formules dans mon classeur, j’utilise des fonction en VBA, comme ça je peut éliminer mes classeur avec les donné importée et importée les nouvelle donné.

    J'ai un nouveau problème avec la fonction If mais je vais peut être ouvrir un nouveau message vu que ça na pas grand chose a voire avec se post.

    Merci beaucoup pour votre aide. Si vous voulez je peut poster le code final.

    PS: Vous pouvez fermez se post

+ 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