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 :

Sauver classeur "avec" codes des boutons écrits dans les feuilles


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Sauver classeur "avec" codes des boutons écrits dans les feuilles
    Bonjour,

    J'aimerais que ma macro génère un fichier avec des feuilles et des boutons qui permettent de naviguer entre ces feuilles, puis que tout cela soit enregistré avec les codes des boutons écrits dans chaque code de feuille.

    Pour créer le classeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub CreerClasseur()
        Workbooks.Add
        Sheets("Sheet1").Select
        Sheets("Sheet1").Name = "Menu"
        ...
        ...
     
        MyFile = "F:\Mon_fichier.xlsm"
        ActiveWorkbook.SaveAs Filename:= _
            MyFile, _
            FileFormat:=52, Password:="", WriteResPassword:="", _
            ReadOnlyRecommended:=False, CreateBackup:=False
     
    End Sub
    Ensuite le code crée les boutons.
    A la fin de la macro, le fichier est enregistré :

    Une fois la macro arrivée à la fin, le fichier généré reste ouvert et fonctionne parfaitement.
    Le menu permet d'aller directement à une feuille et le bouton présent sur cette feuille permet de revenir au menu.

    (Code d'un bouton présent dans le code de la feuille menu)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub CommandButton2_Click()
    Sheets("........").Select
    End Sub
    (Code d'un bouton présent dans le code de la feuille précédente)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub CommandButton1_Click()
    Sheets("Menu").Select
    End Sub
    Mais une fois sorti du classeur, si je rouvre le fichier, tous les codes des boutons ont disparu. Ils ne sont donc plus fonctionnels.

    En revanche, si à la fin de la macro, j'enregistre encore manuellement le fichier via le menu d'Excel, et qu'ensuite je sors du fichier, alors si je le rouvre, il fonctionnera encore parfaitement.

    Où est le problème ???
    Je n'ai rien trouvé sur internet pendant 2H.

    J'aimerais que la macro sauvegarde le fichier avec les codes présents dans les feuilles...

    Merci par avance pour votre aide.
    Cordialement,

    Christopher

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    avec l'enregistreur (sous excel 2007)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MyFile = "F:\Mon_fichier.xlsm"
    ActiveWorkbook.SaveAs Filename:=MyFile, FileFormat:= _
       xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
    Mais as-tu déclaré "MyFile" ?
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Nouveau Candidat au Club
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci pour la réponse.

    Normalement, le format 52 correspond à xlOpenXMLWorkbookMacroEnabled.

    Quant à la définition de la variable, je ne l'ai pas fait.
    Mais je comprends pas pourquoi cela poserait un souci. Le fichier est bien sauvegardé sous le nom de fichier indiqué.

    Simplement, les codes des boutons cliquables ne sont pas sauvegardés.

    Une idée ?

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Vérifie si ton fichier est bien dans "F" comme tu n'as pas déclaré ta variable (ce qui est fort déconseillé), normalement pour plus de sécurité et moins de surprises
    en haut de module "Option Explicit" qui nous oblige à déclarer touts les variables, dans ton cas
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Nouveau Candidat au Club
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Je n'ai pas le fichier sous la main, mais au bureau.
    Je ferai la déclaration de variable dès lundi (+ Option Explicit)

    En revanche, le fichier est bien sauvé à la bonne adresse, qui est bien même plus longue que cela (serveur réseau) :
    "F:\....\.....\Mon_fichier.xlsm"

    Si tu as une autre suggestion, je suis preneur.
    Car je ne sais vraiment pas d'où l'erreur peut provenir.

    Pour info, j'utilise Excel 2007.

  6. #6
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Pour le moment, je n'ai aucune autre idée mais je suivrai le sujet, peut-être apporteras-tu plus de précisions, style : en quel mode de sécurité tu te trouves pour accepter les macros ? ou donneras-tu un peu plus de code pour voir si ça peut venir d'autre chose.....

    Bonne nuit
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  7. #7
    Nouveau Candidat au Club
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Clairement, le fichier est bien sauvegardé au bon endroit.
    Mais toujours sans les codes des CommandButtons...

    Voici le code qui crée par exemple un bouton retour au menu sur chaque feuille :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    Sub MettreBoutonRetourMenu(desk As Variant)
     
        Dim X As Byte
        Dim i, BU_number As Long
        Dim Code As String
        Dim NextLine As String
        Dim oOLE As OLEObject
     
        Windows("DIRECTORY_auto.xlsm").Activate
        Sheets(desk).Select
        Range("A1").Select
        Rows(1).Select
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
     
        ecartGauche = 20
        ecartHaut = 7
     
        'Workbooks.Add 'creer classeur
        Set oOLE = ActiveWorkbook.ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
            Link:=False, DisplayAsIcon:=False, Left:=ecartGauche, Top:=ecartHaut, Width:=120, Height:=30)
     
        'Left position bouton par rapport au bord gauche de la feuille
        'Top position bouton par rapport au haut de la feuille
        'Width largeur bouton
        'Height hauteur bouton
     
        With oOLE
            .Object.BackColor = &H0&
            .Object.ForeColor = &HFFFFFF
        End With
     
        X = ActiveSheet.OLEObjects.Count 'compter le nombre de boutons existants dans la feuille
     
        'option nommer l'objet
        oOLE.Name = "CommandButton" & X
        'texte sur le bouton
        ActiveSheet.OLEObjects(X).Object.Caption = "Menu"
        Code = "Sub CommandButton" & X & "_Click()" & vbCrLf
        Code = Code & "Sheets(""Menu"").select" & vbCrLf
        Code = Code & "End Sub"
     
        With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
            NextLine = .CountOfLines + 1
            .insertlines NextLine, Code
        End With
     
        Range("A1").Select
     
    End Sub
    J'ai même rajouté un code tout à la fin du module, pour être sûr de bien refaire une sauvegarde sous un autre nom de fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Windows("DIRECTORY_auto.xlsm").Activate
        ActiveWorkbook.Save
     
        MyFile2 = "F:\DIRECTORY_auto2.xlsm"
        ActiveWorkbook.SaveAs Filename:= _
            MyFile2, _
            FileFormat:=xlOpenXMLWorkbookMacroEnabled, Password:="", WriteResPassword:="", _
            ReadOnlyRecommended:=False, CreateBackup:=False
    Le code d'une feuille est toujours 'exactement' le même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub CommandButton1_Click()
    Sheets("Menu").Select
    End Sub
    Le problème, c'est que si je sors du fichier et rentre à nouveau dedans, les boutons ne fonctionnent plus. Tous leurs codes présents dans les codes des feuilles ont disparu.

    En revanche, si à la fin de la macro, je sauvegarde encore manuellement (un clic dans Excel) et qu'en suite je sors et rentre à nouveau dedans, les boutons fonctionnent.

    Merci par avance !
    Bonne journée.

    Christopher

  8. #8
    Nouveau Candidat au Club
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Solution fonctionnelle :

    Dans la procédure principale de la macro, tout à la fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Windows("DIRECTORY_auto.xlsm").Activate
        ActiveWorkbook.Save
     
        Application.OnTime Now + TimeValue("00:00:02"), "saveAfterDelay"
        Application.OnTime Now + TimeValue("00:00:05"), "closeAfterDelay"
    Puis créer 2 autres procédures :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub saveAfterDelay()
        ActiveWorkbook.Save
    End Sub
     
    Sub closeAfterDelay()
        ActiveWorkbook.Close
    End Sub
    Merci tout de même pour ton conseil sur la définition des variables "casefayere"

    Cordialement,

    Christopher

+ 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