Nom utilisateur dans chemin de sauvegarde

Je veux bien la soluce en VB car, mon but est d'envoyer un fichier Excel (le mien!) par Outlook à tous les opérateurs censés m'envoyer leur pointage (feuille active) en Pdf afin d'uniformiser ceci, et aussi leur simplififier la tâche.

A la réception de mon mail, ils ouvrent le fichier, et ensuite tout est automatisé, ou contient des modes opératoires à chaque palier :

Le premier est de renseigner plus ou moins leurs coordonnées (prénom, etc...), et c'est à ce stade que je voulais créer une copie en cet état pour l'année prochaine.

Ensuite, plusieurs manips dont la création des 52 semaines de l'année en onglets, etc.... et j'enregistre sur le bureau pour utilisation quotidienne.

En fin de semaine, macro pour envoyer la feuille active en Pdf, enregistrement et fermeture. (pas facile à expliquer tout ça!)

Cependant, certain ont XP, d'autres Seven

Alors, si bien sur tu peux m'aider, avant la fameuse première sauvegarde, à créer un dossier (par exemple "Pointage") avant de faire ma sauvegarde comme ceci :

Nom_Fichier = "C:\Pointage\Le pointage vierge de" & " " & Range("Données!B7") & " " & Range("Données!B8") & ".xlsm"
    ActiveWorkbook.SaveAs Nom_Fichier, xlOpenXMLWorkbookMacroEnabled

    MsgBox "Une copie de sauvegarde vient d'être faite dans cet état sur votre C: ", , "Sauvegarde"

Voir :

Nom_Fichier = "C:\Pointage\Mon pointage vierge" & ".xlsm"
    ActiveWorkbook.SaveAs Nom_Fichier, xlOpenXMLWorkbookMacroEnabled

    MsgBox "Une copie de sauvegarde vient d'être faite dans cet état sur votre C: ", , "Sauvegarde"

Ca m'irait puissance dix, ...... pourvu que ce soit compatible.

@ toute.

David

par exemple..

mettre en entête du module

Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long

Ton code devient..

    Nom_Fichier = "C:\Pointage\Mon pointage vierge" & ".xlsm"
    'Une API pas fort connue, si le path existe pas, le crée
    MakeSureDirectoryPathExists Nom_Fichier
    ActiveWorkbook.SaveAs Nom_Fichier, xlOpenXMLWorkbookMacroEnabled

    MsgBox "Une copie de sauvegarde vient d'être faite dans cet état sur C:\Pointage ", , "Sauvegarde"

A+

Mais t'es un fou toi (dans le bon sens de terme j'entends!) , mais un sacré allié

J'essaye ça demain et t'informe ; trop pressé

Merci t'es sympa.

Bonne soirée.

à demain

Hello every body

Me voici de retour au bureau et j'ai bien sur voulu tester, mais sans résultat

Module1 :

Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Lon

    Nom_Fichier = "C:\Pointage\Mon pointage vierge" & ".xlsm"
     'Une API pas fort connue, si le path existe pas, le crée
      MakeSureDirectoryPathExists Nom_Fichier
    ActiveWorkbook.SaveAs Nom_Fichier, xlOpenXMLWorkbookMacroEnabled

    MsgBox "Une copie de sauvegarde vient d'être faite dans cet état sur C:\Pointage ", , "Sauvegarde"

End Sub

Message d'erreur :

Erreur de compilation :

Instruction incorrecte à l'extérieur d'une procédure.

Peut être un truc à cocher dans la bibliothèque ?

On se tient au jus.

Bonne journée.

David

Ci-joint le fichier que j'ai créé pour le test.

Re !

Je pense avoir trouvé plus simple ; qu'en dis-tu s'il te plait ?

Sub Macro3()

Dim Nom_Dossier As String
'-------------------------------------------------------------------------------------------------------
Nom_Dossier = "C:\Mes Pointages\"
If Dir(Nom_Dossier, 16) = "" Then MkDir Nom_Dossier
ActiveWorkbook.SaveAs Nom_Dossier & "Pointage Vierge de" & " " & Range("Données!B7") & " " & Range("Données!B8"), xlOpenXMLWorkbookMacroEnabled

MsgBox "Une copie de sauvegarde vient d'être faite dans cet état dans ce répertoire C:\Mes Pointages", , "Sauvegarde"
'-------------------------------------------------------------------------------------------------------
End Sub

@ toute...

Je confirme, CA TOURNE sur Seven sans être administrateur ........ YES

........ et bien sur sur XP !!!

Un grand MERCI à mon fidèle compagnon Lermine qui m'a bien aiguillé sur ce coup, et il me semble que ce n'est pas la première fois

Une dernière question ; Que veut dire le 16 de cette ligne s'il te plait ?

If Dir(Nom_Dossier, 16) = "" Then MkDir Nom_Dossier

Je cloture donc ce post, mais lirais les critiques s'il y en a.

Ci-joint mon fichier pour ceux que cela intéressent.

@ très vite pour de nouvelles aventure sur EXCEL PRATIQUE.

David

Re,

Le 16 veux dire que l'ont sélectionne un répertoire.

@ dasaquit -> Plus simple ?, si ont veux..

Essaye donc avec

Nom_Dossier = "C:\Mes Pointages\Jacques\"
If Dir(Nom_Dossier, 16) = "" Then MkDir Nom_Dossier

Cela nécessite aussi de tester en deux ou trois étapes, et ensuite seulement d'ajouter le nom.

Au contraire, avec l'API tout est fait d'un coup

Test si le/les répertoire(s) existe sinon crée tout le chemin.

Finalement c'est quoi le plus pratique ?

A+

EDIT : je n'avais pas vu ton dernier message.

Dans le classeur que tu poste, ton code n'est pas bon

