Bouton barre d'outil lié à classeur excel [Résolu]

Messages postés
91
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
19 mai 2011
- - Dernière réponse : charette63
Messages postés
91
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
19 mai 2011
- 30 avril 2011 à 20:33
Bonjour à tous et toutes,

j'ai crée un bouton, qui commande différentes macros, dans la barre d'outil excel et qui n'apparaît qu'avec un "type" de dossier et qui disparaît lorsque je ferme le dossier.
Mon problème, est qui si plusieurs dossiers de même "type" sont ouverts et que j'en ferme un, mon bouton disparaît (ce qui peut être ennuyant pour travailler sur le(s) dossier(s) ouvert(s))

Existe-t-il une possibilité de "signaler" à la macro de fermeture que si un dossier de même "type" est ouvert de ne pas s'activer.

Tout les dossiers commence par les mêmes termes (je ne sais pas si ça peut aider)
ex: horaire nursing 01 2011
horaire nursing 02 2011
horaire nursing 03 2011
.....etc....etc...

voici le code d'activation du bouton

Private Sub Workbook_Open()
Application.CommandBars("horaire nursing").Visible = True
End Sub

et celui de fermeture du bouton

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("horaire nursing").Visible = False
End Sub


Ces codes sont donc placés dans le module "ThisWorkbook" du dossier

Merci pour votre aide
Afficher la suite 

13 réponses

Meilleure réponse
Messages postés
91
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
19 mai 2011
3
Merci
salut l'artiste,

ça marche nickel

je m'empresse de consulter ton lien

merci beaucoup

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Commenter la réponse de charette63
Messages postés
26526
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 octobre 2019
316
3
Merci
Bonjour,


par contre penses à passer le sujet en résolu.

Bon courage.

Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jordane45
Messages postés
26526
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 octobre 2019
316
0
Merci
Bonjour,

Au vu de ce que tu marques, je supposes que ce que tu nommes :
"type" de dossier

est en fait : CLASSEUR EXCEL ?

Si oui.. il suffirait que dans ton code de fermeture, tu testes avant si d'autres classeurs sont encore ouverts avec le même nom (type).

Par exemple :

Private Sub Workbook_BeforeClose(Cancel As Boolean)

NB_classeurs = Application.Workbooks.Count

'teste si d'autres classeurs sont ouverts
If NB_classeurs > 1 Then
    'boulce pour lire le nom de chaque classseur ouvert
    For X = 1 To NB_classeurs
        'nom du classeur n
        Nom_classeur = Workbooks(X).Name
    
        ' teste si commence par la chaine "horaire nursing"
        ' Si oui ...alors je sors ^^
        If Left(Nom_classeur, 15) = "horaire nursing" Then
            Exit Sub
        End If
    Next
End If

Application.CommandBars("horaire nursing").Visible = False
End Sub



voilou

Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
Commenter la réponse de jordane45
Messages postés
91
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
19 mai 2011
0
Merci
bonjour Jordane, et sympa de te pencher sur mon problème,

comme tu l'as bien supposé, se sont des classeurs excel.

le code que tu m'as donné coince, j'ai le message "erreur de compilation-validation non définie" et c'est "NB_classeurs" qui est surligné en bleu.

J'en profite pour poser une seconde question, j'ai (j'avais, puisque j'ai testé ta macro seul)deux autres applications dans le "Sub workbook_beforeclose" qui sont "Call macro1" et Call macro2", y a-t-il une priorité dans l'ordre des activations des differentes macros?

merci
Commenter la réponse de charette63
Messages postés
26526
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 octobre 2019
316
0
Merci
Bonjour,
bonjour,
il n'y a aucune priorité si dans tes autres sub tu ne luis dis pas de quitter le classeur sans s'occuper du reste

Sinon au vu du message d'erreur .. c'est que tu as certainement dit à Excel que la déclaration des variables était obligatoire...
Rajoute une ligne de déclaration pour les variables :

Dim NB_classeurs as integer
Dim Nom_classeur as String
'etc...



Sinon tu es sous quelle versions d'office ? 2003; 2007 ou 2010 ?

Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
Commenter la réponse de jordane45
Messages postés
91
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
19 mai 2011
0
Merci
bonjour Jordane,

la version office est de 2003.

Cette fois, c'est sur le "X" du bout de code "For X = 1 To NB_classeurs"
que j'ai l'erreur de compilation-Variable non définie.
Comme tu l'as certainement deviné je suis nul en programmation VB (et autres d'ailleurs). Je sollicite donc à nouveau ton aide.

Avec tout mes remerciements
Commenter la réponse de charette63
Messages postés
26526
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 octobre 2019
316
0
Merci
Bonjour,
pas de soucis.

Là encore "X" est une variable..
Il faut également la déclarer avant de l'utiliser.
Dim X as integer


Pour que tu puisses acroitre tes connaissances dans le monde mystérieux de la programmation , je t'invite à lire ce tuto :
Utiliser les variables en VBA Excel

N'hésites pas à revenir sur le fofo si tu as de nouveaux soucis.

Bonne continuation.


Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
Commenter la réponse de jordane45
Messages postés
91
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
19 mai 2011
0
Merci
bonjour,

Je reviens à la charge, il y a un p'tit bug, je m'explique.

