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

Excel Discussion :

Insertion d'un fichier csv dans une feuille xls


Sujet :

Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 33
    Points : 29
    Points
    29
    Par défaut Insertion d'un fichier csv dans une feuille xls
    Bonjour,

    Je vous expose mon problème :
    Je souhaiterai, par le biais d'une macro, inserer dans mon fichier xls 2003 une nouvelle feuille comportant les données d'un fichier csv (variable).

    Je pense que c'est compréhensible, dans le cas contraire, je développe:
    J'ai :
    - 1 fichier xls avec une macro
    - plusieurs fichiers csv
    Une fois que j'actionne la macro de mon fichier xls, je souhaiterai qu'elle me demande quel fichier csv je veux ouvrir, puis qu'elle me l'ouvre dans une nouvelle feuille de mon fichier xls.

    Es possible ou j'en demande trop ?

    Merci d'avance pour vos réponses

    Giom182

  2. #2
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 239
    Points : 307
    Points
    307
    Par défaut Ajout de fichier csv
    Pour te permettre de démarrer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    fichier_principal = ActiveWorkbook.name
    'on détermine le nombre d'onglet existant pour choisir l'endroit où l'on va recopier. 
     nb_sheet = ActiveWorkbook.Worksheets.Count
     
    ' on affche la boite de dialogue
     filetoopen = Application.GetOpenFilename("Fichiers texte , *.csv; *.txt", 2, Title, MultiSelect)
     
    ' Pour ouvrir , le fichier :
      Workbooks.Open Filename:=filetoopen
     
    'on recopie le feuillet à la fin des onglets du fic principal
       ActiveSheet.Move After:=Workbooks(fichier_principal).Sheets(nb_sheet)
    Eventuellement , il faudrait affiner les paramétre du .open en précisant les séparateurs du fichier csv

    Voila , j'espère que ça peut t'éclairer.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Bonjour et merci du coup de main

    Le code est bon, pas de problème mais en ouvrant le csv, les séparateurs sont des ; alors que j'aimerai des tabulations.
    J'ai essayé en précisant comme ci desous mais j'ai toujours une erreur


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks.Open Filename, , False, 6, , , , , Chr(9) = filetoopen
    Merci de ton aide

  4. #4
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 239
    Points : 307
    Points
    307
    Par défaut Intégration de fichier CSV
    Je ne suis pas sûr de comprendre ta remarque.
    Les séparateurs sont dans le fichier CSV ; Excel ne les ajoutes pas .

    Quand on ouvre un fichier texte ( ou csv) , on peut être amené a indiquer les délimiteurs pour qu'excel sache correctement intégrer le fichier dans un tableau et les délimiteurs n'apparaissent pas à l'écran.


    Je te conseille de faire des tests d'enregistrement de macro avec des ouvertures de fichiers texte ( celui que tu récupéres avec le filetoopen ) . Dans la procédure d'intégration , tu peux indiquer tes délimiteurs ; , tabulation ect ..

    Voici un exemple de code pour ouvrir un fichier texte avec un délimiteur " doublequote

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Workbooks.OpenText Filename:="C:\test.txt", Origin:=xlMSDOS, _
            StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
            ConsecutiveDelimiter:=true, Tab:=True, Semicolon:=True

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Ok, mais séparateurs sont bien dans mon fichiers csv ce sont des ;

    Lorsque j'ouvre un fichier csv sous excel, il me range automatiquement les données dans un tableau (grâce aux séparateurs je suppose).
    Maintenant, lorsque je fais la même opération via une macro, excel ne me sépare plus les données et les lis en format texte avec les séparateurs.

    Quel code dois-je indiquer pour qu'excel m'ouvre mon csv dans un tableau et non en format texte ?

  6. #6
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 239
    Points : 307
    Points
    307
    Par défaut Integration fichier csv
    Tu te mets en enregistrement macro.

    Tu ouvres ton fichier texte "brut". Via les menus , tu peux donner les types de délimiteurs et voir le résultat de l'intégration.

    Quand tu as ton fichier ouvert correctement , tu arretes l'enregistrement et tu regardes le code de la macro
    Tu vas trouver la syntaxe ressemblant à la ligne de code suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Workbooks.OpenText Filename:="C:\test.txt", Origin:=xlMSDOS, _
            StartRow:=1, DataType:=xlDelimited, TextQualifier:= VVVV
    VVVV correspondant à ton délimiteur fichier

  7. #7
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Ca fonctionne très bien avec un fichier *.txt mais mon fichier est en csv et là ca va plus ...
    Excel garde les séparateurs visibles et ne range pas les données dans le tableaux QUE lorsque je fonctionne avec une macro !!

  8. #8
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 239
    Points : 307
    Points
    307
    Par défaut
    Je reprends le file du problème.

    quand tu dis :
    Ca fonctionne très bien avec un fichier *.txt mais mon fichier est en csv et là ca va plus ...
    Excel garde les séparateurs visibles et ne range pas les données dans le tableaux QUE lorsque je fonctionne avec une macro !!
    Je comprends que le comportement n'est pas le même entre la macro et les menus. Si la macro s'inspire du code généré par l'enregistreur de macro , le résultat doit être le même...
    Je crois comprendre d'où vient le problème .
    Quand tu as un fichier texte ( avec l'extension .txt , .csv ou rien ) , il contient les séparateurs . Quand on l'intégre dans Excel , on précise le format du délimiteur et Excel intégre . Le format est reconnu par Excel ensuite , lors des ouvertures suivantes même si l'extension reste .csv.

    Quand tu dis que Excel garde les séparateurs visibles , c'est que l'intégration n'est pas réussie . Il faut trouver la bonne syntaxe pour l'intégration ( du style Workbooks.OpenText Filename:="C:\test.txt".... ).
    C'est pourquoi il faut via l'enregistreur de macro , faire des tests d'ouvertures du fichier brut texte.
    Au besoin , montre moi le fichier type que tu souhaites intégrer.

  9. #9
    Membre habitué Avatar de Brunodm13
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 129
    Points : 143
    Points
    143
    Par défaut
    Bonjour,

    Si ça peux t'aider, j'utilise un fichier xls avec comme source de données des fichiers csv.
    Pour chaque csv j'ai créé dans mon xls une feuille.
    Dans chaque feuille, j'ai créé une connexion vers les données du csv
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Données-->Données externes-->Importer le fichier texte...
    Le début du code lorsque tu fait cette opération est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     With ActiveSheet.QueryTables.Add(Connection:= _
            "TEXT;C:\...\...\Ton fichier.csv", _
            Destination:=Range("A1"))
    Pour mettre à jour mes données, il me suffit de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For i = 1 To 20
    For Each qt In ThisWorkbook.Sheets(i).QueryTables
        qt.Refresh BackgroundQuery:=False 
        Next qt
    Next i
    Je pense que tu peux t'inspirer de tout ça et si tu souhaites ne travailler qu'avec une seule feuille, tu n'as qu'à détruire la connexion à chaque fois.

    Bon dimanche.

    Bruno

  10. #10
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Merci pour cette aide, elle me fait bien avancer dans mon code,

    Cette méthode d'insertion fonctionne mieux avec ma macro, je n'ai maintenant plus de problème d'ouverture de mon csv en format tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    With ActiveSheet.QueryTables.Add(Connection:= _
            "TEXT;C:\fichier.csv" _
            , Destination:=Range("$A$1"))
            .Name = "fichier"
            .FieldNames = True
            .RowNumbers = False
               ' .... je vous épargne le reste
        End With
    Comme je l'ai dit avant, ce code fonctionne.
    maintenant je souhaiterai choisir ce fichier depuis une boite de dialogue, donc voici mon 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
     
    fichier_principal = ActiveWorkbook.Name
    'on détermine le nombre d'onglet existant pour choisir l'endroit où l'on va recopier.
    nb_sheet = ActiveWorkbook.Worksheets.Count
     
    ' on affche la boite de dialogue
    filetoopen = Application.GetOpenFilename("Fichiers texte , *.csv; *.txt", 2, Title, MultiSelect)
     
     
    ' Pour ouvrir , le fichier :
     
    With ActiveSheet.QueryTables.Add(Connection:= _
            filetoopen _
            , Destination:=Range("$A$1"))
            .Name = "fichier"
            .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)
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
        End With
    J'ai juste changé le "C:\fichier.csv" par ma variable "filetoopen" et ca ne fonctionne pas, je pense que c'est une erreur de "vocabulaire" mais je trouve pas la solution.

    Quelqu'un serait comment inserer le choix du fichier dans mon importation de données ?

    Merci d'avance de votre réponse

  11. #11
    Membre habitué Avatar de Brunodm13
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 129
    Points : 143
    Points
    143
    Par défaut
    Bonsoir,

    Pour récupérer ton nom de fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim MonFichier As String
     
    MonFichier = InputBox("Saisir le fichier à importer")
     
    With ActiveSheet.QueryTables.Add(Connection:= _
            "TEXT;C:\" & MonFichier & "" _
            , Destination:=Range("$A$1"))
            .Name = "fichier"
            .FieldNames = True
            .RowNumbers = False
               ' .... je vous épargne le reste
        End With
    Je n'ai pas testé, mais ça devrait aller.

    Cordialement.

    Bruno

Discussions similaires

  1. [XL-2003] Importer automatiquement un fichier CSV dans une feuille
    Par Mikayel dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/06/2009, 10h35
  2. Liste des fichiers CSV dans une feuille
    Par DubDub dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 19/02/2009, 08h05
  3. [MySQL] Importer les données d'un fichier CSV dans une base de données
    Par joueur dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 12/11/2008, 11h59
  4. Impossible d'importer un fichier csv dans une table sous MySQL
    Par manue85 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 20/04/2006, 12h06
  5. Insertion d'un fichier texte dans une moulinette PL/SQL
    Par Douanier007 dans le forum PL/SQL
    Réponses: 3
    Dernier message: 24/01/2005, 16h08

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