La déclaration de l'API doit être en haut du module. J'ai pourtant bien séparer les deux dans mon exemple.

Bref..

Option Explicit
Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Lon

Sub FaireCopie2()
    Nom_Fichier = "C:\Pointage\Mon pointage vierge" & ".xlsm"
     'Une API pas fort connue, si le path existe pas, le crée
      MakeSureDirectoryPathExists Nom_Fichier
    ActiveWorkbook.SaveAs Nom_Fichier, xlOpenXMLWorkbookMacroEnabled

    MsgBox "Une copie de sauvegarde vient d'être faite dans cet état sur C:\Pointage ", , "Sauvegarde"

End Sub

Tu as encore raison sur toute la ligne

En fait il manquait le "g" à "Long" en bout de ligne ce dont ça ne fonctionnait pas et "Dim Nom_Fichier As Sring" (remplacé au passage par "Dim Nom_Fichier$") dans la macro ; dont pas étonnant !

Ce qui donne donc :

Option Explicit
Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long

Sub FaireCopie2()
Dim Nom_Fichier$

    Nom_Fichier = "C:\Pointage\Pointage vierge" & " " & Range("Données!A1") & " " & Range("Données!A2") & ".xlsm"
       MakeSureDirectoryPathExists Nom_Fichier
    ActiveWorkbook.SaveAs Nom_Fichier, xlOpenXMLWorkbookMacroEnabled

    MsgBox "Une copie de sauvegarde vient d'être faite dans cet état sur C:\Pointage ", , "Sauvegarde"

End Sub

Données A1 = Prénom

Données A2 = Nom

Ci-joint le fichier fonctionnant façon Lermite.

C'est OK cette fois ?

Un grand merci.....

Pour info..

Dim Nom_Fichier$

Bien que cette syntaxe soit encore d'actualité c'est une façon obsolète de déclaration de variable et risque un jour ou l'autre de ne plus être valide.

La syntaxe conforme actuellement est..

Dim Nom_Fichier as String

Et je te conseil de l'employer.

De plus elle est beaucoup plus "parlante"

Je te conseil aussi de mettre dans les options.. (faut chercher un peu) Déclaration de variable obligatoire.

Ça évite beaucoup de "tracasseries"

A+

Bon OK j'voulais faire l'intéressant et c'est loupé

Dim Nom_Fichier as string

Tel sera ma muse.

Sinon ..... it's OK ?

Par contre faut que tu m'expliques :

Je te conseil aussi de mettre dans les options.. (faut chercher un peu) Déclaration de variable obligatoire.

Ça évite beaucoup de "tracasseries"

out m'intéresse !

Argumentes

@ toute...

Salut !

Bon je n'ai pas bien cherché longtemps et ai trouvé et coché "déclaration de variable obligatoire".

D'ailleurs tout comme on va cocher dans "outils" / "Référence" / "Microsoft Office 14 Object Library" afin de pouvoir lancer une macro d'envoi de mail ; est ce que ça se fait en dur sur l'application en générale ou uniquelent sur le fichier où on a coché s'il te plait ?

Merci.

Bonne journée.

David

Re,

Les références que l'ont à cocher n'ont de portée que pour le classeur en cour.

A+

Salut Lermite c'est bien ce que je pensais

Puis je me permettre de te solliciter de nouveau ce qui m'éviterait d'ouvrir un autre post ???

Voici la fin de ma procédure d'envoi de mail en Pdf de mon onglet actif :

Kill ActiveWorkbook.Path & "\" & "Pointage hebdo " & Range("Données!B7") & " " & Range("Données!B8") & "." & "Pdf"
'---------------------------------------------------------
    ObjOutlook.Quit
    Set oBjMail = Nothing
    Set ObjOutlook = Nothing
'---------------------------------------------------------
    ActiveWorkbook.Save
    'ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    MsgBox "Votre pointage a été envoyé." & vbNewLine & Chr(13) & "A bientôt !"
    Application.Quit

End Sub

Comme tu peux le constater j'ai neutralisé la ligne d'impression car des utilisateurs veulent imprimer avant de fermer, d'autres non (ils sont pénibles ; un peu comme moi!)

D'ou ma question :

Après la ligne "Active workbook.Save" est il possible de rajouter une condition par rapport à la cellule [A1] pour l'impression s'il te plait ?

En gros si [A1] =("OUI") on imprime et on ferme et si [A1] =("NON") on ferme direct !

Possible ou pas possible à ton avis ?

Ensuite, promis, je te laisse tranquille

Merci.

@ toute...

Beh oui.. c'est possible mais qui va mettre OUI/NON dans la cellule A1 ? et quel feuille, sinon suffit de mettre une condition,

'---------------------------------------------------------
   ActiveWorkbook.Save
    If sheets("Feuil1").[A1] = "OUI" then
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    End if
   MsgBox "Votre pointage a été envoyé." & vbNewLine & Chr(13) & "A bientôt !"
    Application.Quit

EDIT:

"déclaration de variable obligatoire".

Est d'application sur tout les classeurs

A+

Tu es super, je te remercie sincèrement, je suis maintenant au top, et grâce à toi

Merci également pour la deuxième info.

@ bienôt j'espère.

Bonne journée.

David

En fait ça ne foctionne pas.

Oui ou non, ça se déroule sans imprimer

Ci-joint un fichier que j'ai simplifié pour l'essai.

@ toute

David

Tu dis

En gros si [A1] =("OUI") on imprime et on ferme et si [A1] =("NON") on ferme direct !

Mais tu met OUI en A7

Un peu d'attention Svp

J'ai fait ça ??? quelle gros naze je suis

Ou alors c'est la saturation v!!!

Merci, et excuses.

@ toute.....

Rechercher des sujets similaires à "nom utilisateur chemin sauvegarde"