OVH Cloud OVH Cloud

Ajout d'une barre d'outils dans une macro

9 réponses
Avatar
Luc M
Bonjour,
J'ai créé la macro suivante (Excel en anglais)
Dim TestBar as CommandBar
TestBar = CommandsBar.Add("TestBar",msoBarTop)

mais à l'exécution, une erreur de syntaxe '5' apparaît...
Qu'ai-je mal fait ?
Merci
Luc

9 réponses

Avatar
papou
Bonjour
Tu as fait une faute de frappe :
TestBar = Commandbars.add("TestBar",msoBarTop)

Cordialement
Pascal

"Luc M" <Luc a écrit dans le message de
news:
Bonjour,
J'ai créé la macro suivante (Excel en anglais)
Dim TestBar as CommandBar
TestBar = CommandsBar.Add("TestBar",msoBarTop)

mais à l'exécution, une erreur de syntaxe '5' apparaît...
Qu'ai-je mal fait ?
Merci
Luc


Avatar
michdenis
Bonjour Luc,

J'opterais pour ceci :

Attention, si une barre "Toto" existe déjà, cela fera planter la procédure.

Pour être certain qu'elle n'exite pas, tu peux ajouter ceci en début de procédure ...


'---------------------
Dim Tesbar As CommandBar
Dim P As MsoBarPosition
P = msoBarFloating

On error resume next
CommandBars("toto").delete
On error goto 0

Set TestBar = CommandBars.Add("toto", P)
'---------------------


Salutations!



"Luc M" <Luc a écrit dans le message de
news:
Bonjour,
J'ai créé la macro suivante (Excel en anglais)
Dim TestBar as CommandBar
TestBar = CommandsBar.Add("TestBar",msoBarTop)

mais à l'exécution, une erreur de syntaxe '5' apparaît...
Qu'ai-je mal fait ?
Merci
Luc
Avatar
papou
Bonjour Denis
Je ne sais pas si tu as vu mais bon je te le re-signale ;-)
CommandsBar.Add
Avec ça Luc ne risque pas la faire fonctionner tu ne crois pas ?


Après effectivement il pourrait être utile d'y ajouter un test.
Cordialement
Pascal

"michdenis" a écrit dans le message de
news:eXZ%
Bonjour Luc,

J'opterais pour ceci :

Attention, si une barre "Toto" existe déjà, cela fera planter la
procédure.


Pour être certain qu'elle n'exite pas, tu peux ajouter ceci en début de
procédure ...



'---------------------
Dim Tesbar As CommandBar
Dim P As MsoBarPosition
P = msoBarFloating

On error resume next
CommandBars("toto").delete
On error goto 0

Set TestBar = CommandBars.Add("toto", P)
'---------------------


Salutations!



"Luc M" <Luc a écrit dans le message de
news:
Bonjour,
J'ai créé la macro suivante (Excel en anglais)
Dim TestBar as CommandBar
TestBar = CommandsBar.Add("TestBar",msoBarTop)

mais à l'exécution, une erreur de syntaxe '5' apparaît...
Qu'ai-je mal fait ?
Merci
Luc




Avatar
michdenis
Bonjour Papou,

Et va pour la faute d'orthographe...ce n'est pas moi qui va lancer la première pierre sur ce sujet ....Je suis plutôt le type
cent fautes !!! ;-))

Mais quant à faire, aussi bien faire toutes les corrections d'un seul coup du code .. Non ?

Ligne de code du message initiale
TestBar = CommandsBar.Add("TestBar",msoBarTop)

A ) Variable TestBar n'est pas déclaré ... ce n'est pas une obligation mais t'avouera que cela ne nuit pas !

B ) TestBar est une variable "Objet" , son type "CommandBar" ... je ne vois pas comme il pourrait réussir à exécuter cette
ligne de code avec TestBar as Variant ....Les variables "Objet" lorsqu'elles ne sont pas déclarées ne sont pas des types "as
Variant"... valeur par défaut pour les autres types de variables. Si tu ne connais pas exactement le type d'une variable
d'objet, tu la déclare simplement comme As Object ... c'est la valeur (type) par défaut d'une variable objet.

C ) De débuter par supprimer la barre que tu veux créer même si elle n'existe pas ... cela évite moultes situations
embarrassantes.

Mais peut être as-tu raison, j'aurais dû faire 3 messages !

;-))


Salutations!






"papou" <cestpasbonprobin@çanonpluscg44_fr> a écrit dans le message de news:
Bonjour Denis
Je ne sais pas si tu as vu mais bon je te le re-signale ;-)
CommandsBar.Add
Avec ça Luc ne risque pas la faire fonctionner tu ne crois pas ?


