OVH Cloud OVH Cloud

Barre d'outil personnalisée

4 réponses
Avatar
Guido
Bonsoir a tous,
J'ai un gros soucis avec une barre d'outil personnalisée. Celle-ci perd à
chaque fois les liens qui sont attachés à ces commandes. Et ceci à chaque
fois que je mets l'application sur une nouvelle machine. J'ai essayé de
l'enregistrer en tant que xla, mais rien n'y fait. Je charge le dossier sur
une nouvelle machine, je le déplace dans un nouveau dossier, les liens se
perdent à chaque fois.
Qui peut m'aider. Je ne sais plus comment tourner sur ce problème.
Merci de votre aide.
Guido

4 réponses

Avatar
Philippe Noss
Bonjour, je ne suis pas sur d'avoir tout compris !
As tu un probléme avec l"affectation de la macro.
Ci dessous une boucle qui lit tous les contole d'une barre et qui
enleve le nom du classeur avant le nom de la macro
ex : "'C:PNDIExoutils.xla'!MaMacro" devient "MaMacro"
For Each x In Application.CommandBars("Exoutils").Controls
x.OnAction = Mid(x.OnAction, InStr(1, x.OnAction, "!") + 1,
Len(x.OnAction))
Next x


Exoutils soldé jusqu'au 31 juillet
http://nossphil.perso.cegetel.­net/exoutils.html
Philippe NOSS
Avatar
Guido
Bonjour Philippe Noss,
Le fichier est un fichier destiné à être partagé, est le gros problème est
que la barre d'outil suit chaque copie du fichier sur chaque dossier
différent où chaque machine, mais les commandes qui y devraient être
attachées, ne le sont plus. Et à chaque fois, il faut initialiser chaque
commandes de cette barre d'outil perso. Le problème est que les autres
utilisateurs de ce fichier n'y connaissent pas grand choses. Et moi un peu
plus que pas grand chose.
Puis-je te l'envoyer pour que tu puisses avoir un aperçu de ce qui a été
fait ?
Merci de m'avoir répondu
Guido


"Philippe Noss" a écrit dans le message de
news:
Bonjour, je ne suis pas sur d'avoir tout compris !
As tu un probléme avec l"affectation de la macro.
Ci dessous une boucle qui lit tous les contole d'une barre et qui
enleve le nom du classeur avant le nom de la macro
ex : "'C:PNDIExoutils.xla'!MaMacro" devient "MaMacro"
For Each x In Application.CommandBars("Exoutils").Controls
x.OnAction = Mid(x.OnAction, InStr(1, x.OnAction, "!") + 1,
Len(x.OnAction))
Next x


Exoutils soldé jusqu'au 31 juillet
http://nossphil.perso.cegetel.­net/exoutils.html
Philippe NOSS
Avatar
François Rivierre
Bonjour Guido,

Le fichier est un fichier destiné à être partagé, est le gros
problème est que la barre d'outil suit chaque copie du fichier sur
chaque dossier différent où chaque machine, mais les commandes qui y
devraient être attachées, ne le sont plus. Et à chaque fois, il faut
initialiser chaque commandes de cette barre d'outil perso. Le
problème est que les autres utilisateurs de ce fichier n'y
connaissent pas grand choses. Et moi un peu plus que pas grand chose.
Puis-je te l'envoyer pour que tu puisses avoir un aperçu de ce qui a
été fait ?


Une solution est de créer la barre d'outils, ainsi que tous ces
boutons/commandes lors de l'ouverture de ton fichier. De cette manière, tu
n'as qu'à distribuer ton fichier, sans plus te préoccuper de la barre
d'outils :).

Pour cela il faut utiliser les évènements Open et Close de l'objet
ThisWorkbook (dans le module ThisWorkbook donc) :

8<--------------------------------------------------

Private Sub Workbook_Open()

' Création de la barre personnalisée
Application.CommandBars.Add(Name:="Ma barre").Visible = True
With Application.CommandBars("Ma barre")
.Position = msoBarTop
End With

' Ajout d'un bouton
Application.CommandBars("Ma barre").Controls.Add Type:=msoControlButton,
ID:= _
2950, Before:=1
With Application.CommandBars("Ma barre").Controls(1)
.Caption = "Ouvrir"
'.FaceId = 23
.FaceId = 455
.TooltipText = "Ouvrir un fichier"
.BeginGroup = False
.DescriptionText = "Ma barre : ouvrir un fichier existant"
.OnAction = "MaMacroOuverture"
End With

' ... et un autre
Application.CommandBars("Ma barre").Controls.Add Type:=msoControlButton,
ID:= _
2950, Before:=2
With Application.CommandBars("Ma barre").Controls(2)
.Caption = "Enregistrer"
.FaceId = 3
.TooltipText = "Enregistrer"
.BeginGroup = True
.DescriptionText = "Ma barre : enregistrer"
.OnAction = "MaMacroEnregistrement"
End With

