J'ai besoin d'un conseil sur une macro que j'essai de tourner dans tous les sens, sans succès.
J'ai un liste nommée dynamique de fichiers Excel qui se trouvent dans un même répertoire.
Elle es consultable dans un menu déroulant.
Je souhaite ouvrir les fichiers par le menu déroulant.
Voici le code que j'ai essayé d'appliquer.
L'erreur qui s'affiche indique que le chement ou les fichier n'existent pas.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ThePath As String
Dim TheFile As String
Dim TheQuestion As Byte
If TheQuestion = vbYes Then
On Error GoTo TheEnd
Workbooks.Open ThePath & TheFile
End If
End If
Exit Sub
TheEnd:
MsgBox "Le Fichier " & TheFile & " n'as pas été trouvé dans le répertoire :" & vbCrLf & ThePath, vbCritical, "@+Thierry's Démo"
End Sub
Merci de votre aide et merci à Thierry pour son travail.
Re : déclencher ouverture fichier par menu déroulant
bonsoir PFRANCO,
Cette macro semble très bien fonctionner, les noms des fichiers sont-ils bons?
Ton fichier pour tester est-il bien enregistré dans le même répertoire que les autres?
(Pour info, si tu testes sur un fichier non enregistré, ThisWorkbook.Path est vide)
Re : déclencher ouverture fichier par menu déroulant
Bonjour mth,
merci pour ta réponse. Coemme tu le dis et comme l'indique le code quej'ai copié, la ligne
ThePath = ThisWorkbook.Path & "\"est vide. Pourtant j'ai contrlôlé le chemin et les fichiers, ils sont bien à leur place.
Je commence à m'inquiéter sérieusement. J'ai essayé avec une autre ordi et j'ai le même résultat.
Merci de me guider dans mon erreur.
Re : déclencher ouverture fichier par menu déroulant
re,
Le fichier dans lequel se trouve ta macro doit avoir été enregistré sur ton disque au moins une fois, est-ce le cas?
Ainsi, si tu ne fais qu'ouvrir un nouveau fichier, coller ton code dedans et lancer la macro, ton ThisWorkbook.Path sera vide. Dès que tu auras enregistré ton fichier, ThisWorkbook.Path sera renseigné.
Re : déclencher ouverture fichier par menu déroulant
Bonjour, coucou Mireille ,
Tu écris...
Code:
TheFile = Target.Value & ".xlsx"
...or ta liste de validation contient le nom des fichiers avec leur extension ce qui reviens à chercher le fichier jean.xlsx.xlsx" par exemple !
Donc soit tu écris...
Code:
TheFile = Target.Value
soit tu vires l'extension dans les noms de ta liste de validation
A+
kjin
Tu ne cherches pas beaucoup non plus...!
Tu écris...
Code:
ThePath = ThisWorkbook.Path & "\"
...ce qui veut dire que tu vas chercher tes fichiers dans le dossier courant ; or dans l'exemple que tu as joins, tes fichiers se trouvent dans le sous-dossier "Contrats saisis", donc...
Code:
ThePath = ThisWorkbook.Path & "\Contrats saisis\"
La touche F8 de VBE te permettra de passer en mode Debug et de voir quelle valeur prennent tes variables
Un petit effort...
A+
kjin
Re : déclencher ouverture fichier par menu déroulant
Bonjour kjin,
C'est tout penaud que je reviens vers toi. Malgré avoir rajouté le bout de chemin qui manquait pour trouver l'accès, je ne parviens, même en essayant de modifier le code, à atteindre le résultat.
Il m'affiche maintenant une autre erreur:
HTML:
Le Fichier contrat cdd_charles édouard.xlsm n'a pas été trouvé dans le répertoire:C:\Users\Utilisateur\Documents\MALETTE_TEST_MOULOT_CopieC:\Users\Utilisateur\Documents\MALETTE_TEST_MOULOT_Copie
Il retrace deux fois le chemin.
Je ne te demande pas la solution car j'ai envie et besoin de comprendre mais guide-moi dans mes recherches.
Thisworkbook.path indique le chemin de ton fichier contenant ton code, soit C:\etc..
si tu ajoutes derrière ton chemin, ça fait trop, il faut retirer Thisworkbook.path
Ensuite, vérifie bien ce que tu as tapé, dans un de tes codes tu as ce répertoire:
MALETTE_TEST_MOULOT - Copie
Dans le code de ta feuille tu as:
MALETTE_TEST_MOULOT-Copie
ce qui n'est pas la même chose, l'un a des espaces à droite et à gauche du tiret et pas l'autre, il faut que tu respectes le nom exact du répertoire.
Dernière chose, dans ton chemin C:\Users\Utilisateur, tu es sans doute sous W7, Utilisateur est un alias, tu dois remplacer par ton nom de user à toi.
Ce qui donnerait donc pour cette ligne (sous réserve des noms exacts des répertoires):
Code:
ThePath = "C:\Users\TON NOM DE USER\Documents\MALETTE_TEST_MOULOT - Copie\Contrats saisis\"
Re : déclencher ouverture fichier par menu déroulant
Bonjour mth,
Je te remercie pour ces précisions. Je tiens aussi à te remercier kjin pour ta patience. J'ai enfin compris le pourquoi du comment.
Mais, au delà de votre enseignement, j'ai surtout compris d'où venait mon erreur. Pour attirbuer le chemin,j'ai entré:
Re : déclencher ouverture fichier par menu déroulant
Bonjour mth, bonjour kjin et bonjour au forum,
Je reviens vers vous pour améliorer une macro et j'ai besoin de vos conseils
Ce code me permet de créer la copie d'une feuille d'un fichier dans un nouveau fichier et de l'enregistrer dans un dossier précis.
Voici la macro:
Bonjour mth, bonjour kjin et bonjour au forum,
Je reviens vers vous pour améliorer une macro et j'ai besoin de vos conseils
Ce code me permet de créer la copie d'une feuille d'un fichier dans un nouveau fichier et de l'enregistrer dans un dossier précis.
Je n'arrive pas trouver comment lui définir dans cette macro le chemein définitf afin de ne pas voir apparaitre la boîte dialogue et d'enregister automatiquement.
Merci pour vos conseils.
Philippe.
Voici la macro:
HTML:
Sub création_contrat()
Application.ScreenUpdating = False
ActiveSheet.Unprotect
Sheets("contrat").Select
Rows("1:1").Select
Selection.EntireRow.Hidden = True
'copie la feuille en question dans un nouveau fichier
Sheets("contrat").Copy
Rows("2:5").Select
'supprime les zones de couleurs, les encadrés et le cadrillage
Range(Selection, Selection.End(xlDown)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Application.Goto Reference:="R1C1"
ActiveWindow.ScrollRow = 5
'ouvre la boîte de dialogue d'enregistrement et propose de choisir ledossier de destination
Application.Dialogs(xlDialogSaveAs).Show CStr(ThisWorkbook.ActiveSheet.Range("D1").Value) & Format(Date, "dd-mm-yyyy")
Windows("Contrat_cdd.xlsm").Activate
Sheets("contrat").Select
Rows("1:1").Select
Selection.EntireRow.Hidden = False
Range("A1").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Application.ScreenUpdating = True
End Sub