Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/11/2011, 15h14   #1
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 46
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 46
Points : 12
Points : 12
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.
shimuno est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 15h19   #2
Expert Confirmé
 
Homme Philippe
ex Observeur CGG / Analyste prog.
Inscription : juin 2006
Messages : 1 713
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Localisation : France, Finistère (Bretagne)

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

Informations forums :
Inscription : juin 2006
Messages : 1 713
Points : 3 650
Points : 3 650
Salut, voir dans la FAQ http://excel.developpez.com/faq/?page=BarreOutils
__________________
Pensez à Voter, d'avance merci. ( Pouces en bas à la droite de Citer )
Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
Autre utilitaire : MZ Tools 3.0 VBA

Contribution : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator 1 2
kiki29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 15h33   #3
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 46
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 46
Points : 12
Points : 12
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...
shimuno est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 15h46   #4
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Exemple de principe pas testé
Code :
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
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 17h55   #5
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 46
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 46
Points : 12
Points : 12
Sur tes conseils, j'ai écrit ceci

Code :
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...
shimuno est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 18h46   #6
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut re

bonjour

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

comme ceci:

Code :
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 :
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 :
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
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 19h15   #7
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 46
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 46
Points : 12
Points : 12
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 ?
shimuno est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 22/11/2011, 19h27   #8
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
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 :
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
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 09h18   #9
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 46
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 46
Points : 12
Points : 12
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
shimuno est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 13h46   #10
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
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
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h19.


 
 
 
 
Partenaires

Hébergement Web