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 :

Macro complémentaire d'ajout/suppression d'une barre d'outils selon le fichier ouvert [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Macro complémentaire d'ajout/suppression d'une barre d'outils selon le fichier ouvert
    Bonjour à toutes et à tous,

    Débutant en VBA, je me permets de faire appel à votre aide concernant une macro complémentaire. Le but de cette macro est d'ajouter/supprimer une barre d'outils d'impression en fonction du fichier ouvert par l'utilisateur. Voici le code que j'ai ajouté à un module de mon .xla :

    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 Auto_Open()
        Dim barre_PnL As CommandBar
        Dim bouton_PnL As CommandBarControl
        Dim i As Integer
        Set barre_PnL = CommandBars.Add(Name:="Impression P&L")
        Set bouton_PnL = CommandBars("Impression P&L").Controls.Add(Type:=msoControlButton)
        barre_PnL.Enabled = False
        bouton_PnL.Style = msoButtonCaption
        bouton_PnL.OnAction = "Impression_PnL"
        bouton_PnL.Caption = "Impression P&&L"
        'L'erreur se produit à l'instruction suivante :
        For i = 1 To ActiveWorkbook.Sheets.Count
            If ActiveWorkbook.Sheets(i).Name = "P&L total" Then
                barre_PnL.Enabled = True
                barre_PnL.Visible = True
            End If
        Next
    End Sub
     
    Sub Auto_Close()
    On Error Resume Next
        CommandBars("Impression P&L").Delete
    End Sub
     
    Sub Impression_PnL()
        'Code...
    End Sub
    L'erreur levée est la suivante : "ActiveWorkbook.Sheet... = <Variable objet ou variable de bloc With non définie>". Je pense savoir pourquoi cela ne fonctionne pas, mais je ne trouve pas de solution. Pourriez-vous m'aider SVP ?

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Bonjour
    Puisque c'est une macro complémentaire, elle s'ouvre au lancement d'excel donc
    Elle exécute l'AutoOpen(), et elle est ActiveWorkbook

    Si je comprend bien l'idée, c'est que lorsque l'on ouvre un classeur, Excel affiche une barre d'outils si ce classeur contient certaines feuilles.
    C'est bien ça ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    C'est bien ça Frédéric ! Concernant l'ActiveWorkbook, j'avais émis la même hypothèse, mais après plusieurs essais je ne suis toujours pas arrivé à mes fins.

    Merci pour l'intérêt que tu portes à ce sujet !

    Julien.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Re
    J'ai trouvé un POST de bidou de décembre 2002 qui résoud ton problème
    Dans un module objet (thisworkbook) de ton classeur contenant les macros tu mets

    Code :

    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
    Option Explicit
     
    Public WithEvents App As Application
     
    Private Sub App_WorkbookOpen(ByVal Wb As Excel.Workbook)
     
        If instr(1,Wb.Name,".txt")>1 Then 
             'ici ton code de traitement
        End if
    End Sub
     
    Private Sub Workbook_Open()
     
        Set App = Application
     
    End Sub
    __________________
    Tu mets ça dans ThisWorkbook de ton XLA et c'est bon

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse ! Malheureusement, je n'arrive pas à faire fonctionner le code que tu m'as fourni. Pourrais-tu m'apporter plus de précisions quant à la partie de mon code que je dois mettre à la place de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If instr(1,Wb.Name,".txt")>1 Then
        'ici ton code de traitement
    End if
    Désolé, mais je ne suis vraiment pas à l'aise avec les macros...

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Re
    Je mettrais bien tout ce qui est dans l'auto_open, pour commencer.

  7. #7
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Re !

    C'est ce que j'ai essayé de faire, ce qui donne le code suivant :

    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
    Option Explicit
    Public WithEvents App As Application
     
    Private Sub App_WorkbookOpen(ByVal Wb As Excel.Workbook)
        Dim barre_PnL As CommandBar
        Dim bouton_PnL As CommandBarControl
        Dim i As Integer
        'L'erreur se produit maintenant à l'instruction suivante
        Set barre_PnL = CommandBars.Add(Name:="Impression P&L")
        Set bouton_PnL = CommandBars("Impression P&L").Controls.Add(Type:=msoControlButton)
        barre_PnL.Enabled = False
        bouton_PnL.Style = msoButtonCaption
        bouton_PnL.OnAction = "Impression_PnL"
        bouton_PnL.Caption = "Impression P&&L"
        For i = 1 To Wb.Sheets.Count
            If Wb.Sheets(i).Name = "P&L total" Then
                barre_PnL.Enabled = True
                barre_PnL.Visible = True
            End If
        Next
    End Sub
     
    Private Sub Workbook_Open()
        Set App = Application
    End Sub
    Mais une nouvelle erreur est levée : "Erreur d'exécution '91' : Variable objet ou variable de bloc With non définie". J'espère que tu pourras m'en dire plus sur cette erreur.

    Merci encore pour le temps consacré à ma demande !

  8. #8
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Bonjour
    J'ai fini par identifier le problème.
    Le message d'erreur vient du fait que la barre d'outils existe déjà (même si on ne la voit pas).

    On peut evisager 2 solutions
    - on créé la barre d'outils et on l'attache au classeur XLA, ensuite en fonction des classeurs on gère le visible oui/non
    - on modifie le code pour supprimer la barre avant de la créer;le pb : il fait ça à chaque ouverture de classeur,
    A mon avis, il faut changer le code pour que gestion de la barre ne se fasse que si l'on a la feuille qui va bien

  9. #9
    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,

    on modifie le code pour supprimer la barre avant de la créer
    N'existe-t-il pas un moyen de tester si la barre existe ou pas avant de la créer.

    Dans mes exemples, effectivement je supprime les barres avant de les créer.

  10. #10
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Re
    voila pour tester l'existance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim MaBar as CommandBar
    For Each MaBar in Application.Commandbars
       if MaBar.Name="Impression P&L" then
       ' elle existe
       end if
    next
    Je pense qu'il ne faudrait pas trop jouer avec le Enabled mais juste avec le Visible

  11. #11
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonjour à toutes et à tous,

    Un grand merci à vous deux pour votre aide précieuse, car j'ai enfin réussi à faire fonctionner cette macro, dont voici le code final pour ceux que ça peut aider (à utiliser dans ThisWorkbook d'une macro complémentaire) :

    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
    Option Explicit
    Public WithEvents App As Application
     
    Private Sub App_WorkbookOpen(ByVal Wb As Excel.Workbook)
        Dim barre_PnL As CommandBar
        Dim barre_test As CommandBar
        Dim bouton_PnL As CommandBarControl
        Dim i As Integer
        Dim j As Boolean
        j = False
        For Each barre_test In App.CommandBars
            If barre_test.Name = "Impression P&L" Then
                j = True
            End If
        Next
        If j = False Then
            Set barre_PnL = App.CommandBars.Add(Name:="Impression P&L")
            Set bouton_PnL = App.CommandBars("Impression P&L").Controls.Add(Type:=msoControlButton)
            bouton_PnL.Style = msoButtonCaption
            bouton_PnL.OnAction = "Impression_PnL"
            bouton_PnL.Caption = "Impression P&&L"
        End If
        App.CommandBars("Impression P&L").Enabled = False
        For i = 1 To Wb.Sheets.Count
            If Wb.Sheets(i).Name = "P&L total" Then
                App.CommandBars("Impression P&L").Enabled = True
                App.CommandBars("Impression P&L").Visible = True
            End If
        Next
    End Sub
     
    Private Sub Workbook_Open()
        Set App = Application
    End Sub
    Etant novice, je pense qu'il est possible de l'optimiser mais le résultat est là !

    fgiambelluco : je joue avec le Enabled car il me permet de cacher complètement la barre aux utilisateurs (aucune possibilité pour eux de l'activer via Affichage --> Barres d'outils)

    Encore merci et bonne continuation !

    Julien.

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

Discussions similaires

  1. [AC-2010] Suppression d'une barre d'outils créé avec AC-2003
    Par matiasko dans le forum IHM
    Réponses: 2
    Dernier message: 02/02/2015, 15h17
  2. [XL-2002] lien vers une macro dans un bouton integre a une barre d'outils
    Par jbhanoi dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/07/2009, 09h51
  3. Ajout/Suppression d'une liste a l'autre
    Par PeZ dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 20/03/2006, 15h39
  4. [JToolBar] ajouter une barre d'outil à un JApplet
    Par romuluslepunk dans le forum Composants
    Réponses: 4
    Dernier message: 09/08/2005, 04h36
  5. Ajouter une barre d'outils à une sous fenêtre
    Par barthelv dans le forum MFC
    Réponses: 6
    Dernier message: 23/04/2004, 15h17

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