déclencher ouverture fichier par menu déroulant

PFRANCO

XLDnaute Junior
Bonsoir à tous,

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 Target.Address = "$A$1" Then

ThePath = ThisWorkbook.Path & "\"
TheFile = Target.Value & ".xls"

TheQuestion = MsgBox("Voulez-Vous Ouvrir le Fichier :" & TheFile, vbQuestion + vbYesNo)

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.

Quelle galère.

Philippe
 

mth

XLDnaute Barbatruc
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)

Bonne soirée,

mth
 

PFRANCO

XLDnaute Junior
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.

A plus tard.

Philippe.
 

mth

XLDnaute Barbatruc
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é.

Ca vient peut-être de là ? ...

bonne journée,

mth
 

PFRANCO

XLDnaute Junior
Re : déclencher ouverture fichier par menu déroulant

Re-bonjour mth,

Je comprends bien ton explication. J'ai ouvert chaque fichier et y ai tapé un nom et les ai ensuite enregistrés. Cependant, la difficulté est la même.

Je préfère donc te joindre un fichier uo les explications sont plus complètes.

Je te remercie..

Ps: sivous avez d'autres idées , je ne suis pas contre car c'est pa simple apparement.
 

Pièces jointes

  • MALETTE_TEST_MOULOT - Copie.zip
    57.2 KB · Affichages: 26
  • MALETTE_TEST_MOULOT - Copie.zip
    57.2 KB · Affichages: 27
  • MALETTE_TEST_MOULOT - Copie.zip
    57.2 KB · Affichages: 29

kjin

XLDnaute Barbatruc
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
 

PFRANCO

XLDnaute Junior
Re : déclencher ouverture fichier par menu déroulant

Bjr kjin,
J'ai essayé de virer l'extension sans succès.

as-tu le fichier test que j'ai envoyé ? car je pourrais avoir fait une betise que je ne vois pas.

Meri en tout cas de bien vouloir me guider.
le message d'erreur est le suivant.

HTML:
Le fichier Jean.xlsx n'a pas été trouvé dans le répertoire:C:\Users\Utilisateur\Documents\MALETTE_TEST_MOULOT
 

kjin

XLDnaute Barbatruc
Re : déclencher ouverture fichier par menu déroulant

Bonsoir,
as-tu le fichier test que j'ai envoyé ? car je pourrais avoir fait une betise que je ne vois pas.
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
 

PFRANCO

XLDnaute Junior
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.

Merci, à +

Philippe


Je ne suis pas trés brillant
 

Pièces jointes

  • MALETTE_TEST_MOULOT - Copie.zip
    54.8 KB · Affichages: 26
  • MALETTE_TEST_MOULOT - Copie.zip
    54.8 KB · Affichages: 28
  • MALETTE_TEST_MOULOT - Copie.zip
    54.8 KB · Affichages: 24

mth

XLDnaute Barbatruc
Re : déclencher ouverture fichier par menu déroulant

bonjour PFRANCO, kjin :)

PFRANCO, dans le code de ta feuille tu as:
Code:
        ThePath = ThisWorkbook.Path & "C:\Users\Utilisateur\Documents\MALETTE_TEST_MOULOT-Copie\Contrats saisis"

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\"

Bonne journée :)

mth
 

PFRANCO

XLDnaute Junior
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é:

HTML:
ThePath = ThisWorkbook.Path & "C:\Users\Utilisateur\Documents\MALETTE_TEST_MOULOT - Copie\Contrats saisis"
au lieu de:
HTML:
ThePath = ThisWorkbook.Path & "\Contrats saisis\"
Je ne savais pas qu'il n'était pas nécessaire de n'indiquer que le dossier final. Pourtant tu le l'avais indiqué kjin.

En tout cas, merci à tous les deux. Je dois faire preuve de plus de concentration.

Merci au forum !!

Philippe
 

PFRANCO

XLDnaute Junior
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
 

PFRANCO

XLDnaute Junior
Re : déclencher ouverture fichier par menu déroulant

Bonjour à tous,

J'ai trouvé cette solution dans un post. Elle fonctionne bien.

Mais est-elle correcte techniquement ?

Merci pour vos avis.

Philippe.
HTML:
Nomfichier = Range("d1").Text


année = Range("e1")

heure = Range("f1")

ActiveWorkbook.SaveAs Filename:= _
"C:\Users\Utilisateur\Desktop\MALETTE_TEST_MOULOT\Contrats saisis\" & Nomfichier & " " & année & " " & heure
Application.DisplayAlerts = False
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 187
dernier inscrit
ebenhamel