Après effectivement il pourrait être utile d'y ajouter un test.
Cordialement
Pascal

"michdenis" a écrit dans le message de
news:eXZ%
Bonjour Luc,

J'opterais pour ceci :

Attention, si une barre "Toto" existe déjà, cela fera planter la
procédure.


Pour être certain qu'elle n'exite pas, tu peux ajouter ceci en début de
procédure ...



'---------------------
Dim Tesbar As CommandBar
Dim P As MsoBarPosition
P = msoBarFloating

On error resume next
CommandBars("toto").delete
On error goto 0

Set TestBar = CommandBars.Add("toto", P)
'---------------------


Salutations!



"Luc M" <Luc a écrit dans le message de
news:
Bonjour,
J'ai créé la macro suivante (Excel en anglais)
Dim TestBar as CommandBar
TestBar = CommandsBar.Add("TestBar",msoBarTop)

mais à l'exécution, une erreur de syntaxe '5' apparaît...
Qu'ai-je mal fait ?
Merci
Luc




Avatar
michdenis
Complément à l'élément B du message précédent ...

Pour initialer une variable objet, il faut toujours utiliser le MOT : SET comme dans :

Set TestBar = CommandBars.Add("toto", P)



Salutatioins!





"michdenis" a écrit dans le message de news:
Bonjour Papou,

Et va pour la faute d'orthographe...ce n'est pas moi qui va lancer la première pierre sur ce sujet ....Je suis plutôt le type
cent fautes !!! ;-))

Mais quant à faire, aussi bien faire toutes les corrections d'un seul coup du code .. Non ?

Ligne de code du message initiale
TestBar = CommandsBar.Add("TestBar",msoBarTop)

A ) Variable TestBar n'est pas déclaré ... ce n'est pas une obligation mais t'avouera que cela ne nuit pas !

B ) TestBar est une variable "Objet" , son type "CommandBar" ... je ne vois pas comme il pourrait réussir à exécuter cette
ligne de code avec TestBar as Variant ....Les variables "Objet" lorsqu'elles ne sont pas déclarées ne sont pas des types "as
Variant"... valeur par défaut pour les autres types de variables. Si tu ne connais pas exactement le type d'une variable
d'objet, tu la déclare simplement comme As Object ... c'est la valeur (type) par défaut d'une variable objet.

C ) De débuter par supprimer la barre que tu veux créer même si elle n'existe pas ... cela évite moultes situations
embarrassantes.

Mais peut être as-tu raison, j'aurais dû faire 3 messages !

;-))


Salutations!






"papou" <cestpasbonprobin@çanonpluscg44_fr> a écrit dans le message de news:
Bonjour Denis
Je ne sais pas si tu as vu mais bon je te le re-signale ;-)
CommandsBar.Add
Avec ça Luc ne risque pas la faire fonctionner tu ne crois pas ?


Après effectivement il pourrait être utile d'y ajouter un test.
Cordialement
Pascal

"michdenis" a écrit dans le message de
news:eXZ%
Bonjour Luc,

J'opterais pour ceci :

Attention, si une barre "Toto" existe déjà, cela fera planter la
procédure.


Pour être certain qu'elle n'exite pas, tu peux ajouter ceci en début de
procédure ...



'---------------------
Dim Tesbar As CommandBar
Dim P As MsoBarPosition
P = msoBarFloating

On error resume next
CommandBars("toto").delete
On error goto 0

Set TestBar = CommandBars.Add("toto", P)
'---------------------


Salutations!



"Luc M" <Luc a écrit dans le message de
news:
Bonjour,
J'ai créé la macro suivante (Excel en anglais)
Dim TestBar as CommandBar
TestBar = CommandsBar.Add("TestBar",msoBarTop)

mais à l'exécution, une erreur de syntaxe '5' apparaît...
Qu'ai-je mal fait ?
Merci
Luc




Avatar
papou
Re
Tu as raison sur l'ensemble effectivement, et cela prouve (du moins je le
pense), qu'il est parfois utile d'être à plusieurs pour répondre à une
question (et ce n'est pas jps qui devrait me contredire !)
;-)
Cordialement
Pascal

"michdenis" a écrit dans le message de
news:
Bonjour Papou,

Et va pour la faute d'orthographe...ce n'est pas moi qui va lancer la
première pierre sur ce sujet ....Je suis plutôt le type

cent fautes !!! ;-))

Mais quant à faire, aussi bien faire toutes les corrections d'un seul coup
du code .. Non ?


Ligne de code du message initiale
TestBar = CommandsBar.Add("TestBar",msoBarTop)

