Chemin du fichier par mail

Bonjour à tous,

J'en appel à la solidarité et courageux du VBA.

Je débute depuis quelques semaines pour mon travail dans le code VBA.

Avec des recherches sur internet et beaucoup d'exercices j'ai réussi à bien avancer. Cependant, je bloque sur un sujet.

Voici ma situation actuelle:

J'ai créé des fichiers Excel qui sont actuellement à un emplacement précis sur le réseau de mon entreprise.

Dans ces fichiers, j'ai créé une macro liée à un bouton qui permet d'enregistrer le fichier à l'emplacement actuel, d'envoyer le lien d'accès au fichiers par mail à un destinataire défini qui en cliquant sur le lien ouvre le fichier, puis de fermer le fichier.

Un autre bouton permet d'envoyer ce fichier en pièce jointe par mail à un autre destinataire.

J'ai aussi réussi à créé un bouton permettant d'effacer l'ensemble des infos saisis dans le fichier, puis de l'enregistrer au même endroit sous le même nom avec l'année +1.

Une autre macro me permet de créer le fichier à l'emplacement défini selon des données saisies dans un onglet "Janvier".

Je pensais être arrivé au bout de mes peines après ces quelques mois de travail et de recherche qui aboutissent à quelques choses de bien et qui fonctionnent.

Voici maintenant mon problème et sujet de grands moments de réflexion:

Les fichiers sont tous placés sous un espace défini sur le serveur, du coup dans mon code VBA de mes différents macro (envoi du lien par mail, création d'un fichier au même endroit et création d'un fichier selon les données saisies) l'emplacement est écrit à la main pour la grande partie. Le problème est que les emplacements actuellement utilisés sont amené à être complètement revu (en gros l'arborescence des fichiers va éclater). Du coup mes macros ne fonctionneront pas si les fichiers changent de place.

Je suis donc à la recherche d'un code VBA qui permette d'obtenir l'emplacement du fichier même s'il est volatile.

J'ai pensé à utiliser la formule CELLULE(nomfichier) qui permet d'obtenir le chemin complet du fichier, sauf que de mon coté le disque dur s'appelle par exemple Z:\ mais chez une autre personne il ne s'appellera pas de cette manière.

J'ai aussi essayé le workbook.fullname mais ca ne fonctionne pas pour le lien du fichier dans l'envoi du mail ni pour les créations de fichiers à d'autres endroits.

Je vous envoi un fichier en exemple, les macros que je cherche à modifier sont dans:

  • le module 1 la macro "envoi_duo", il s'agit du lien d'accès au fichier dans un mail;
  • le module 2 la macro "nouvelle_année", il s'agit du bouton permettant la création d'un fichier vierge avec l'année augmenté de 1 dans l'onglet "janvier" et dans le nom du fichier;
  • le module 3 la macro "nouveau_fichier", il s'agit de la création d'un fichier à l'endroit défini en saisissant 3 champs dans l'onglet "janvier"

à chaque fois, la partie qui ne va pas c'est:

\\commun\ly\TECHNICENTRE\COMMUN_TECHNICENTRE\04_PARTAGE_RH\EVS\

que je suis incapable de transformer en volatile pour que ça fonctionne de la même manière.

Je vous remercie pour votre aide et j'espère avoir été assez clair et précis. N'hésitez pas à me poser des questions si besoins.

Merci à tous.

essaie ceci :

Sub text()

chemin = Workbooks(ActiveWorkbook.Name).FullName
MsgBox "Chemin complet " & chemin
chemin = Workbooks(ActiveWorkbook.Name).Path
MsgBox "Nom du Dossier " & chemin

End Sub

Bonjour Steelson,

merci pour ta réponse, dans l'idée ça ressemble à ce que je cherche mais je n'arrive pas à le faire fonctionner.

Dans le premier cas, le lien du fichier dans un mail, cela affiche bien le lien mais ne l'active pas. Il faut que la personne clique sur ce lien et que cela ouvre le fichier.

voici le code du lien:

        .Body = "Bonjour, " & Chr(13) & Chr(13) & "Voici le lien pour valider le fichier d'astreinte :" & Chr(13) & Chr(13) & Workbooks(ActiveWorkbook.Name).FullName & Chr(13) & Chr(13) & "Cordialement."

Dans le deuxième cas, la création d'un fichier vierge pour la nouvelle année, le fichier est placé dans le chemin:

Z:\COMMUN_TECHNICENTRE\04_PARTAGE_RH\EVS\L_Arbresle et se nomme "Relevé_d'astreinte_de_L_Arbresle_équipe_GT_2016

L'infos "L_Arbresle se choisit par liste déroulante en E2, l'infos équipe en saisie libre en E4 et 2016 en saisie libre en G6.

En cliquant sur le bouton "création fichier nouvelle année", cela doit effacer l'ensemble des onglets, augmenter l'année de 1 et enregistrer le fichier sous le nouveau nom et l'emplacement se définit avec les infos saisie.