J'ai adapté le code à d'autres classeurs excel qui s'appellent:
horaire nursing
fiche perso nursing
horaire cuisine
fiche perso cuisine

la fermeture des differents boutons fonctionnent à merveille (donc disparaissent de la barre d'outil lors de la fermeture du dernier classeur)
quand les classeurs ouverts portent le même nom

Si un autre classeur excel portant un autre nom est ouvert, dans ce cas le(s) bouton(s) reste(nt) actif(s) dans la barre d'outil

j'espere que l'explication est suffisement claire

merci pour votre aide
Commenter la réponse de charette63
Messages postés
26526
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 octobre 2019
316
0
Merci
Bonjour,

Il faut regarder du côté de la condition qui teste le nom des classeurs.
        If Left(Nom_classeur, 15) = "horaire nursing" Then
            Exit Sub
        End If


Pour qu'elle puisse prendre en compte chacun des classeurs concernés, il faudrait surement les rajouter dans le test ( avec un Select Case plutot qu'un IF )
Exemple:


ClasseurName = Left(Nom_classeur, 15)
Select Case ClasseurName
    Case "horaire nursing", "fiche perso nur", "horaire cuisine", "fiche perso cui"
        'Le nom commence par les noms ci-dessus...
        Exit Sub
    Else
        'Ne correspond à aucun des noms de classeurs...
End Select



Sinon, mets nous ton code pour qu'on voit ce qui peut éventuellement bloquer.

Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
Commenter la réponse de jordane45
Messages postés
91
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
19 mai 2011
0
Merci
Bonjour Jordane, content de te "revoir",

j'ai testé la solution que tu m'as proposé, sans succés,mais j'ai fais d'autres tests avec les élements que j'avais en main, et j'ai remarqué un petit quelque chose. Je m'explique:

Voici le bout de code que tu m'as transmis et qui fonctionne bien lorsque j'ai plusieurs classeurs d'un même (debut de )nom ouvert et qui coince avec un autre classeur ouvert:


If NB_classeurs > 1 Then
'boulce pour lire le nom de chaque classseur ouvert
For X = 1 To NB_classeurs
'nom du classeur n
Nom_classeur = Workbooks(X).Name

' teste si commence par la chaine "horaire nursing"
' Si oui ...alors je sors ^^
If Left(Nom_classeur, 15) = "horaire nursing" Then
Exit Sub
End If
Next
End If
Application.CommandBars("horaire nursing").Visible = False
End Sub



J'ai testé ma manip avec le code modifié comme suit:

If NB_classeurs > 1 Then
Exit Sub
End If

Application.CommandBars("horaire nursing").Visible = False
End Sub


J'ai donc supprimé du code les lignes suivantes

For X = 1 To NB_classeur
Nom_classeur = Workbooks(X).Name
If Left(Nom_classeur, 15) = "horaire nursing" Then
Exit Sub
End If
Next


A la fermeture de mes classeurs avec le code modifié, j'ai IDENTIQUEMENT les mêmes effets qu'avec le code initial (à savoir que si un autre formulaire excel de n'importe quel autre nom, mon (mes) bouton(s) reste(nt) ouvert dans ma barre d'outil)

Ma conclusion est donc que c'est le bout de code "supprimé" qui pose problème, il ne lit pas le nom (plutôt le début du nom) du classeur lié au bouton

Me trompe-je?

Merci de ton aide
Commenter la réponse de charette63
Messages postés
26526
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 octobre 2019
316
0
Merci
Bonjour,
en effet, le code lit les 15 premieres lettres du nom des classeurs car au début tu voulais que la barre ne se supprime que lorsque tous les classeurs du meme nom etaient fermés et qu'elle reste s'il en restait au moins un.

apres, il faut bien entendu modifier le code si tes conditions changent ^^


Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
Commenter la réponse de jordane45
Messages postés
91
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
19 mai 2011
0
Merci
Salut Jordane,

C'est effectivement l'objet de ma demande initiale, et le code que tu m'as donné fonctionne très bien tant qu'il n'y a que des classeurs nommés "horaire nursing ...." d'ouvert et le bouton disparaît lors de la fermeture du dernier classeur du même nom.

Mon problème actuel, c'est que le bouton ne disparait pas lorsque je ferme le dernier classeur nommés "horaire nursing...." si un autre classeur (quelques soit son nom) est toujours ouvert.

Je recherche donc un complément au code qui dirait: si d'autres classeurs sont ouvert MAIS qu'il ne s'appelle pas "horaire nursing..." tu peux lancer la macro de fermeture du bouton

cordialement itout

Thierry
Commenter la réponse de charette63
Messages postés
91
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
19 mai 2011
0
Merci
Bonsoir Jordane

pour info, voici l'explication et la solution à mon problème.
Il faut supprimer le classeur actif de la boucle sinon il se trouve lui-même et ne ferme pas le bouton :

Remplacer :

Code :
If Left(Nom_classeur, 15) = "horaire nursing" Then

par :

Code :
If Left(Nom_classeur, 15) = "horaire nursing" And _
Nom_classeur <> Thisworkbook.Name Then


Merci encore pour l'aide apportée
Thierry
Commenter la réponse de charette63