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 :

Ajouter du code à un classeur via le VBA ?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 199
    Par défaut Ajouter du code à un classeur via le VBA ?
    Bonjour,

    J'ai une macro qui créé un classeur (via Workbooks.add) et protège ses feuilles.
    Or lorsque les feuilles sont protégées, on ne peut pas grouper/dégrouper les lignes. J'ai corrigé cela en utilisant le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ws.EnableOutlining = True
    ws.Protect Contents:=True, UserInterfaceOnly:=True
    Ce code permet d'avoir une feuille protégée, tout en laissant à l'utilisateur la possibilité de cacher/décacher les lignes.
    Mais quand on ferme et ré-ouvre le fichier, ces propriétés passent à False (car Excel fonctionne ainsi d'après ce que j'ai compris) et l'utilisateur ne peut plus cacher/décacher les lignes.

    Comment faire passer cette propriété à True par défaut ? Ou sinon est-il possible en VBA d'ajouter du code dans un fichier créé ?

    Merci pour votre aide.

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    mets là dans l'évènement du classeur Workbook_Open()

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    salut,
    pour acceder au code VBA d'un fichier, tu peux utiliser un code VBA du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim oExcel as Excel.Application
    'parcourir le contenu VBA de chaque module VBA
    For i = 1 To oExcel.VBE.VBProjects(1).VBComponents.Count
            With oExcel.VBE.VBProjects(1).VBComponents.item(i).CodeModule
            ' pour le remplacement d'une ligne entière
                For k = 1 To .CountOfLines
                    Cible = .Lines(k, 1)
    avec Cible qui contient ici le contenu du code VBA

    En utilisant la fonction appropriee, tu peux ecrire dans le module en VBA via VBA
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 199
    Par défaut
    Ah c'est exactement ce que je cherchais. Il ne reste plus qu'à adapter ce code à ma macro.

    Merci beaucoup.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Sinon une autre possibilité, peut-être plus simple mais qui ne fonctionne (je pense) qu'avec le code attaché à une feuille (et donc pas au classeur ni à un module), serait d'avoir dans le fichier contenant la macro une feuille identique à celle qu'on veut dans la cible, et de l'y faire copier par VBA. Dans ce cas le code attaché à la feuille (worksheet) suit.

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 199
    Par défaut
    Merci pour ta réponse.
    J'avais pensé à quelque chose de similaire : au lieu de faire un workbooks.add, j'ouvre un fichier vide contenant l'event que je veux, comme ça les fichiers créés auraient toujours ce code. Mais pour l'utilisateur ça fait un fichier source en + et on m'a dit que ce n'est pas pratique.

    Je rencontre un problème sinon avec ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Sub test()
     
        Dim i As Long, k As Long
     
        'parcourir le contenu VBA de chaque module VBA
        For i = 1 To Application.VBE.VBProjects(1).VBComponents.Count
            With Application.VBE.VBProjects(1).VBComponents.Item(i)
                Debug.Print .CodeModule.CountOfLines & " lignes dans le module " & .Name
            End With
        Next i
     
    End Sub
    Un message d'erreur me dit "Can't perform operation since the project is protected."
    Pourtant dans VBAProject Properties, j'ai le Lock qui est décoché.

    D'où vient le problème selon vous ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/10/2014, 20h48
  2. [XL-2013] Modifier le code ajouter un client du classeur de PatrickToulon
    Par grisan29 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/07/2014, 06h28
  3. [E 03] Créer un classeur via VBA
    Par ogho4326 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/01/2009, 09h10
  4. Reference ajoutée par code VBA
    Par tAKAmAkA dans le forum Runtime
    Réponses: 3
    Dernier message: 07/06/2008, 00h59
  5. Fermer un classeur via VBA que si il est ouvert
    Par dimitrios dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/12/2006, 09h56

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