Cela fera donc: Z:\COMMUN_TECHNICENTRE\04_PARTAGE_RH\EVS\L_Arbresle et se nomme "Relevé_d'astreinte_de_L_Arbresle_équipe_GT_2017.

voici le code correspondant:

Sub Nouvelle_année()
'
' Nouvelle_année Macro
Dossier = Cells(2, 5)

'
    Sheets(Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", _
        "Septembre", "Octobre", "Novembre", "Décembre")).Select
    Sheets("Décembre").Activate
    Range("D10:O200,B10:B200").Select
    Range("B200").Activate
    Selection.ClearContents
    Range("B10").Select
    Sheets("Janvier").Select
    Range("I6").Select
    Selection.Copy
    Range("G6").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("B10").Select

    Chemin = Workbooks(ActiveWorkbook.Name).Path & Dossier & "\Astreinte"
ActiveWorkbook.SaveAs Filename:=Chemin & "\" & "Relevé_d'astreinte_de_" & Sheets("Janvier").Range("E2") & "_" & "équipe" & "_" & Sheets("Janvier").Range("E4") & "_" & Sheets("Janvier").Range("G6") & ".xlsm"

End Sub

Cela ne fonctionne pas et me créer une erreur 1004 et bloque sur le activeworkbook.saveas

En gros, dans ce cas le fichier doit s'enregistrer au même endroit que le fichier actuel, il n'y a que le nom qui change.

Enfin dans le 3ème cas, la création d'un fichier et l'enregistrement en fonction des données saisies.

Il faut saisir l'UO en E2, l'équipe en E4 et l'année en G6 et cela va enregistrer le fichier dans le sous dossier correspondant à l'UO

Voici le code:

[code][/Sub Nouveau_fichier()

'Le nom de l'UO

Dossier = Cells(2, 5)

If MsgBox("Avez-vous bien saisie l'UO, l'équipe et l'année ?", vbYesNo, "Demande de confirmation") = vbYes Then

Chemin = Workbooks(ActiveWorkbook.Name).Path & Dossier & "\Astreinte"

ActiveWorkbook.SaveAs Filename:=Chemin & "\" & "Relevé_d'astreinte_de_" & Sheets("Janvier").Range("E2") & "_" & "équipe" & "_" & Sheets("Janvier").Range("E4") & "_" & Sheets("Janvier").Range("G6") & ".xlsm"

Worksheets("Janvier").Shapes("Rectangle à coins arrondis 3").Delete

End If

End Sub

code]

Mais même problème que le 2ème cas, il bloque sur le chemin.

En gros, dans ce cas, le fichier doit réussir à connaitre son emplacement actuel dans le dossier racine, et va s'enregistrer dans le sous dossier volatile en fonction des infos.

Le dossier racine qui peut changer sera:

Z:\COMMUN_TECHNICENTRE\04_PARTAGE_RH\EVS\

Et ensuite le sous dossier créer sera "L_Arbresle\Astreinte\

Merci pour votre aide.

Beaucoup trop de questions en même temps ... on va y aller point par point en douceur ! 8)

Alexpepe a écrit :

Bonjour Steelson,

merci pour ta réponse, dans l'idée ça ressemble à ce que je cherche mais je n'arrive pas à le faire fonctionner.

Dans le premier cas, le lien du fichier dans un mail, cela affiche bien le lien mais ne l'active pas. Il faut que la personne clique sur ce lien et que cela ouvre le fichier.

voici le code du lien:

        .Body = "Bonjour, " & Chr(13) & Chr(13) & "Voici le lien pour valider le fichier d'astreinte :" & Chr(13) & Chr(13) & Workbooks(ActiveWorkbook.Name).FullName & Chr(13) & Chr(13) & "Cordialement."

je te propose alors, sans avoir testé, de passer en htlmbody :

        .HtmlBody = "Bonjour,<br><br>Voici le lien pour valider le fichier d'astreinte :<br><br>" & "<a href='" & Workbooks(ActiveWorkbook.Name).FullName & "'>" & Workbooks(ActiveWorkbook.Name).FullName & "</a><br><br>Cordialement."

Alexpepe a écrit :

Cela ne fonctionne pas et me créer une erreur 1004 et bloque sur le activeworkbook.saveas

Fais d'abord un MsgBoxdu contenu pour voir comment il se présente, c'est peut-être là qu'il y a une erreur (genre caractère incompatible avec le nom d'un fichier)

MsgBox Chemin & "\" & "Relevé_d'astreinte_de_" & Sheets("Janvier").Range("E2") & "_" & "équipe" & "_" & Sheets("Janvier").Range("E4") & "_" & Sheets("Janvier").Range("G6") & ".xlsm"

Pour t'en convaincre si c'est cela, essaie d'enregistrer un fichier avec ce nom.


Pour le 3ème problème, tu es sûr qu'il ne te manque pas un antislash ?

Chemin = Workbooks(ActiveWorkbook.Name).Path & "\" & Dossier & "\Astreinte"