A ) Variable TestBar n'est pas déclaré ... ce n'est pas une obligation
mais t'avouera que cela ne nuit pas !


B ) TestBar est une variable "Objet" , son type "CommandBar" ... je ne
vois pas comme il pourrait réussir à exécuter cette

ligne de code avec TestBar as Variant ....Les variables "Objet"
lorsqu'elles ne sont pas déclarées ne sont pas des types "as

Variant"... valeur par défaut pour les autres types de variables. Si tu ne
connais pas exactement le type d'une variable

d'objet, tu la déclare simplement comme As Object ... c'est la valeur
(type) par défaut d'une variable objet.


C ) De débuter par supprimer la barre que tu veux créer même si elle
n'existe pas ... cela évite moultes situations

embarrassantes.

Mais peut être as-tu raison, j'aurais dû faire 3 messages !

;-))


Salutations!






"papou" <cestpasbonprobin@çanonpluscg44_fr> a écrit dans le message de
news:

Bonjour Denis
Je ne sais pas si tu as vu mais bon je te le re-signale ;-)
CommandsBar.Add
Avec ça Luc ne risque pas la faire fonctionner tu ne crois pas ?


Après effectivement il pourrait être utile d'y ajouter un test.
Cordialement
Pascal

"michdenis" a écrit dans le message de
news:eXZ%
Bonjour Luc,

J'opterais pour ceci :

Attention, si une barre "Toto" existe déjà, cela fera planter la
procédure.


Pour être certain qu'elle n'exite pas, tu peux ajouter ceci en début de
procédure ...



'---------------------
Dim Tesbar As CommandBar
Dim P As MsoBarPosition
P = msoBarFloating

On error resume next
CommandBars("toto").delete
On error goto 0

Set TestBar = CommandBars.Add("toto", P)
'---------------------


Salutations!



"Luc M" <Luc a écrit dans le message de
news:
Bonjour,
J'ai créé la macro suivante (Excel en anglais)
Dim TestBar as CommandBar
TestBar = CommandsBar.Add("TestBar",msoBarTop)

mais à l'exécution, une erreur de syntaxe '5' apparaît...
Qu'ai-je mal fait ?
Merci
Luc









Avatar
jps
oh! que non, papou....d'ailleurs qui contredis-je, moi?
jps

"papou" <cestpasbonprobin@çanonpluscg44_fr> a écrit dans le message de
news:%23nHWa$
Re
Tu as raison sur l'ensemble effectivement, et cela prouve (du moins je le
pense), qu'il est parfois utile d'être à plusieurs pour répondre à une
question (et ce n'est pas jps qui devrait me contredire !)
;-)
Cordialement
Pascal

"michdenis" a écrit dans le message de
news:
Bonjour Papou,

Et va pour la faute d'orthographe...ce n'est pas moi qui va lancer la
première pierre sur ce sujet ....Je suis plutôt le type

cent fautes !!! ;-))

Mais quant à faire, aussi bien faire toutes les corrections d'un seul
coup


du code .. Non ?

Ligne de code du message initiale
TestBar = CommandsBar.Add("TestBar",msoBarTop)

A ) Variable TestBar n'est pas déclaré ... ce n'est pas une obligation
mais t'avouera que cela ne nuit pas !


B ) TestBar est une variable "Objet" , son type "CommandBar" ... je ne
vois pas comme il pourrait réussir à exécuter cette

ligne de code avec TestBar as Variant ....Les variables "Objet"
lorsqu'elles ne sont pas déclarées ne sont pas des types "as

Variant"... valeur par défaut pour les autres types de variables. Si tu
ne


connais pas exactement le type d'une variable
d'objet, tu la déclare simplement comme As Object ... c'est la valeur
(type) par défaut d'une variable objet.


C ) De débuter par supprimer la barre que tu veux créer même si elle
n'existe pas ... cela évite moultes situations

embarrassantes.

Mais peut être as-tu raison, j'aurais dû faire 3 messages !

;-))


Salutations!






"papou" <cestpasbonprobin@çanonpluscg44_fr> a écrit dans le message de
news:

Bonjour Denis
Je ne sais pas si tu as vu mais bon je te le re-signale ;-)
CommandsBar.Add
Avec ça Luc ne risque pas la faire fonctionner tu ne crois pas ?


Après effectivement il pourrait être utile d'y ajouter un test.
Cordialement
Pascal

"michdenis" a écrit dans le message de
news:eXZ%
Bonjour Luc,

J'opterais pour ceci :

Attention, si une barre "Toto" existe déjà, cela fera planter la
procédure.


Pour être certain qu'elle n'exite pas, tu peux ajouter ceci en début
de



