IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

compromis entre fonction "saveas" et "save" [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 71
    Points : 31
    Points
    31
    Par défaut compromis entre fonction "saveas" et "save"
    Bonjour a tous,

    Je viens vers vous afin de solliciter vos avis.

    Mon soucis est que je souhaite faire une "sauvegarde sous" que partielle...bizarre, vous avez dis bizarre!

    Premièrement, j'ai effectué nombre de recherche aussi bien sur le net que des tests(j'y suis depuis 16h00, je commence donc à soufler...).

    Je vous explique, je souhaite sauvegarder mon classeur dans un dossier specifique (save as donc) mais sans avoir à renoter le nom de ce classeur (save donc).

    Voici mon programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    Sub Workbook_Open()
    Site = InputBox("Site : ")
    Range("B3").Value = Site
     
    Adresse = InputBox("Adresse : ")
    Range("C4").Value = Adresse
     
    Niveau = InputBox("Niveau : ")
    Range("C6").Value = Niveau
     
    Controleur = InputBox("Contrôleur : ")
    Range("C7").Value = Controleur
    MsgBox "Respetez le format de Date sous peine de creer une erreur(pas de /)", vbInformation, "Notification"
    'MsgBox "Respetez le format de Date sous peine de creer une erreur (pas de " / ") !", vbCritical, "Notification"
     
    DateDeControle = InputBox("Date(jj.mm.aaaa): ")
    Range("J7").Value = DateDeControle
     
    On Error Resume Next 'modifie le nom du fichier en fonction des infos
    ActiveWorkbook.SaveAs Filename:="Controle_Preliminaire" & [B3].Value & "_" & [C6].Value & "_" & [J7].Value & ".xls"
     
    End Sub
    Dans le dossier "C:\Users\studio16\Desktop\Contrôle\Contrôle Préliminaire\Fichier De Base" j'execute mon "fichier excel de base";

    Celui-ci se lance à l'ouverture du classeur et demande à l'utilisateur de renseigner des champs (site"B3", niveau"C6",date"J7",etc...).

    Une fois cette première routine effectuée, en fonction des champs remplis, cela génère le nom du classeur (ça permet d'organiser les tableaux au fur et a mesure de leur création).

    Mon problème est que si j'utilise la fonction"save" alors je garde bien le nom du classeur généré a son ouverture, mais la sauvegarde s'effectue dans "mes documents" or je souhaite que la sauvegarde est lieu dans un dossier spécifique"C:\Users\studio16\Desktop\Contrôle\Contrôle Préliminaire\Contrôles".
    Donc l'utilisation de"save as" semble obligatoire...
    Ce que j'aurai voulu savoir ' c'est si il est possible de faire un "save as" en gardant le nom du classeur actif.

    Je modifié ce code (trouvé sur le net):création boite de dialogue utilisateur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Sub enregistrer()
        Dim n As Variant, newName As String, fs As Object
    ' par defaut, sauvegarder dans le repertoire du classeur
        n = ActiveWorkbook.Path & Application.PathSeparator & nomFichier
    ' ouvre la boite de dialogue GetSaveAsFilename
        n = Application.GetSaveAsFilename(n, "tous les fichiers,*.*", _
            1, "Enregistrer un fichier")
        If n = False Then Exit Sub   ' l'utilisateur a fait "Annuler"
    ' le bloc ci-dessous gère l'écrasement de fichier
        Set fs = CreateObject("Scripting.FileSystemObject")
        If fs.fileexists(n) Then
            fs.getfile (n)
            newName = fs.getfilename(n)
            If nomFichier <> newName Then
                If MsgBox("Le fichier """ & newName & _
                   """ existe déjà. Voulez-vous le remplacer ?", _
                   vbYesNo + vbQuestion, _
                   "Remplacer un fichier existant") = vbNo Then Exit Sub
            End If
        End If
    '
        nomFichier = fs.getfilename(n)
        Open n For Output As #1
    '.
    '.<votre code d'ecriture du fichier ici>
    '.
        Close
    End Sub
    Mais cela ne me convient pas car trop compliqué (je ne comprends pas la moitié), et surtout je prefererai l'utilisation d'un "save" qui sauvegarderai automatique dans le fichier spécifique"C:\Users\studio16\Desktop\Contrôle\Contrôle Préliminaire\Contrôles".

    Voila donc pourquoi je sollicite votre aide...(encore une fois).

    Merci d'avance pour vos commentaires.

    Cordialement

    Manu

  2. #2
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    bonjour,

    Avec SaveAs, tu utilise le chemin que tu veux en mettant les variables que tu veux comme ici :http://www.developpez.net/forums/d96...-fichier-date/

    cordialement,

    Didier

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 71
    Points : 31
    Points
    31
    Par défaut
    Bonsoir Ormonth,

    Tout d'abord merci pour ton aide et lien.

    Ensuite,
    Au risque de passer pour un mec qui comprend rien, je reviens vers toi pour plusieurs raison...
    Ca fait maintenant 1h30 (bien tassé ducoup!) que j'essais de comprendre et faire fonctionner ce code...
    Sans résultat.......toujours des erreurs...

    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub savefichier ()
     
    Dim strExtractName As String
     
    strExtractName = gvStrChemS12 & "Controle_Preliminaire" & "_" & [B3].Value & "_" & [C6].Value & "_" & [J7].Value & ".xls"
    Workbooks(wkbPass).SaveAs Filename:=strExtractName
     
    End Sub
    Le but pour moi est donc de "figer" l'adresse" et "le nom".
    En ce qui concerne le nom, cela doit etre bon.
    C'est plutot au niveau de l'adresse où le pas blesse...

    J'ai donc besoin de quelques précision:
    -je pense cette expression "gvStrChemS12" doit représenter l'adresse de destination, mais donc comment déclarer cette expression?
    Car ce n'est pas un String, de plus est-ce qu'un string peut prendre en compte une adresse...?
    -Enfin, que signifie "(wkbPass)" et à quoi sert-il ?
    Permet-il à la fonction "Workbooks.SaveAs Filename" de prendre en compte une adresse statique via "gvStrChemS12"?

    Je vous accorde que là, j'ai beau me torturer l'esprit, je suis perdu...

    Pardon, si ces questions semblent "basique" ou "evidente" pour certains mais pour moi c'est tout autres chose...

    Merci d'avance.

    Cordialement

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 71
    Points : 31
    Points
    31
    Par défaut
    Re,
    J'ai essayé ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Sub Workbook_Open()
     
    Site = InputBox("Site : ")
    Range("B3").Value = Site
     
    Adresse = InputBox("Adresse : ")
    Range("C4").Value = Adresse
     
    Niveau = InputBox("Niveau : ")
    Range("C6").Value = Niveau
     
    Controleur = InputBox("Contrôleur : ")
    Range("C7").Value = Controleur
     
    MsgBox "Respetez le format de Date sous peine de creer une erreur(pas de /)", vbInformation, "Notification"
    'MsgBox "Respetez le format de Date sous peine de creer une erreur (pas de " / ") !", vbCritical, "Notification":--> pas car des guillements entre parenthese
     
    DateDeControle = InputBox("Date(jj.mm.aaaa): ")
    Range("J7").Value = DateDeControle
     
    Dim strExtractName As String
     
    strExtractName = "Controle_Preliminaire" & "_" & [B3].Value & "_" & [C6].Value & "_" & [J7].Value & ".xls"
    ChDir "C:\"
    ActiveWorkbook.SaveAs Filename:="Users\studio16\Desktop\Contrôle\Contrôle Préliminaire\Contrôles", _
    FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
    ReadOnlyRecommended:=False, CreateBackup:=False & strExtractName
     
    End Sub
    Sans resultat...

    Puis ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Sub Workbook_Open()
     
    Site = InputBox("Site : ")
    Range("B3").Value = Site
     
    Adresse = InputBox("Adresse : ")
    Range("C4").Value = Adresse
     
    Niveau = InputBox("Niveau : ")
    Range("C6").Value = Niveau
     
    Controleur = InputBox("Contrôleur : ")
    Range("C7").Value = Controleur
     
    MsgBox "Respetez le format de Date sous peine de creer une erreur(pas de /)", vbInformation, "Notification"
    'MsgBox "Respetez le format de Date sous peine de creer une erreur (pas de " / ") !", vbCritical, "Notification":--> pas car des guillements entre parenthese
     
    DateDeControle = InputBox("Date(jj.mm.aaaa): ")
    Range("J7").Value = DateDeControle
     
    ChDir "C:\"
    ActiveWorkbook.SaveAs Filename:="Users\studio16\Desktop\Contrôle\Contrôle Préliminaire\Contrôles", _
    FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
    ReadOnlyRecommended:=False, CreateBackup:=False & "Controle_Preliminaire" & "_" & [B3].Value & "_" & [C6].Value & "_" & [J7].Value & ".xls"
     
     
    End Sub
    Toujours une erreur..., JE commence à déspérer du coup....

    Un avis?

    Cordialement

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 71
    Points : 31
    Points
    31
    Par défaut
    Re,

    Ca y est j'ai trouvé la solution !!!
    16h00-->23h00=7h00 --> record du monde pour faire faonctionner une macro !!!!

    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub enregistrer()
     
    Dim strExtractName As String
     
    strExtractName = "C:\Users\studio16\Desktop\Contrôle\Contrôle Préliminaire\Contrôles\" & "Controle_Preliminaire" & "_" & [B3].Value & "_" & [C6].Value & "_" & [J7].Value & ".xls"
     
    ActiveWorkbook.SaveAs Filename:=strExtractName, ReadOnlyRecommended:=True
     
    End Sub
    En fait, Comme ma fonction avit lieu dès l'ouverture du fichier, les modifications que j'apportais n'était pas prie en compte (2h00 pour s'en rendre compte...

    Bref merci encore pour le lien. :-)

    Cordialement

    sujet resolu !!!!! (enfin !)

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo