Problème chemin macro

Bonjour à tous,

j'ai un problème pour trouver le bon chemin macro, avec des fichiers qui se trouvent dans 3 dossiers différents.

le fichier COM est le dossier 1

le fichier mmg raport tbs - base est le dossier 2

le fichier mmg raport tbs - dg est le dossier 3

lorsque je change la date du fichier mmg raport tbs - dg (dossier3), la macro doit agir sur le fichier mmg raport tbs - base (dossier2), mais la macro indique que le chemin est incorect.

Merci pour votre aide

3com.xlsm (8.31 Ko)

Bonjour,

Vous pensez que l'on va pouvoir trouver une erreur de "sous-répertoire" ? nous n'avons pas la configuration des enregistrements de vos fichiers.

Vous utilisez pour indiquer le chemin : Thisworkbook.path .... ( chemin actuel du fichier ouvert ) cela veut dire que si fichier dossier 3 ouvert et que vous indiquer ensuite un autre nom de répertoire alors :

dans votre exemple : le Dossier 2 ce trouve dans un sous répertoire du dossier 3

si les trois fichier utilisent des chemin différents alors indiquez le chemin intégrale : "C:\users\mesdocuments\ ............

Bonjour,

Voici une fonction afin de tester vos chemins et voir à partir d'où ils cafouillent :

'AVANT TOUT : ajouter la référence Microsoft Scripting Runtime !!!

Function TesterChaqueRepertoire(Chemin$) As Boolean

Dim fso As FileSystemObject
Dim Rep$
Dim Doss