procédure ...


'---------------------
Dim Tesbar As CommandBar
Dim P As MsoBarPosition
P = msoBarFloating

On error resume next
CommandBars("toto").delete
On error goto 0

Set TestBar = CommandBars.Add("toto", P)
'---------------------


Salutations!



"Luc M" <Luc a écrit dans le message de
news:
Bonjour,
J'ai créé la macro suivante (Excel en anglais)
Dim TestBar as CommandBar
TestBar = CommandsBar.Add("TestBar",msoBarTop)

mais à l'exécution, une erreur de syntaxe '5' apparaît...
Qu'ai-je mal fait ?
Merci
Luc













Avatar
papou
:-))

Cordialement
Pascal

"jps" a écrit dans le message de
news:O7po%
oh! que non, papou....d'ailleurs qui contredis-je, moi?
jps

"papou" <cestpasbonprobin@çanonpluscg44_fr> a écrit dans le message de
news:%23nHWa$
Re
Tu as raison sur l'ensemble effectivement, et cela prouve (du moins je
le


pense), qu'il est parfois utile d'être à plusieurs pour répondre à une
question (et ce n'est pas jps qui devrait me contredire !)
;-)
Cordialement
Pascal

"michdenis" a écrit dans le message de
news:
Bonjour Papou,

Et va pour la faute d'orthographe...ce n'est pas moi qui va lancer la
première pierre sur ce sujet ....Je suis plutôt le type

cent fautes !!! ;-))

Mais quant à faire, aussi bien faire toutes les corrections d'un seul
coup


du code .. Non ?

Ligne de code du message initiale
TestBar = CommandsBar.Add("TestBar",msoBarTop)

A ) Variable TestBar n'est pas déclaré ... ce n'est pas une obligation
mais t'avouera que cela ne nuit pas !


B ) TestBar est une variable "Objet" , son type "CommandBar" ... je
ne



vois pas comme il pourrait réussir à exécuter cette
ligne de code avec TestBar as Variant ....Les variables "Objet"
lorsqu'elles ne sont pas déclarées ne sont pas des types "as

Variant"... valeur par défaut pour les autres types de variables. Si
tu



ne
connais pas exactement le type d'une variable
d'objet, tu la déclare simplement comme As Object ... c'est la valeur
(type) par défaut d'une variable objet.


C ) De débuter par supprimer la barre que tu veux créer même si elle
n'existe pas ... cela évite moultes situations

embarrassantes.

Mais peut être as-tu raison, j'aurais dû faire 3 messages !

;-))


Salutations!






"papou" <cestpasbonprobin@çanonpluscg44_fr> a écrit dans le message de
news:

Bonjour Denis
Je ne sais pas si tu as vu mais bon je te le re-signale ;-)
CommandsBar.Add
Avec ça Luc ne risque pas la faire fonctionner tu ne crois pas ?


Après effectivement il pourrait être utile d'y ajouter un test.
Cordialement
Pascal

"michdenis" a écrit dans le message de
news:eXZ%
Bonjour Luc,

J'opterais pour ceci :

Attention, si une barre "Toto" existe déjà, cela fera planter la
procédure.


Pour être certain qu'elle n'exite pas, tu peux ajouter ceci en début
de



procédure ...


'---------------------
Dim Tesbar As CommandBar
Dim P As MsoBarPosition
P = msoBarFloating

On error resume next
CommandBars("toto").delete
On error goto 0

Set TestBar = CommandBars.Add("toto", P)
'---------------------


Salutations!



"Luc M" <Luc a écrit dans le message de
news:
Bonjour,
J'ai créé la macro suivante (Excel en anglais)
Dim TestBar as CommandBar
TestBar = CommandsBar.Add("TestBar",msoBarTop)

mais à l'exécution, une erreur de syntaxe '5' apparaît...
Qu'ai-je mal fait ?
Merci
Luc

















Avatar
michdenis
Bonjour Monsieur Luc,

La procédure que je t'ai soumise fonctionne bien si tu la copie dans un module standard, SAUF si tu insère la procédure dans
le ThisWorkbook de ton classeur, tu devrais "AJOUTER" l'expression "APPLICATION" devant "CommandBars" comme ceci :

'-------------------------
Dim Tesbar As CommandBar
Dim P As MsoBarPosition
P = msoBarFloating

On Error Resume Next
Application.CommandBars("toto").Delete
On Error GoTo 0

Set TestBar = Application.CommandBars.Add("toto", P)
'-------------------------

Et pourquoi tant de chinoiseries ? Et bien dans son voloume, "Excel 2000 et VBA Le guide du développeur", M. John Walkenbach
y va de sa petite explication à la page 655 ... les 2 derniers paragraphes du bas de cette page et je cite :