et même punition, sors un MsgBoxsur le nom du fichier.

Ceq ue je fais opur ces cas, c'est que j'épure les noms proposés en fichier de tous les caractères non alphanumériques !

Effectivement, ça fait beaucoup de sujet d'un coup et difficile de bien expliquer sans trop détailler.

Ca se voit pas derrière l'écran mais j'ai retrouvé un grand sourire car ça fonctionne nickel pour le lien dans le mail.

Sujet 1: Réussi

Merci beaucoup

Le 2ème sujet fonctionne nickel aussi, du coup ça enregistre à l'emplacement du fichier actuel et modifie l'année. donc j'obtiens exactement ce que je souhaite et cela fonctionne peut importe l'emplacement du fichier vu qu'il est volatile.

2ème sujet : REUSSI

Je pense que c'est l'un des plus beau jour de ma vie, après des heures de réflexion, tu as répondu à mes questions.

Ca fonctionne nickel et effectivement c'était bien l'antislash qu'il manquait.

3ème sujet: REUSSI

Du coup maintenant ça fonction tout parfaitement donc je pourrait m'arrêter là. Mais une autre question me vient, toujours dans le 3ème sujet qui est la création du fichier dans un emplacement selon les données saisies.

Imaginons que mon fichier vierge se trouve dans l'emplacement suivant:

Z:\COMMUN_TECHNICENTRE\04_PARTAGE_RH\EVS\Base vierge RAP

Et que le fichier que je vais créer doivent se mettre dans un sous dossier selon la donnée en E2 qui sera:

Z:\COMMUN_TECHNICENTRE\04_PARTAGE_RH\EVS\???

Le code que vous m'avez donné fonctionne si le fichier est dans le dossier au niveau supérieur de celui cible, mais est-il possible de dire en VBA de sortir le fichier d'un sous dossier puis d'aller chercher le bon sous dossier selon E2?

Merci beaucoup et cette dernière question est surtout pour du perfectionnisme. Si cela ne marche pas, je laisserai les fichiers direct dans le dossier EVS et non EVS\Base vierge RAP

Alexpepe a écrit :

Imaginons que mon fichier vierge se trouve dans l'emplacement suivant:

Z:\COMMUN_TECHNICENTRE\04_PARTAGE_RH\EVS\Base vierge RAP

Et que le fichier que je vais créer doivent se mettre dans un sous dossier selon la donnée en E2 qui sera:

Z:\COMMUN_TECHNICENTRE\04_PARTAGE_RH\EVS\???

Dans ce cas, chemin prendra la valeur

chemin = Mid(chemin, 1, InStrRev(chemin, "\") - 1)

J'espère avoir transformé le 4ème essai !!

Merci pour ta réponse mais je bloque sur la manière d'utiliser le code.

comment je fais pour passer de ce que j'ai:

[code][/Sub Nouveau_fichier()

'Le nom de l'UO

Dossier = Cells(2, 5)

If MsgBox("Avez-vous bien saisie l'UO, l'équipe et l'année ?", vbYesNo, "Demande de confirmation") = vbYes Then

Chemin = Workbooks(ActiveWorkbook.Name).Path & "\" & Dossier & "\Astreinte"

ActiveWorkbook.SaveAs Filename:=Chemin & "\" & "Relevé_d_astreinte_de_" & Sheets("Janvier").Range("E2") & "_" & "équipe" & "_" & Sheets("Janvier").Range("E4") & "_" & Sheets("Janvier").Range("G6") & ".xlsm"

Worksheets("Janvier").Shapes("Rectangle à coins arrondis 3").Delete

End If

End Sub

code]

avec ton code?

essaie ceci :

Sub Nouveau_fichier()

'Le nom de l'UO
Dossier = Cells(2, 5)

If MsgBox("Avez-vous bien saisie l'UO, l'équipe et l'année ?", vbYesNo, "Demande de confirmation") = vbYes Then
chemin = Workbooks(ActiveWorkbook.Name).Path
chemin = Mid(chemin, 1, InStrRev(chemin, "\") - 1) & "\" & Dossier & "\Astreinte"
ActiveWorkbook.SaveAs Filename:=chemin & "\" & "Relevé_d_astreinte_de_" & Sheets("Janvier").Range("E2") & "_" & "équipe" & "_" & Sheets("Janvier").Range("E4") & "_" & Sheets("Janvier").Range("G6") & ".xlsm"
Worksheets("Janvier").Shapes("Rectangle à coins arrondis 3").Delete
End If
End Sub

bon et bien je te dois un grand MERCI, ça fonctionne parfaitement et du coup mon fichier va bien se ranger au bon endroit.

Pour l'instant je ne vois rien d'autre en amélioration donc tu as résolu tous mes problèmes.

Merci beaucoup pour ton aide et ton efficacité.

4ème sujet: REUSSI

J'attends le cinquième élément

Rechercher des sujets similaires à "chemin fichier mail"