VBA Chemin Relatif [Résolu]

aaliyan 104 Messages postés samedi 12 mars 2005Date d'inscription 30 avril 2007 Dernière intervention - 13 mars 2007 à 18:10 - Dernière réponse : ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention
- 1 mai 2015 à 07:30
Bonjour à tous,
J'ai un petit souci avec le Visual Basic et les chemins relatifs... je suis en train de travailler sur un fichier excel et par une macro je cherche à ouvrir un autre fichier excel qui se trouve dans me meme dossier...
et je n'ai trouver que cette solution:

nom = InputBox("Entrer le nom du fichier")
ChDir "C:\Bureau\Pierre\Doc"
Workbooks.Open Filename:=fichier

le probleme est que chaque fois que j'execute cette macro sur une autre machine je suis obligé de changer l'adresse d'acces.
Existe t il un moyen plus simple avec un chemin relatif?
Merci d'avance.
Afficher la suite 

9 réponses

Répondre au sujet
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 13 mars 2007 à 18:56
+1
Utile
Bonjour,

Il me semble avoir lu quelque part que l'équivalent de App.Path était :

- avec Access : CurrentProject.Path
-avec Excel : ActiveWorkbook.Path
-avec Word : ActiveDocument.Path
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jmfmarques
aaliyan 104 Messages postés samedi 12 mars 2005Date d'inscription 30 avril 2007 Dernière intervention - 13 mars 2007 à 19:31
0
Utile
merci beaucou jmfmarques ca marche nikel !!!
byebye
Commenter la réponse de aaliyan
cs_westa 12 Messages postés lundi 19 mars 2007Date d'inscription 20 mars 2007 Dernière intervention - 19 mars 2007 à 17:46
0
Utile
Bonjour à tous,
je rebondis sur le sujet. Problème idiot qui m'a fait perdre mon après midi...
J'ai fait une macro par apprentissage pour importer un fichier texte dans un onglet. Le problème, c'est que je veux enlever le lien absolu pour le transformer en lien relatif (pour aller sur un autre PC). J'ai bidouillé mon truc, ca a marché deux fois, puis plus rien....
Voici une partie de mon code (qui a marché 2 fois) :
 
Sheets("ascii brut").Select
    Range("A1").Select
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;essais ASCII\base.txt"" _
        , Destination:=Range("A1"))
        .Name = "base"
        .FieldNames = True
        .RowNumbers = False
       ....
       End With

le lien absolu était : "C:\Documents and Settings\Munier\Bureau\Stage Moteur\Exploitation Excel\essais ASCII\base.txt"
(le fichier excel est dans "C:\Documents and Settings\Munier\Bureau\Stage Moteur\Exploitation Excel") et ca marchait.
j'ai essayé de mettre un truc du genre :

With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;ActiveWorkbook.Path & "\essais ASCII\base.txt"" _
        , Destination:=Range("A1"))

mais ca donne rien.... et j'aimerais énormément que vous m'aidiez dans ma démarche !!
Merci beaucoup pour votre aide !!
Romain
Commenter la réponse de cs_westa
frperreaut 1 Messages postés vendredi 7 mars 2008Date d'inscription 7 mars 2008 Dernière intervention - 7 mars 2008 à 11:34
0
Utile
Essaye donc :
Chemin = ActiveWorkbook.path   ou
Chemin = Thisworkbook.path
et compose par exemple un Chemin1 = Chemin & "" & "toto" & "" 

Voir aussi:

Function GetCurDir()
Dim str As String
Dim pos As Integer
str = ActiveWorkbook.FullName
pos = InStrRev(str, "")
str = Mid(str, 1, pos)
GetCurDir = str
End Function
Commenter la réponse de frperreaut
pasco05 13 Messages postés samedi 26 juillet 2003Date d'inscription 13 décembre 2007 Dernière intervention - 19 févr. 2009 à 22:56
0
Utile
Amusant,

 Function GetCurDir(Optional NbSousRep As Single)
Dim str As String
Dim pos, i As IntegerIf NbSousRep 0 Then NbSousRep 1
str = ActiveWorkbook.FullName
For i = 1 To NbSousRep
pos = InStrRev(Left(str, Len(str) - 1), "")
str = Mid(str, 1, pos)
Next i
GetCurDir = str
End Function
Sub testdir()
MsgBox GetCurDir(2)

End Sub

Pasco
Commenter la réponse de pasco05
pasco05 13 Messages postés samedi 26 juillet 2003Date d'inscription 13 décembre 2007 Dernière intervention - 19 févr. 2009 à 23:00
0
Utile
ouups

Function GetCurDir(Optional NbSousRep As Single)
Dim str As String
Dim pos, i As IntegerIf NbSousRep 0 Then NbSousRep 1
str = ActiveWorkbook.FullName
For i = 1 To NbSousRep
pos = InStrRev(Left(str, Len(str) - 1), "")
If pos = 0 Then Exit For
str = Mid(str, 1, pos)
Next i
GetCurDir = str
End Function

Pasco
Commenter la réponse de pasco05
0
Utile
Bonjour frperraut
Ton dernier scrpit a l'air bien mais pourrais tu l'expliquer.
Dire pas à pas ce qu'il fait pour les nuls. (avec la traduction)
Merci
Commenter la réponse de gabriel
0
Utile
Bonjour pasco
Ton dernier script a l'air bien mais pourrais tu l'expliquer.
Dire pas à pas ce qu'il fait pour les nuls. (avec la traduction)
Merci
Commenter la réponse de gabriel
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 1/05/2015 à 07:35
0
Utile
Bonjour, gabriel,
il n'y a rien à "expliquer" dans les deux codes pour lesquels tu demandes des précisions.
Ils font, l'un comme l'autre, appel à des notions de base très élémentaires et claires. A ce point claires que :
"dire pas à pas" ce que fait chacun de ces deux codes, reviendrait à dire ce que fait chacune des fonctions et/ou propriétés de base employées (et cela est dit dans ton aide VBA !).
Ouvre donc ton aide VBA sur les mots :
FullName
InstrRev
Mid
Path

et lis donc. Cette simple lecture te permettra de savoir ce que fait chaque ligne de code des deux codes qui t'intéressent.
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.