Set fso = New FileSystemObject 'nouvel object file system
Rep = Chemin 'Rep vaut chemin
Doss = Split(Rep, "\") 'Dossier est un tableau de tous les dossiers

If Not LecteurExiste(Rep) Then 'si le lecteur n'existe pas
    Message = Doss(0) & " est introuvable !!!"
    Rep = "" 'permettra de renvoyer faux (voir étiquette Fin)
    GoTo Fin 'sortie fonction
End If

i = UBound(Doss) 'on commence par le dernier sous-dossier
While i > 0 'tant que i >0
    If Not DossierExiste(Rep) Then 'si le chemin n'existe pas
        Message = Message & Rep & " n'existe pas !!!" & vbCrLf & vbCrLf 'stocke dans msg
        Rep = Replace(Join(Doss, "\"), "\" & Doss(i), "") 'chemin tronque le dernier sous-dossier
        Doss = Split(Rep, "\") 'tableau imputé du dernier sous-dossier
        i = i - 1 'décrémentation
    Else 'sinon
        Message = Message & Rep & " est bien un chemin existant !" 'msg ok
        GoTo Fin 'sortie
    End If
Wend

Fin:
MsgBox Message 'permet de lister chaque inexistence de chemin jusqu'à réussite
If Rep = Chemin Then TesterChaqueRepertoire = True 'ssi rep = chemin, renvoie vrai

End Function

Function DossierExiste(Chemin$) As Boolean 'teste si dossier existe pour le chemin spécifié

Dim fso As FileSystemObject
Set fso = New FileSystemObject
If fso.FolderExists(Chemin) Then DossierExiste = True

End Function

Function LecteurExiste(Chemin$) As Boolean 'teste si lecteur existe pour le chemin spécifié

Dim fso As FileSystemObject
Set fso = New FileSystemObject
If fso.GetDriveName(Chemin) = Split(Chemin, "\")(0) Then LecteurExiste = True

End Function

Il faudra bien ajouter la librairie Microsoft Scripting Runtime via Outils/Références. En espérant que ça vous serve.

Mais comme l'a fait remarquer Xmenpl, le mieux serait de décrire l'arborescence de vos répertoires afin qu'on sache où doit se trouver quoi et qu'on puisse fixer un dénominateur commun et personnaliser le reste du chemin...

Cdlt,

Bonjour à tous,

voilà l'arborescence :

C:\Users\chris\Desktop\TBS SYSTEM\TBS - TEST YUTR - Copie (2)\a-mmg \MMG Raport TBS - BASE

C:\Users\chris\Desktop\TBS SYSTEM\TBS - TEST YUTR - Copie (2)\formulaire\com

C:\Users\chris\Desktop\TBS SYSTEM\TBS - TEST YUTR - Copie (2)\rapport\MMG Raport TBS - DG

merci pour votre aide

Bonjour,

Comme je n'ai pas votre code, je ne sais pas vraiment quoi répondre. Je ferais quelque chose comme ça :

Racine = "C:\Users\chris\Desktop\TBS SYSTEM\TBS - TEST YUTR - Copie (2)\"

Select case i
    case 1: ssdoss = "a-mmg \MMG Raport TBS - BASE"
    case 2: ssdoss = "formulaire\com"
    case 3: ssdoss = "MMG Raport TBS - DG"
end select

repertoire = Racine & ssdoss 'éventuellement & "\"

Ici i serait à déterminer en fonction du cas.

Attention car j'ai l'impression que vous manquez de rigueur dans votre façon de nommer les dossiers et fichiers. Ce serait mieux si vous écriviez toujours Rapport avec 2 p, si le dossier "a-mmg " ne contenait pas d'espace, voire même si vous saisissiez chaque nom en majuscule.

Cdlt,

Bonjour,

voilà le code du fichier MMG Raport TBS - DG:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [AT3,AT4:AW4]) Is Nothing Then Exit Sub
Dim etat As Boolean
With Application
.ScreenUpdating = False
.DisplayAlerts = False
etat = .AskToUpdateLinks
.AskToUpdateLinks = False
Workbooks.Open(ThisWorkbook.Path & "\a-mmg\MMG Raport TBS - BASE.xlsm").Close True
.AskToUpdateLinks = etat
End With
ThisWorkbook.Save
End Sub

Bonjour,

N'hésitez pas à utiliser les balises de code pour que ce soit plus lisible .

Private Sub Worksheet_Change(ByVal Target As Range)

Dim etat as Boolean

If Intersect(Target, [AT3,AT4:AW4]) Is Nothing Then Exit Sub

With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
    etat = .AskToUpdateLinks
    .AskToUpdateLinks = False
    Workbooks.Open(ThisWorkbook.Path & "\a-mmg\MMG Raport TBS - BASE.xlsm").Close True 'ici "a-mmg\" sans espace !
    .AskToUpdateLinks = True
    .DisplayAlerts = True
    .ScreenUpdating = True
End With

ThisWorkbook.Save

End Sub

Alors désolé mais pour l'instant je ne comprends toujours pas. Je ne vois pas de condition. Et je me rends compte que je ne sais même pas ce que vous cherchez à faire. Est-ce que l'objectif est bien d'ouvrir un des fichiers sous une condition de valeur de cellule ? Si c'est bien le cas, il faut m'expliquer à partir de quelle feuille de quel classeur s'exécute le code et ce qu'il fait dans quel cas.

Par ailleurs, avez-vous essayé ma fonction TesterChaqueRepertoire au sein de votre code pour sonder votre chemin ?

Cdlt,

Rebonjour,

D'aprés ce que j'ai pu lire des posts et à la vue des noms de fichiers zippés ; j'utiliserai quelques chose comme ceci au début de vos macros

dans les différents fichiers.

' DELCARATION DES VARIABLES
Dim CHEMIN As String
Dim FICHIERbase As Workbook
Dim FICHIERcom As Workbook
Dim FICHIERdg As Workbook

CHEMIN = "C:\Users\chris\Desktop\TBS SYSTEM\TBS - TEST YUTR - Copie (2)\"
FICHIERbase = "a-mmg\mmg-raport-tbs-base.xlsm"
FICHIERcom = "formulaire\com.xlsm"
FICHIERdg = "rapport\mmg-raport-tbs-dg.xlsm"

'Ensuite vous pouvez utiliser ces variables pour ouvrir les fichiers exemple :
'ouverture du fichier com.xlsm
Workbooks.Open Filename:=CHEMIN & FICHIERcom

Alors désolé mais pour l'instant je ne comprends toujours pas.

Bonjour 3GB je dois reconnaitre qu'il y a des bouts de code + qu'interrogatif

Workbooks.Open(ThisWorkbook.Path & "\a-mmg\MMG Raport TBS - BASE.xlsm").Close

On ouvre ? on ferme ? on fait fait ?

Edit : Bonjour Xmenpl

Je m'en étais même pas aperçu en plus !!!

C'est sur que ça marche moins bien...

Bonjour à tous,

vous allez trop vite pour moi

le fichier COM, dossier 1 est la base de données

le fichier mmg raport tbs - base, dossier 2 est le fichier qui lorsque l'on change "la date du fichier mmg raport tbs - dg, va recalculer les données pour actualiser le fichier mmg raport tbs - dg

Le fichier mmg raport tbs - base, dossier 2, doit toujours fermé, c'est pour cela que la macro dit "ouvrir et fermer"

cette macro fonctionne parfaitement dans le cas ou le le fichier mmg raport tbs - base est dans un sous dossier et que les fichiers COM et mmg raport tbs - dg sont ensemble dans le dossier principal

ce que je cherche a faire, c'est que chaque fichier soit dans 1 sous dossier séparé et que cela fonctionne.

Merci pour votre aide

C'est pas encore tout à fait limpide mais je crois que la dernière proposition de Xmenpl est la bonne, à savoir :

' !!! Dans un module normal, en tête du module
Public racine$
Public FICHIERbase$
Public FICHIERcom$
Public FICHIERdg$

'dans le module thisworkbook
Private sub workbook_open()
racine = "C:\Users\chris\Desktop\TBS SYSTEM\TBS - TEST YUTR - Copie (2)\"
FICHIERbase = racine & "a-mmg\mmg-raport-tbs-base.xlsm"
FICHIERcom = racine & "formulaire\com.xlsm"
FICHIERdg = racine & "rapport\mmg-raport-tbs-dg.xlsm"
end sub

'Ensuite vous pouvez utiliser ces variables pour ouvrir les fichiers exemple :
'ouverture du fichier com.xlsm
'dans la procédure worksheet_change
Workbooks.Open(FICHIERcom)

Bonjour à tous,

cette macro fonctionne parfaitement dans le cas ou le le fichier mmg raport tbs - base est dans un sous dossier et que les fichiers COM et mmg raport tbs - dg sont ensemble dans le dossier principal

ce que je cherche a faire, c'est que chaque fichier soit dans 1 sous dossier séparé et que cela fonctionne.

Merci pour votre aide

Puisque votre macro fonctionne ainsi alors :

D'aprés le chemin commun aux fichiers et les 3 répertoires que vous avez écris plus haut : "a-mmg" "formulaire" "rapport"

Votre code + le mien

Private Sub Worksheet_Change(ByVal Target As Range)
'Mon code déclaratif des fichiers chemins de fichiers
Dim CHEMIN As String
Dim FICHIERbase As Workbook
Dim FICHIERcom As Workbook
Dim FICHIERdg As Workbook

CHEMIN = "C:\Users\chris\Desktop\TBS SYSTEM\TBS - TEST YUTR - Copie (2)\"
FICHIERbase = "a-mmg\mmg-raport-tbs-base.xlsm"
FICHIERcom = "formulaire\com.xlsm"
FICHIERdg = "rapport\mmg-raport-tbs-dg.xlsm"

' Votre code actualisé avec les variables

Dim etat As Boolean

If Intersect(Target, [AT3,AT4:AW4]) Is Nothing Then Exit Sub

With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
    etat = .AskToUpdateLinks
    .AskToUpdateLinks = False
    Workbooks.Open(CHEMIN & FICHIERbase).Close True 
    .AskToUpdateLinks = True
    .DisplayAlerts = True
    .ScreenUpdating = True
End With

ThisWorkbook.Save

End Sub

Sous réserve que ce code ne lance pas une autre macro (non modifiéé avec les mêmes variables) dans un autre fichier ?

la macro indique : erreur d'exécution '91'

en jaune : FICHIERbase = "a-mmg\MMG Raport TBS - BASE.xlsm"

Il faut remplacer as workbook par as string sur les 3 lignes...

Un grand merci pour votre aide, ça marche parfaitement. autre question : que faut il rajouter dans la macro si j'ai un mot de passe a l'ouverture des fichiers COM, mmg raport tbs - base et mmg raport tbs - dg?

Macro que j'utilise lorsque j'ai un mot de passe à l'ouverture du fichier MMG Raport TBS - BASE :

Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, [AT3,AT4:AW4]) Is Nothing Then Exit Sub

Dim etat As Boolean

With Application

.ScreenUpdating = False

.DisplayAlerts = False

etat = .AskToUpdateLinks

.AskToUpdateLinks = False

Workbooks.Open(Filename:=ThisWorkbook.Path & "\a-mmg\MMG Raport TBS - BASE.xlsm",Password:="P2020").Close True

.AskToUpdateLinks = etat

End With

ThisWorkbook.Save

End Sub

Encore un grand merci pour votre aide

Bonjour,

Il faut rajouter une variable (si le mdp est commun) ou 3 variables (pour chaque mdp) à côté des noms de fichiers, l'affecter de la même manière et l'appeler dans workbooks.open :

Dim motdepasse$ 'à côté des Dim FichierBase ...

motdepasse = "P2020" 'à côté des FichierBase = "...xlsm"

'puis, appeler ainsi :
Workbooks.Open(Filename:=nomfichieràouvrir,Password:=motdepasse)

Cdlt,

Auriez la bonté de me donner le code Macro complet avec vos modifications, car j'ai du mal a comprendre, merci par avance.

En fait, je sais pas quel est votre code. Si vous me mettez votre code relatif à l'ouverture, je pourrais adapter car je ne sais pas quelle solution vous avez retenu finalement.

Mais c'est assez simple, la ou les variables mdp se déclarent au même endroit que les variables nom de fichier. Elles s'affectent à l'endroit où sont affectées les variables nom de fichier (lignes juste avant ou après ça ne change rien car il n'y a pas de lien) et les variables sont insérées en argument (password:=nomvariablemdp) de workbooks.open

Rechercher des sujets similaires à "probleme chemin macro"