[Catégorie modifiée .Net -> VBA] Importer des données : chemin relatif [Résolu]

Signaler
Messages postés
22
Date d'inscription
jeudi 2 avril 2009
Statut
Membre
Dernière intervention
25 août 2011
-
Messages postés
22
Date d'inscription
jeudi 2 avril 2009
Statut
Membre
Dernière intervention
25 août 2011
-
Bonjour,

Je dois effectuer une présentation d'un programme réalisé sous Excel. Dans le fichier Excel je dois importer des données d'un fichier texte qui se trouve dans le même dossier que le fichier Excel.

Le soucis concerne le chemin à écrire pour effectuer l'importation des données et plus particulièrement le lecteur qui varie selon le PC utilisé. Voici le début de la macro :

[i]Sub initialisation()

Dim lecteur As String

'récupère le chemin du dossier où se trouve le fichier Excel
Cells(1, 1).Value = ActiveWorkbook.Path
Cells(2, 1).Select
ActiveCell.FormulaR1C1 = "=LEFT(R[-1]C,1)"
lecteur = ActiveCell.Value

'suppression des données précédentes
Sheets("Donnees").Select
Cells.Select
Selection.Clear
Selection.QueryTable.Delete

'importation des données
Range("A1").Select
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" D:Stage\moulinette.txt ", Destination: =Range("A1"))
.Name = "moulinette_1"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub/i

Ce code fonctionne mais il faudrait remplacer le D du chemin par la variable lecteur. J'ai essayé toute sorte de combinaison possible pour concaténer le lecteur et le reste du chemin mais il se passe toujours une erreur.

Merci d'avance pour votre aide.

4 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
68
Salut

Pense à choisir une catégorie de question en rapport avec le langage; merci.

Regarde ActiveWorkbook.Path
Ta ligne deviendrait
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;ActiveWorkbook.Path & "\moulinette.txt", Destination:=Range("A1")) 

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
68
Regarde mieux ta ligne : Elle doit déjà buguer : Il y a un nombre impair de "
Pas normal.
Messages postés
22
Date d'inscription
jeudi 2 avril 2009
Statut
Membre
Dernière intervention
25 août 2011

Salut jack et merci pour ta réponse.

J'avais en effet essayé cette 1ère solution. ActiveWorkbook.Path me retourne bien "D:Stage". En rajoutant & "\moulinette.txt" je pensais qu'il comprendrait "D:Stage\moulinette.txt".

Mais non çe me met une erreur de type "Attendu séparateur de liste ou )" en surlignant :
ActiveSheet.QueryTables.Add(Connection:= "TEXT;ActiveWorkbook.Path & "\moulinette.txt ", Destination:=Range(" A1"))

Je pense aussi qu'il doit y avoir un problème de ", j'ai essayé :

[i]ActiveSheet.QueryTables.Add(Connection: = _
"TEXT;ActiveWorkbook.Path & " \ moulinette.txt, Destination:=Range("A1")) /i--> Objet requis en exécutant la macro.

J'ai remarqué qu'en écrivant activeworkbook. aucune liste proposant path n'apparait alors qu'en l'écrivant ailleurs cette liste apparait. Est-il possible qu'il ne reconnaisse pas activeworkbook ?
Messages postés
22
Date d'inscription
jeudi 2 avril 2009
Statut
Membre
Dernière intervention
25 août 2011

Aaah trouvé ! Il manquait bien un " quelque part juste après TEXT; :

[i]ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & ActiveWorkbook.Path & "\moulinette.txt", Destination:=Range("A1"))/i