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 :

Chemin de sauvegarde et variable


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Points : 32
    Points
    32
    Par défaut Chemin de sauvegarde et variable
    Bonjour à tous,

    Je suis en train de créer une petite macro qui devrait me permettre d'automatiser la sauvegarde de document sous un nom de répertoire définie par l'utilisateur.
    J'explique mon raisonnement. Sur la feuille de calcul, l'utilisateur voit une bouton lui permettant de commencer à travailler.Quand il clique, cela ouvre un UserForm lui demandant le chemin de sauvegarde. Une fois rentré, le fichier est sauvegardé sous un nom définie par deux cellules.
    Ce que j'aimerais c'est crée une fonction qui me permettrais de conserver le chemin de sauvegarde rentré par l'utilisateur. Le problème est que je n'arrive pas à conserver la valeur du chemin de sauvegarde...
    Peut être cela est t'il plus parlant.

    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
    Public Function Saves()
     
        Dim way As String
        Dim ProjectName As String
        Dim ProjectNumber As String
     
            Range("B1").Select
                ProjectNumber = ActiveCell.Text
            Range("B2").Select
                ProjectName = ActiveCell.Text
        If ProjectName = "0" Then
            MsgBox ("Enter the Project Name in Report MR Sheet")
            Exit Function
        End If
     
        If ProjectNumber = "0" Then
            MsgBox ("Enter the Project Number in Report MR Sheet")
            Exit Function
        End If
     
        way = Debut.SaveWay.Value
        ActiveWorkbook.SaveAs Filename:=way & ProjectName & "-" & ProjectNumber & ".xls"
     
    End Function
    Merci de votre aide.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Salut,

    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 Saves()
     
        Dim way As String
        Dim ProjectName As String
        Dim ProjectNumber As String
     
        ProjectNumber = Range("B1").Value
        ProjectName = Range("B2").Value
     
        If ProjectName = "0" Then
            MsgBox ("Enter the Project Name in Report MR Sheet")
            Exit Sub
        End If
     
        If ProjectNumber = "0" Then
            MsgBox ("Enter the Project Number in Report MR Sheet")
            Exit Sub
        End If
     
        way = "C:\Documents and Settings\andre.dorian\Bureau\"
        ActiveWorkbook.SaveAs Filename:=way & ProjectName & "-" & ProjectNumber & ".xls"
     
    End Sub
    Il faut utiliser une procédure ici et non une fonction car tu n'as aucune valeur "retournée".

    De plus, enlève les .Select, ils n'apportent rien de bon. .Value est plus approprié ici que .Text aussi.

    Remplace ProjectName = "0" et ProjectNumber = "0" par ProjectName = "" et ProjectNumber = "" si jamais tu veux que les MsgBox s'affichent si les cellules sont vides. Dans ton cas, elles ne s'afficheront que si 0 est présent dans ces cellules. Dans le cas où elles sont vides, ça ne va pas le faire

    J'ai mis ton "way" en dur mais tu peux le changer comme tu le souhaites : c'était juste pour les tests.

    Je viens de tester chez moi, cela fonctionne parfaitement.

    Ensuite, si tu veux conserver ces chemins, tu peux les mettre dans une variable ou même dans un tableau afin d'effacer les cellules par la suite mais c'est à toi de voir pour cela vu que je n'ai aps très bien compris ça :

    Ce que j'aimerais c'est crée une fonction qui me permettrais de conserver le chemin de sauvegarde rentré par l'utilisateur. Le problème est que je n'arrive pas à conserver la valeur du chemin de sauvegarde...
    Au plaisir,
    DeaD

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonjour,
    Je ne sais pas si j'ai bien compris mais il me semble que tu veux mémoriser le chemin dans le classeur de base ? si oui,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        way = "C:\Documents and Settings\andre.dorian\Bureau\" & ProjectName & "-" & ProjectNumber & ".xls"
        'supposons que tu veux mémoriser dans la feuille "Rapport", colonne A
        Sheets("Rapport").Range("A" & Range("A65536").End(xlUp).Row + 1) = way
        ActiveWorkbook.Save
        'Et pour l'enlever de la copie,
        Sheets("Rapport").Range("A" & Range("A65536").End(xlUp).Row) = ""
        ActiveWorkbook.SaveAs Filename:=way
    Probablement que tu devras vider toute la colonne A pour la copie.
    A+

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Points : 32
    Points
    32
    Par défaut
    Salut,

    Merci pour la réponse, mais dans le code de DeaD78 ne répond pas à toutes mes attentes (et exigent en plus ...) ou alors c'est l'histoire de d'avoir mis le chemin de sauvegarde en dur.

    Voila, mon userform s'ouvre et demande le chemin de sauvegarde. Je veux que la valeur entrée devienne ma valeur "way". Ensuite, j'ai choisis de faire une fonction parce que j'ai une dizaine de feuille de calcul et je pensais que c'été plus simple....

  5. #5
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Bonjour,
    Petit cour d'algorithmique
    Une fonction renvoie OBLIGATOIREMENT une valeur.

    Ta fonction ne renvoie AUCUNE valeur. Tu as peut être fait un mauvais choix cela arrive. Dans ce genre de cas on fait une sous-procedure (subroutine) en vba il suffit de remplacer Function par sub. Comme te l'a gentillement fait Dead

    Maintenant essaye d'être précis

    La valeur de ta variable way tu veux l'utiliser dans d'autre macro? uniquement dans celle là? Comment l'utilisateur la rentre? S'ais-tu ce qu'est une variable public (parfois appelé global)? Est-ce que cela pourrais te convenir?
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  6. #6
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Bonjour,

    Il existe plusieurs solutions pour sauvegarder, dans une feuille cachée, dans une etiquette, un exemple dans le tag de l'userform :

    Même après avoir fermé le classeur tu pourras retrouver ta valeur


  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Points : 32
    Points
    32
    Par défaut
    Bonjour,

    Merci pour la précision Krovax, mais je pensais justement renvoyé une valeur (le chemin pour la sauvegarde), à cette variable way, que j'aimerais l'utiliser dans d'autres macro.

    Je vais essayer d'être précis :

    L'utilisateur doit entrer le chemin de sauvegarde dans une zone de texte de mon userform.
    Je viens de découvrir (aujourd'hui pour être précis) les variables globales. Je ne vois pas comment les utiliser. Je sais qu'on peut les appeler dans toutes les macro (si le peu d'info que j'ai compris est correcte...). Alors sachant que j'aimerais que ma variable "way" soit reprise dans d'autres macro, je pense que c'est ce qu'il me faut...

    Merci pour votre aide

  8. #8
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    dans ce cas en tête d'un module standard (et non dans le code d'un userform ou d'une feuille) tu écris
    et tu ne la déclare plus nul par tu te contente de l'utiliser
    et paf tu as gagné
    tiens essaye ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub ChoixRepertoire(chemin As String)
    Dim objShell As Object, objFolder As Object, oFolderItem As Object
     
     
     Set objShell = CreateObject("Shell.Application")
     Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)
     
     
     Set oFolderItem = objFolder.Items.Item
     way= oFolderItem.Path
     
     
    End Sub
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Points : 32
    Points
    32
    Par défaut
    Merci beaucoup pour votre aide. C'est parfait et c'est même mieux que ce que j'imaginais. Content de pouvoir mettre ce topic en résolu

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/06/2006, 17h50
  2. [C++.NET] Idee pour sauvegarde de variables
    Par raboin dans le forum VC++ .NET
    Réponses: 5
    Dernier message: 02/05/2006, 16h03
  3. [Session]Sauvegarde des variables de sessions en base
    Par sheura dans le forum Servlets/JSP
    Réponses: 15
    Dernier message: 03/01/2006, 10h19
  4. Réponses: 3
    Dernier message: 11/11/2005, 12h59
  5. Réponses: 5
    Dernier message: 21/10/2005, 11h48

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