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 :

Ne pas afficher une barre d'outils si elle existe déjà


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 47
    Points : 34
    Points
    34
    Par défaut Ne pas afficher une barre d'outils si elle existe déjà
    Bonjour

    J'ai créé une macro faisant apparaitre une barre d'outils appelée "MaBarre".

    Problème : quand j'ouvre deux versions du fichier, VBA plante car il essaie d'afficher deux fois la même barre d'outils.

    Connaissez vous un code permettant de ne pas afficher la barre d'outils si elle existe déjà ?

    Merci beaucoup pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 47
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par kiki29 Voir le message
    Justement, je m'en suis bien servi de cette FAQ pour créer ma barre. Mais sauf erreur elle ne mentionne pas l'hypothèse de l'ouverture de deux versions du fichier et donc de l'affichage de deux barres ayant le même nom...

  4. #4
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Exemple de principe pas testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim CmdBar As CommandBar
     
    On Error Resume Next
    Set CmdBar = Application.CommandBars("MaBarrePerso") 'ici mettre le nom de ta barre
    On Error GoTo 0
    If Not CmdBar Is Nothing Then
    'on crée et affiche la barre
    '...
    End If

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 47
    Points : 34
    Points
    34
    Par défaut
    Sur tes conseils, j'ai écrit 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
    'déclaration des variables
    Dim Cbar As CommandBar, Cbut As CommandBarButton
    Dim Ctxt As CommandBarComboBox, Cpop1 As CommandBarPopup, Cpop2 As CommandBarPopup
    Dim x As Byte
     
    'Ne pas afficher la barre si elle existe déjà
     
    On Error Resume Next
    Set Cbar = Application.CommandBars("MaBarre")
    On Error GoTo 0
    If Not Cbar Is Nothing Then
     
    ...
     
    End if
    Mais la barre ne s'affiche plus du tout...

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour

    le mieux c'est de la detruire avant de la construire

    comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    sub ma_barre_perso()
    On Error Resume Next
        Application.CommandBars("Mabarre ").Delete
        On Error GoTo 0
    'et ici tu met la contruction de ta barre
    sinon tu a une petite boucle qui te permet de boucler sur toutes les commandbars et si elle n'est pas d'origines elles est supprimée

    je préfere cette facon il n'y a pas d'erreur a gérer puisque si il n'y en a pas il fait rien
    la voila :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub supprime_toute_barres_pas_d_origine()
    Dim bar
    For Each bar In CommandBars
        If (bar.BuiltIn = False) Then
            bar.Delete
             End If
     Next barEnd Sub
    edit:
    ou meme mieux

    en melangeant un peu les deux principes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub construit_la_barre_si_elle_nexiste_pas()
    Dim bar
       For Each bar In CommandBars
        If (bar.BuiltIn = False) and bar.name="mabarre" Then
           exit sub
        else
    'ici construction de ta barre 
    'suivi de exit for
        end if 
        Next bar
    End Sub
    au plaisir

  7. #7
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 47
    Points : 34
    Points
    34
    Par défaut
    Cette solution simple marche parfaitement.

    Du coup, je viens de me rendre compte qu'en fermant un des fichiers, la barre disparait et ne peut plus être utilisée par l'autre fichier. Un problème en chasse un autre !

    Vous pensez que c'est possible que l'autre fichier affiche automatiquement la barre après qu'elle a disparu ?

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonsoir

    Dans ce cas là, la 3 ème et dernière solution est parfaitement adaptée a ce que tu veux, puisque elle ne la crée que si elle n'existe pas.
    Donc meme si les fichiers sont identiques et ont la même macro, il ne devrait pas avoir de problème.

    Edit:
    Je crois avoir résolu le problème:

    Alors je récapitule:

    Tu as 1 fichier qui s'appelle "toto" tu l'ouvres, il construit ta command bar.
    Tu en ouvres un autre qui s'appelle "titi"

    Tu as 2 classeurs ouverts, donc tu veux garder ta barre sur le dernier classeur ouvert.
    Il te suffit de controler si il y a plusieur classeur ouvert comme 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
    Sélectionner tout - Visualiser dans une fenêtre à part
     
    ' Appel cette macro à l'open du workbook
    Sub controler_si_il_a_plusieurs_fichier_ouverts()
        Dim wbk As Workbook
        For Each wbk In Application.Workbooks
            i = i + 1    'la variable "i" va s'incrémenter de 1 à chaque classeur ouvert
        Next
        If i > 1 Then    'si il y a plusieur classeurs d'ouverts
            Exit Sub    ' on sort de la sub
        Else    ' autrement
            'on teste si la barre existe ou pas
            Dim bar
            For Each bar In CommandBars ' on boucle sur toute la barre pour trouver ta barre
                If (bar.BuiltIn = False) And bar.Name = "mabarre" Then
                    Exit Sub
                Else
                    'ici construction de ta barre
                    'suivi de exit for
                End If
            Next bar
        End If
    End Sub
    Il reste à la travailler pour la fermeture, mais je regarderai demain

    au plaisir

  9. #9
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 47
    Points : 34
    Points
    34
    Par défaut
    Merci beaucoup pour ton aide. Si tu as une idée pour résoudre la fermeture, je prends. Mais on peut considérer que le problème de départ a été résolu.

    Bonne journée

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour

    en y reflechissant

    il n'y a pas de soucis même a la fermeture

    a condition que dans ta ligne qui ajoute ta barre elle soit a temporary=true
    ça veut dire que dès que tu ferme ton fichier elle se supprime d'elle même


    allez au plaisir et n'oublie pas de voter ça coûte rien

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 07/11/2009, 09h51
  2. Réponses: 2
    Dernier message: 17/06/2009, 23h42
  3. Réponses: 3
    Dernier message: 23/04/2009, 18h18
  4. [WebForms]Comment ne pas afficher la barre d'outils Word ?
    Par hinanui dans le forum Général Dotnet
    Réponses: 7
    Dernier message: 21/08/2008, 10h05

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