"La Collection Commandbars est un membre de l'objet Application. Quand vous référencez cette colllection dans un module VBA,
vous pouvez omettre la référence à l'objet Application (Elle est implicite). Par exemple, l'instruction suivante (contenue
dans un module standard VBA) affiche le nom du premier élément de la collectioin Commandbars.
Msgbox Commandbars(1).Name

Quand vous référencez la collection "CommandBars" à partir d'un module de code pour l'objet ThisWorkbook, vous devez le faire
précéder d'une référence à l'objet Application."
Msgbox Application.CommandBars(1).Name

( Fin de la citation)


Après une telle explication, venez pas me dire que vous n'avez pas compris !!! Sauf si vous vous appelez JPS...et que vous
vous êtes accrochées les pieds dans les fleurs du tapis du plancher de la cave et que vous y croupissez depuis 2 bonnes
heures à siroter un peu de vin de messe !!!


;-)))


Salutations!




"Luc M" a écrit dans le message de
news:
Messieurs,

Merci pour vos remarques et votre fougue... ;-))

Ceci étant, mon problème reste le même..
J'ai vérifié : le texte était correct (CommandBarS) et j'ai même ajouté le
mot Set..

J'obtient donc une 'Run-time error '5'
Invalid procedure call or argument

Si vous avez des idées...
LucM

"papou" wrote:

:-))

Cordialement
Pascal

"jps" a écrit dans le message de
news:O7po%
oh! que non, papou....d'ailleurs qui contredis-je, moi?
jps

"papou" <cestpasbonprobin@çanonpluscg44_fr> a écrit dans le message de
news:%23nHWa$
Re
Tu as raison sur l'ensemble effectivement, et cela prouve (du moins je
le


pense), qu'il est parfois utile d'être à plusieurs pour répondre à une
question (et ce n'est pas jps qui devrait me contredire !)
;-)
Cordialement
Pascal

"michdenis" a écrit dans le message de
news:
Bonjour Papou,

Et va pour la faute d'orthographe...ce n'est pas moi qui va lancer la
première pierre sur ce sujet ....Je suis plutôt le type

cent fautes !!! ;-))

Mais quant à faire, aussi bien faire toutes les corrections d'un seul
coup


du code .. Non ?

Ligne de code du message initiale
TestBar = CommandsBar.Add("TestBar",msoBarTop)

A ) Variable TestBar n'est pas déclaré ... ce n'est pas une obligation
mais t'avouera que cela ne nuit pas !


B ) TestBar est une variable "Objet" , son type "CommandBar" ... je
ne



vois pas comme il pourrait réussir à exécuter cette
ligne de code avec TestBar as Variant ....Les variables "Objet"
lorsqu'elles ne sont pas déclarées ne sont pas des types "as

Variant"... valeur par défaut pour les autres types de variables. Si
tu



ne
connais pas exactement le type d'une variable
d'objet, tu la déclare simplement comme As Object ... c'est la valeur
(type) par défaut d'une variable objet.


C ) De débuter par supprimer la barre que tu veux créer même si elle
n'existe pas ... cela évite moultes situations

embarrassantes.

Mais peut être as-tu raison, j'aurais dû faire 3 messages !

;-))


Salutations!






"papou" <cestpasbonprobin@çanonpluscg44_fr> a écrit dans le message de
news:

Bonjour Denis
Je ne sais pas si tu as vu mais bon je te le re-signale ;-)
CommandsBar.Add
Avec ça Luc ne risque pas la faire fonctionner tu ne crois pas ?


Après effectivement il pourrait être utile d'y ajouter un test.
Cordialement
Pascal

"michdenis" a écrit dans le message de
news:eXZ%
Bonjour Luc,

J'opterais pour ceci :

Attention, si une barre "Toto" existe déjà, cela fera planter la
procédure.


Pour être certain qu'elle n'exite pas, tu peux ajouter ceci en début
de



procédure ...


'---------------------
Dim Tesbar As CommandBar
Dim P As MsoBarPosition
P = msoBarFloating

On error resume next
CommandBars("toto").delete
On error goto 0

Set TestBar = CommandBars.Add("toto", P)
'---------------------


Salutations!



"Luc M" <Luc a écrit dans le message de
news:
Bonjour,
J'ai créé la macro suivante (Excel en anglais)
Dim TestBar as CommandBar
TestBar = CommandsBar.Add("TestBar",msoBarTop)

mais à l'exécution, une erreur de syntaxe '5' apparaît...
Qu'ai-je mal fait ?
Merci
Luc