Connexion entre un classeur et un fichier csv

Bonjour à tous,

Je voudrais pouvoir créer des connexions entre un classeur et des fichiers CSV, j'ai utilisé l'enregistreur de macro mais lorsque j'utilise le code de l'enregistreur de macro ça me redirige vers l'assistant importation de texte, ce que je voudrai pouvoir éviter. Afin que le création de connexion soit vraiment automatique.

Voici le code :

Workbooks(StrNomClasseur).Connections.AddFromFile "C:\users\" &  StrNomFichier, True, False

Si vous avez besoin de précision, n'hésitez pas

J' espère que vous pourrez m'aider

Merci d'avoir pris le temps de lire mon message

Bonjour,

Je dois avouer que je ne comprend pas ce que tu souhaites obtenir ?

Bonsoir,

L'objet "Connections" n'est pas approprié pour connecter un fichier texte automatiquement.

Il faut utiliser l'objet "QueryTables" , comme ceci :

ActiveSheet.QueryTables.Add(Connection:="C:\users\" &  StrNomFichier , Destination:= ....., .....)

Bonjour,

Tout d'abord merci pour vos réponses.

Theze a écrit :

Bonjour,

Je dois avouer que je ne comprend pas ce que tu souhaites obtenir ?

Je souhaite obtenir le code qui me permet de pouvoir créer une connexion entre un fichier csv et un classeur Excel pour ensuite créer un TCD a partir de cette connexion. (J'ai déjà le code qui fonctionne pour créer un TCD à partir d'une connexion)

Manuellement il faut faire Données --> Fichier texte --> choisir le fichier ---> cocher Délimiter, mes données ont des en-tête --> suivant --> séparateur autre "|" ---> suivant --->Terminer ---> cocher ajouter ces données au model de données et ne créer que la connexion.

Lorsque j'ai utiliser l'enregistreur automatique de macro le code me redirige vers l'assistant importation de texte ce qui nécessite une intervention humaine et je voudrai éviter ça.

thev a écrit :

Bonsoir,

L'objet "Connections" n'est pas approprié pour connecter un fichier texte automatiquement.

Il faut utiliser l'objet "QueryTables" , comme ceci :

ActiveSheet.QueryTables.Add(Connection:="C:\users\" &  StrNomFichier , Destination:= ....., .....)

Le problème dans ce code c'est que je n'est pas de destination puisque je n'importe pas les données, je veux seulement créer le connexion pour ensuite créer un TCD à partir de cette connexion.

J'espère avoir été plus précis

Si vous avez d'autre questions n'hésitez pas

Bonjour,

Tu peux télécharger le complément Power Query pour Excel 2013 (gratuit) pour ce besoin.

http://www.microsoft.com/fr-FR/download/details.aspx?id=39379

Attention à la version d'Office (32 ou 64bits)

Tu pourras sans difficulté créer une table à partir du csv pour créer un TCD.

Cdlt.

Bonjour,

Je vais essayer ta solution et utiliser l'enregistreur de macro pour voir si je peux automatiser tout ça, je reviendrai pour vous tenir informer du résultat.

Merci pour ton aide

Bonjour,

En récupérant le complément suggéré par Jean-Eric, et en allant au bout de l'opération d'importation du fichier texte, vous devriez obtenir par l'enregistreur de macros l'objet "QueryTable" et non l'objet "Connections".

Bonjour,

Avec l'enregistreur de macro j'obtiens ce code

 Workbooks("Classeur1").Connections.Add2 "Requête - MonFichier", _
        "Connexion à la requête « MonFichier » dans le classeur.", _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$EmbeddedMashup(09864bd3-9c5e-4c36-a569-43ed0f213902)$;Location=MonFichier;Extended Properties=UEsDBBQAAgAIABtWr0oweSIMrAAAAPoAAAASABwAQ29uZmlnL1BhY2thZ2UueG1sIKIYACigFAAAAAAAAAAAAAAAAAAAAAAAAAAAAIWPzwqCQBjEX0X27rf+r+RzPQSdEqIguoquuqRr7K7pu3XokXqFgjK6dZsZ5gczj9sd06lrrStXWvQyIS44xOKy6Esh64QMprKXJGW4y4tzXnPrVZY6n" & _
        "aZ0HEcYfehVTT3Hcekp2x6Khne5LaQ2uSw4+VLlf4owPL7HMA+CAIJoEYK3dJHOMWZCztqFEHxvFYGD9CfG9dCaQXFWKXuzRzpbpJ8f7AlQSwMEFAACAAgAG1avSg/K6aukAAAA6QAAABMAHABbQ29udGVudF9UeXBlc10ueG1sIKIYACigFAAAAAAAAAAAAAAAAAAAAAAAAAAAAG2OSw7CMAxErxJ5n7qwQAg1ZQHcgAtEwf2I5qPGReFsLDgSVyBtd4ilZ+Z55vN6V8dkB/GgMfbeKdgUJQhyxt961yqYuJF7ONbV9Rkoihx1UUHHHA6I0XRkdSx8IJedxo9Wcz7HFoM2d90Sbstyh8Y7JseS5x9QV" & _
        "Qsr7UZB3Fac3OVAqbEuMj4l7A/eR3C0BvN2cQkbZR2IXEZXn8BUEsDBBQAAgAIABtWr0r2gs2r+AAAAGkBAAATABwARm9ybXVsYXMvU2VjdGlvbjEubSCiGAAooBQAAAAAAAAAAAAAAAAAAAAAAAAAAABtT8FKw0AQvQfyD8t6SWEJJODFkoOkjXiwIoknU0LcTHUhuyM7u8FS+0F+hz/mllCk4Fxm3uPNvDcE0ik0rJ57toyjOKL33sLA7h/qruqq27Lp7taPrGAjuDhioWr0VkJgSprSFUqvwbikUiOkJRoXACW8vGmfCSy1elISDLVnIbUb9BP0ng1IpMC2l06ppIkvxMsKRqWVA1vwLy5YiaPXho" & _
        "zVmT5dYBPHh3Ubj9C8TemGzSwXYg58RVv9h/AdFjbqZ9vHrI3/WtQNbY3tEOr5/MnFSXzf+Jw4DObBXt32nfw6Y6Cnfn8gj8u4kiZ//2Wv1BLAQItABQAAgAIABtWr0oweSIMrAAAAPoAAAASAAAAAAAAAAAAAAAAAAAAAABDb25maWcvUGFja2FnZS54bWxQSwECLQAUAAIACAAbVq9KD8rpq6QAAADpAAAAEwAAAAAAAAAAAAAAAAD4AAAAW0NvbnRlbnRfVHlwZXNdLnhtbFBLAQItABQAAgAIABtWr0r2gs2r+AAAAGkBAAATAAAAAAAAAAAAAAAAAOkBAABGb3JtdWxhcy9TZWN0aW9uMS5tUEs" & _
       "AAMAwgAAAC4DAAAAAA==", """MonFichier""", 6, True, FA

Mais lorsque j’exécute ce code il y a une erreur "Erreur inattendu Format de fichier non reconnu" tout le code est en jaune et la flèche est sur la ligne "AAMAwgAAAC4DAAAAAA==", """MonFichier""", 6, True, FA.

J’avoue que je ne comprend pas grand chose a la requête qui est créée par l'enregistreur de macro savez vous ce que je pourrais faire SVP?

Bonsoir,

vous ne devez pas faire le bon choix au niveau de l'importation du fichier :

onglet Données --> bouton Fichier texte

Avec ce choix, l'enregistreur de macros utilise l'objet "DataQuery".

Bonjour,

Si tu veux juste faire une requête, voici une piste :

Sub Requete()

    Dim Fe As Worksheet
    Dim Fichier As String

    Fichier = "C:\Mon dossier\Mon Classeur.csv"

    Set Fe = Worksheets(1)

    With Fe.QueryTables.Add("TEXT;" & Fichier, Range("A1"))

        .TextFileParseType = xlDelimited
        'faire un choix :
        .TextFileSemicolonDelimiter = True '<-- point virgule
'        .TextFileTabDelimiter = False '<-- tabulation
'        .TextFileCommaDelimiter = False '<-- virgule
'        .TextFileSpaceDelimiter = False '<-- espace

        .Refresh 'exécute la requête
'        .Delete '<-- supprime la connexion au fichier texte

    End With

End Sub

Bonjour,

thev a écrit :

Bonsoir,

vous ne devez pas faire le bon choix au niveau de l'importation du fichier :

onglet Données --> bouton Fichier texte

Avec ce choix, l'enregistreur de macros utilise l'objet "DataQuery".

L'enregistreur de macro utilise l'objet QueryTable si j'importe les données sous forme de tableau mais, si je coche ne créer que la connexion et ajouter ces données au modèle de données l'enregistreur de macro utilise l'objet connection.

btnfichiertexte

Bonjour,

Theze a écrit :

Bonjour,

Si tu veux juste faire une requête, voici une piste :

Sub Requete()

    Dim Fe As Worksheet
    Dim Fichier As String

    Fichier = "C:\Mon dossier\Mon Classeur.csv"

    Set Fe = Worksheets(1)

    With Fe.QueryTables.Add("TEXT;" & Fichier, Range("A1"))

        .TextFileParseType = xlDelimited
        'faire un choix :
        .TextFileSemicolonDelimiter = True '<-- point virgule
'        .TextFileTabDelimiter = False '<-- tabulation
'        .TextFileCommaDelimiter = False '<-- virgule
'        .TextFileSpaceDelimiter = False '<-- espace

        .Refresh 'exécute la requête
'        .Delete '<-- supprime la connexion au fichier texte

    End With

End Sub

Merci pour ta macro je l'ai essayée mais elle importe les données dans le classeur hors moi je voudrais réussir a créer une connexion (donc je n'ai pas de destination pour les données) pour créer un TCD à partir de cette connexion.

De plus j'ai des fichiers csv de plus de 2 puissance 20 lignes donc lors de l'importation un grand nombre de ligne est perdu...

Si tu as une autre idée je suis preneur

Bonjour,

Regarde mon message avec Power Query...

Cdlt.

Jean-Eric a écrit :

Bonjour,

Regarde mon message avec Power Query...

Cdlt.

Bonjour,

Je l'ai vu et j'ai testé ta solution :

Zerak a écrit :

Bonjour,

Avec l'enregistreur de macro j'obtiens ce code

 Workbooks("Classeur1").Connections.Add2 "Requête - MonFichier", _
        "Connexion à la requête « MonFichier » dans le classeur.", _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$EmbeddedMashup(09864bd3-9c5e-4c36-a569-43ed0f213902)$;Location=MonFichier;Extended Properties=UEsDBBQAAgAIABtWr0oweSIMrAAAAPoAAAASABwAQ29uZmlnL1BhY2thZ2UueG1sIKIYACigFAAAAAAAAAAAAAAAAAAAAAAAAAAAAIWPzwqCQBjEX0X27rf+r+RzPQSdEqIguoquuqRr7K7pu3XokXqFgjK6dZsZ5gczj9sd06lrrStXWvQyIS44xOKy6Esh64QMprKXJGW4y4tzXnPrVZY6n" & _
        "aZ0HEcYfehVTT3Hcekp2x6Khne5LaQ2uSw4+VLlf4owPL7HMA+CAIJoEYK3dJHOMWZCztqFEHxvFYGD9CfG9dCaQXFWKXuzRzpbpJ8f7AlQSwMEFAACAAgAG1avSg/K6aukAAAA6QAAABMAHABbQ29udGVudF9UeXBlc10ueG1sIKIYACigFAAAAAAAAAAAAAAAAAAAAAAAAAAAAG2OSw7CMAxErxJ5n7qwQAg1ZQHcgAtEwf2I5qPGReFsLDgSVyBtd4ilZ+Z55vN6V8dkB/GgMfbeKdgUJQhyxt961yqYuJF7ONbV9Rkoihx1UUHHHA6I0XRkdSx8IJedxo9Wcz7HFoM2d90Sbstyh8Y7JseS5x9QV" & _
        "Qsr7UZB3Fac3OVAqbEuMj4l7A/eR3C0BvN2cQkbZR2IXEZXn8BUEsDBBQAAgAIABtWr0r2gs2r+AAAAGkBAAATABwARm9ybXVsYXMvU2VjdGlvbjEubSCiGAAooBQAAAAAAAAAAAAAAAAAAAAAAAAAAABtT8FKw0AQvQfyD8t6SWEJJODFkoOkjXiwIoknU0LcTHUhuyM7u8FS+0F+hz/mllCk4Fxm3uPNvDcE0ik0rJ57toyjOKL33sLA7h/qruqq27Lp7taPrGAjuDhioWr0VkJgSprSFUqvwbikUiOkJRoXACW8vGmfCSy1elISDLVnIbUb9BP0ng1IpMC2l06ppIkvxMsKRqWVA1vwLy5YiaPXho" & _
        "zVmT5dYBPHh3Ubj9C8TemGzSwXYg58RVv9h/AdFjbqZ9vHrI3/WtQNbY3tEOr5/MnFSXzf+Jw4DObBXt32nfw6Y6Cnfn8gj8u4kiZ//2Wv1BLAQItABQAAgAIABtWr0oweSIMrAAAAPoAAAASAAAAAAAAAAAAAAAAAAAAAABDb25maWcvUGFja2FnZS54bWxQSwECLQAUAAIACAAbVq9KD8rpq6QAAADpAAAAEwAAAAAAAAAAAAAAAAD4AAAAW0NvbnRlbnRfVHlwZXNdLnhtbFBLAQItABQAAgAIABtWr0r2gs2r+AAAAGkBAAATAAAAAAAAAAAAAAAAAOkBAABGb3JtdWxhcy9TZWN0aW9uMS5tUEs" & _
       "AAMAwgAAAC4DAAAAAA==", """MonFichier""", 6, True, FA

Mais lorsque j’exécute ce code il y a une erreur "Erreur inattendu Format de fichier non reconnu" tout le code est en jaune et la flèche est sur la ligne "AAMAwgAAAC4DAAAAAA==", """MonFichier""", 6, True, FA.

J’avoue que je ne comprend pas grand chose a la requête qui est créée par l'enregistreur de macro savez vous ce que je pourrais faire SVP?

Re,

Pas de besoin de VBA avec Power Query.

As tu installé ce complément ?

Cdlt.

Bonjour,

Oui je l'ai installé complètement, mon programme fonctionne sous vba, il faut donc que je puisse utiliser power query via vba.

powerquery

Bonjour,

As-tu lu mes précédents messages ? Tu n'as pas besoin de VBA.

Pour créer une requête vers ton fichier csv (attention aux menus différents suivant les versions d'Excel) :

Ruban / Données / Nouvelle requête / A partir d'un fichier, puis A partir d'un fichier csv.

L'objectif est de créer une table (tableau) dynamique.

A te relire.

Cdlt.

Bonjour,

J'ai bien lu tes précédents messages mais j'ai besoin d'utiliser VBA, car j'ai plusieurs fichiers csv je dois donc créer plusieurs connexions et plutôt que de faire 20 connexions à la mains j'utilise VBA pour automatiser tout ça.

L'objectif est, une fois toutes les connexions créées de créer des relations entre les connexions puis de créer un TCD.

Dans le ruban données je n'ai pas "Nouvelle requête"

Merci pour ton aide.

Rechercher des sujets similaires à "connexion entre classeur fichier csv"