' tiens, et si on ajoutait une Combobox ?
Dim newCombo As Office.CommandBarComboBox
Set newCombo = Application.CommandBars("Ma
barre").Controls.Add(msoControlComboBox)
With newCombo
.BeginGroup = True
.AddItem "Français", 1
.AddItem "Anglais", 2
.DropDownLines = 3
.DropDownWidth = 75
.ListIndex = 1
.OnAction = "MaMacroPourCombo"
End With

' et pour finir, un bouton avec le texte
Application.CommandBars("Ma barre").Controls.Add Type:=msoControlButton,
ID:= _
2950, Before:=4
With Application.CommandBars("Ma barre").Controls(4)
.Caption = "Un bouton avec un texte"
.BeginGroup = True
.Style = msoButtonCaption
.TooltipText = "Un bouton avec un texte"
.DescriptionText = "Ma barre : un bouton avec un texte"
.OnAction = "MaMacroBoutonAvecTexte"
End With

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
' Ne pas oublier de détruire la barre à la fermeture !
Application.CommandBars("Ma barre").Delete
End Sub

8< ------------------------------------------------------------

Voilà, en espérant que ça puisse résoudre ton problème :).

Cordialement,

François Rivierre

Avatar
Guido
Cher François Rivierre,
Merci à toi de me répondre. Il est vrai qu'intégrer une barre d'outil
directement pourrait résoudre le problème, mais il faudrait me donner
quelques marche à suivre. Car aussi loin dans la connaissance, je n'y suis
pas encore ;-(
Il y a 6 listes déroulantes avec lesquels j'ai en tout, 15 commandes
distinctes. Chaque commandes possède sa macro. Il y a 14 modules.
Y aurait-il un moyen (si c'est faisable) de chercher la barre d'outil et de
l'intégrer directement ?
Merci de ton aide.
Guido


"François Rivierre" a écrit dans le message de
news:%
Bonjour Guido,

Le fichier est un fichier destiné à être partagé, est le gros
problème est que la barre d'outil suit chaque copie du fichier sur
chaque dossier différent où chaque machine, mais les commandes qui y
devraient être attachées, ne le sont plus. Et à chaque fois, il faut
initialiser chaque commandes de cette barre d'outil perso. Le
problème est que les autres utilisateurs de ce fichier n'y
connaissent pas grand choses. Et moi un peu plus que pas grand chose.
Puis-je te l'envoyer pour que tu puisses avoir un aperçu de ce qui a
été fait ?


Une solution est de créer la barre d'outils, ainsi que tous ces
boutons/commandes lors de l'ouverture de ton fichier. De cette manière, tu
n'as qu'à distribuer ton fichier, sans plus te préoccuper de la barre
d'outils :).

Pour cela il faut utiliser les évènements Open et Close de l'objet
ThisWorkbook (dans le module ThisWorkbook donc) :

8<--------------------------------------------------

Private Sub Workbook_Open()

' Création de la barre personnalisée
Application.CommandBars.Add(Name:="Ma barre").Visible = True
With Application.CommandBars("Ma barre")
.Position = msoBarTop
End With

' Ajout d'un bouton
Application.CommandBars("Ma barre").Controls.Add
Type:=msoControlButton,

ID:= _
2950, Before:=1
With Application.CommandBars("Ma barre").Controls(1)
.Caption = "Ouvrir"
'.FaceId = 23
.FaceId = 455
.TooltipText = "Ouvrir un fichier"
.BeginGroup = False
.DescriptionText = "Ma barre : ouvrir un fichier existant"
.OnAction = "MaMacroOuverture"
End With

' ... et un autre
Application.CommandBars("Ma barre").Controls.Add
Type:=msoControlButton,

ID:= _
2950, Before:=2
With Application.CommandBars("Ma barre").Controls(2)
.Caption = "Enregistrer"
.FaceId = 3
.TooltipText = "Enregistrer"
.BeginGroup = True
.DescriptionText = "Ma barre : enregistrer"
.OnAction = "MaMacroEnregistrement"
End With

' tiens, et si on ajoutait une Combobox ?
Dim newCombo As Office.CommandBarComboBox
Set newCombo = Application.CommandBars("Ma
barre").Controls.Add(msoControlComboBox)
With newCombo
.BeginGroup = True
.AddItem "Français", 1
.AddItem "Anglais", 2
.DropDownLines = 3
.DropDownWidth = 75
.ListIndex = 1
.OnAction = "MaMacroPourCombo"
End With

' et pour finir, un bouton avec le texte
Application.CommandBars("Ma barre").Controls.Add
Type:=msoControlButton,

ID:= _
2950, Before:=4
With Application.CommandBars("Ma barre").Controls(4)
.Caption = "Un bouton avec un texte"
.BeginGroup = True
.Style = msoButtonCaption
.TooltipText = "Un bouton avec un texte"
.DescriptionText = "Ma barre : un bouton avec un texte"
.OnAction = "MaMacroBoutonAvecTexte"
End With

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
' Ne pas oublier de détruire la barre à la fermeture !
Application.CommandBars("Ma barre").Delete
End Sub

8< ------------------------------------------------------------

Voilà, en espérant que ça puisse résoudre ton problème :).

Cordialement,

François Rivierre