Save as dans une macro MS Excel

Bonjour,

J'ai une question qui peut paraitre un peu stupide, je suis en train de creer une macro dans un fichier MS Excel qui va effectuer quelques commandes, la derniere de ces commandes est de faire un save as et d'aller enregistrer ce fichier dans un répertoire donné. Jusque la tout va bien, par contre j'aimerais que le fichier "s'auto-nomme" et que l'utilisateur ne soit pas obligé de nommer lui meme le fichier. La raison c'est qu'il sera plus facile de les classer par la suite

Les informations nécessaires pour le nom se trouve dans 3 cellules différentes dans mon fichier excel. Il s'agit de la date, du # du client ainsi que son nom.

Est-ce possible de faire ca soit de auto-nommer un fichier en fonction d'infos déja disponibles dans un fichier?

Merci de votre réponse
Caillou
Configuration: Windows XP
Internet Explorer 6.0

1 réponse

  • Votes
  • Date
  • Date décroissante
  1. bonjour

    soit tes données pour le nom de fichier en A2, B2 et C2.
    Voici un petit bout de code qui devrait te convenir :
    Sub Enregistrer()
        Chemin = ActiveWorkbook.Path
        DateFich = Cells(2, 1).Value
        An = CStr(Year(DateFich))
        Mois = CStr(Month(DateFich))
        Jour = CStr(Day(DateFich))
        DateFich = An & "-" & Mois & "-" & Jour
        RefClient = CStr(Cells(2, 2).Value)
        NomClient = Cells(2, 3).Value
        
        ActiveWorkbook.SaveAs Filename:=Chemin & "\" & DateFich & "_" & _
            RefClient & "_" & NomClient & ".xls", FileFormat _
            :=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:= _
            False, CreateBackup:=False
    End Sub

    à plus
    1. Merci beaucoup ca fonctionne, par contre j'ai un léger probleme, le fichier s'enregistre automatiquement sur le lecteur C et je suis incapable de lui donner le chemin que je veux, voici la partie de code (incluant celle que tu m'a donné)
      ----------------------------------------------
      Sub test()

      ActiveWorkbook.ActiveSheet.Select
      ActiveWorkbook.ActiveSheet.Copy
      Calculate
      Cells.Select
      Selection.Copy
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
      :=False, Transpose:=False

      Chemin = ActiveWorkbook.Path
      DateFich = Cells(2, 1).Value
      An = CStr(Year(DateFich))
      Mois = CStr(Month(DateFich))
      Jour = CStr(Day(DateFich))
      DateFich = An & "-" & Mois & "-" & Jour
      RefClient = CStr(Cells(2, 2).Value)
      NomClient = Cells(2, 3).Value

      ChDir "C:\Documents and Settings\caillou\Mes documents\Discount Request Form"
      ActiveWorkbook.SaveAs Filename:=Chemin & "\" & DateFich & "_" & _
      RefClient & "_" & NomClient & ".xls" _
      , FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:= _
      False, CreateBackup:=False

      End Sub
      ----------------------------

      j'aimerais qu'il aille s'enregistrer sous ChDir "C:\Documents and Settings\caillou\Mes documents\Discount Request Form", aussi est-ce que le user caillou peut créer probleme lorsque j'enverai mon ficher contenant la macro a divers users car lorsqu'ils se serviront de la macro j'aimerais que le fichier aille s'enregistrer sous leur lecteur C dans le document Discount Request Form qu'ils auront créé préalablement

      Autre question, dans le code j,ai mis calculate car mon fichier aura des formules et ensuite il va faire son copie valeur, mais je veux m'assurer que le calcul sera fait avant de faire son copie valeur, le recalcul prend 5-10secondes, suis-je mieux de mettre un "wait" de quelques secondes et ensuite faire en sorte que la macro continue. Si oui est-ce que tu connais le code pour mettre ce "wait"

      Merci beaucoup!

      Caillou
    2. @Cailloubonjour

      remplace dans ton code :
      ChDir "C:\Documents and Settings\caillou\Mes documents\Discount Request Form" 
      ActiveWorkbook.SaveAs Filename:=Chemin & "\" & DateFich & "_" & _ ...
      

      par ceci :
      Chemin2 = "C:\Documents and Settings\caillou\Mes documents\Discount Request Form" 
      ActiveWorkbook.SaveAs Filename:=Chemin2 & "\" & DateFich & "_" & _ ...
      


      pour ta deuxième question, plutôt qu'un wait utilise : DoEvents

      à plus
    3. @LePierreConcernant le chemin ( je n,ai pas encore essyé le doevents) je dois faire quelque chose de pas bien car ca ne fonctionne pas, ca bogue au chemin2
      -----------------------------------------------------------
      ActiveWorkbook.ActiveSheet.Select
      ActiveWorkbook.ActiveSheet.Copy
      Calculate
      Cells.Select
      Selection.Copy
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
      :=False, Transpose:=False

      Chemin = ActiveWorkbook.Path
      DateFich = Cells(2, 1).Value
      An = CStr(Year(DateFich))
      Mois = CStr(Month(DateFich))
      Jour = CStr(Day(DateFich))
      DateFich = An & "-" & Mois & "-" & Jour
      RefClient = CStr(Cells(2, 2).Value)
      NomClient = Cells(2, 3).Value

      Chemin2 = "C:\Documents and Settings\caillou\Mes documents\Discount Request Form"
      ActiveWorkbook.SaveAs Filename:=Chemin2 & "\" & DateFich & "_" & _
      RefClient & "_" & NomClient & ".xls" _
      , FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:= _
      False, CreateBackup:=False

      -------------------

      encore une fois merci
      Caillou
    4. @Cailloubonjour
      Chemin2 = "C:\Documents and Settings\caillou\Mes documents\Discount Request Form" 
      
      es-tu certain du nom de tes répertoires inscrits dans la définition de "Chemin2" ?

      à plus