OVH Cloud OVH Cloud

BO rattachée via VBA

5 réponses
Avatar
JohnFuss
Bonjour,

j'ai une macro qui créé des fichiers excel à la pelle, je voudrai créé et
rattacher à chaque classeur une barre perso mais les classeurs créés ne
doivent pas contenir de macro.

Donc pas de Workbook_Open pour créé la barre et la detruire dans
Workbook_BeforeClose, mais juste la syntaxe de rattachement d'une barre dans
un classeur.

Merci d'avance.

JohnFuss.

5 réponses

Avatar
Ange Ounis
Je ne pense pas qu'il existe un moyen de programmer l'attachement d'une barre
d'outils à un classeur.
Si tes recherches te mènent à une piste qui m'aurait échappé, merci de
transmettre l'info ici.

----------
Ange Ounis
----------

Bonjour,

j'ai une macro qui créé des fichiers excel à la pelle, je voudrai créé et
rattacher à chaque classeur une barre perso mais les classeurs créés ne
doivent pas contenir de macro.

Donc pas de Workbook_Open pour créé la barre et la detruire dans
Workbook_BeforeClose, mais juste la syntaxe de rattachement d'une barre dans
un classeur.

Merci d'avance.

JohnFuss.




Avatar
JB
Bonsoir,

Il faut attacher la BO au classeur manuellement (Affichage/Barre
outils/Personnaliser/Attacher)

-La barre s'installe automatiquement sur le poste client à l'ouverture
du classeur.
-Les boutons pointent vers le chemin physique des macros.

-Dispos pour tous les classeurs, ces barres sont adaptées pour les
macros utilitaires utilsables de tout classeur, ce qui n'est pas ton
cas.
Je ne vois pas de solution si les classeurs ne doivent pas contenir de
code(?)

JB


Bonjour,

j'ai une macro qui créé des fichiers excel à la pelle, je voudrai c réé et
rattacher à chaque classeur une barre perso mais les classeurs créé s ne
doivent pas contenir de macro.

Donc pas de Workbook_Open pour créé la barre et la detruire dans
Workbook_BeforeClose, mais juste la syntaxe de rattachement d'une barre d ans
un classeur.

Merci d'avance.

JohnFuss.


Avatar
JohnFuss
Bonjour,

bon alors j'ai peut-être quelques idées, mais il me manque un peu de bagages
:

* quand on fait un "Application.CommandBars.FindControl(msoControlButton,
797).Execute" (la fenetre Personnliser les BO)
excel ne rend pas la main donc pour envoyer des sendkeys c'est compliqué.

*Est-il possible de multithreader du vba ds Excel ?

*Sinon faire un vbs qui enverrai des SendKeys mais comment lance t'on un vbs
depuis vba ?

Je me lance la dedans voir ce su'il en ressort.

John

"Ange Ounis" a écrit dans le message de news:
ef3Aog$
Je ne pense pas qu'il existe un moyen de programmer l'attachement d'une
barre d'outils à un classeur.
Si tes recherches te mènent à une piste qui m'aurait échappé, merci de
transmettre l'info ici.

----------
Ange Ounis
----------

Bonjour,

j'ai une macro qui créé des fichiers excel à la pelle, je voudrai créé et
rattacher à chaque classeur une barre perso mais les classeurs créés ne
doivent pas contenir de macro.

Donc pas de Workbook_Open pour créé la barre et la detruire dans
Workbook_BeforeClose, mais juste la syntaxe de rattachement d'une barre
dans un classeur.

Merci d'avance.

JohnFuss.




Avatar
JohnFuss
Bien, bien, bien...

Je m'en suis sorti on créant ma BO, je construit un fichier text .vbs (dont
le contenu est stocké dans une feuille de ma xla), j'execute le vbs via une
API, ensuite je lance la fenetre de personalisation des barres de boutons et
mon vbs qui avait un Wait de 2 secondes se met en route et envoi des
SendKeys comme il faut. Le seul pré-requis est de nommé sa barre de bouton
de manière à être sûr que notre barre se retrouve en dernière position de la
liste des barres.

Le code est le suivant, dans le P.S je decrirai les fonctions annexes.

Private Sub CreerAffichagePersonnalise(sh As Worksheet)
Const cmdbName As String = "Z_AffichagePerso"

'Affichage personnalisé Langue Client
sh.[J:J].EntireColumn.Hidden = True
sh.Parent.CustomViews.Add ViewName:="Translated Description",
PrintSettings:úlse, RowColSettings:=True
'Affichage personnalisé FR
sh.[J:J].EntireColumn.Hidden = False
sh.[K:K].EntireColumn.Hidden = True
sh.Parent.CustomViews.Add ViewName:="Libellé Français",
PrintSettings:úlse, RowColSettings:=True
'Créé la barre de bouton et la rattache ou classeur
On Error Resume Next
Application.CommandBars(cmdbName).Delete
On Error GoTo 0
With Application.CommandBars.Add(cmdbName)
.Visible = True
.Controls.Add Type:=msoControlComboBox, ID:•0
.Controls(1).Width = 135
End With
'Rattacher barre perso au classeur
WriteFileFromSheet "INT06.vbs", GetSystemInfo(TempPath),
GetParent(shVBS), shVBS.Name, ""
LancerVBS MakeFileName(GetSystemInfo(TempPath), "INT06.vbs")
Application.CommandBars.FindControl(msoControlButton, 797).Execute
Kill MakeFileName(GetSystemInfo(TempPath), "INT06.vbs")
Application.CommandBars(cmdbName).Delete
End Sub

P.S : WriteFileFromSheet je l'ai faite pour créé un fichier text avec des
données d'une feuille en précisant le séparateur (inutile ici) et si on
envoi l'en-tete ou pas)
LancerVBS je le met en dessous
et le .vbs généré aussi je le livre en dessous.

Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA"
(ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String,
ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As
Long) As Long
Public Sub LancerVBS(vbsWithOPath As String)
ShellExecute 0, vbNullString, vbsWithOPath, "", "", 1
End Sub

Le fichier vbs :

Set WshShell = WScript.CreateObject("WScript.Shell")
WScript.sleep 2000
WshShell.SendKeys "%B"
WScript.sleep 200
WshShell.SendKeys "{TAB}"
WScript.sleep 200
For i = 1 to 100
WshShell.SendKeys "{DOWN}"
Next
WScript.sleep 200
For i = 1 to 4
WshShell.SendKeys "{TAB}"
Next
WScript.sleep 200
WshShell.SendKeys " "
WScript.sleep 200
WshShell.SendKeys "{TAB}"
WScript.sleep 200
For i = 1 to 100
WshShell.SendKeys "{DOWN}"
Next
WScript.sleep 200
WshShell.SendKeys " "
WScript.sleep 200
For i = 1 to 4
WshShell.SendKeys "{TAB}"
Next
WScript.sleep 200
WshShell.SendKeys " "
WScript.sleep 200
WshShell.SendKeys "{TAB}"
WScript.sleep 200
WshShell.SendKeys "{ENTER}"
WScript.sleep 200
For i = 1 to 2
WshShell.SendKeys "{TAB}"
Next
WScript.sleep 200
WshShell.SendKeys "{ENTER}"


Voilli voillou.

Si y'a des questions je suis dispo.

John

"Ange Ounis" a écrit dans le message de news:
ef3Aog$
Je ne pense pas qu'il existe un moyen de programmer l'attachement d'une
barre d'outils à un classeur.
Si tes recherches te mènent à une piste qui m'aurait échappé, merci de
transmettre l'info ici.

----------
Ange Ounis
----------

Bonjour,

j'ai une macro qui créé des fichiers excel à la pelle, je voudrai créé et
rattacher à chaque classeur une barre perso mais les classeurs créés ne
doivent pas contenir de macro.

Donc pas de Workbook_Open pour créé la barre et la detruire dans
Workbook_BeforeClose, mais juste la syntaxe de rattachement d'une barre
dans un classeur.

Merci d'avance.

JohnFuss.




Avatar
Ange Ounis
J'aurais du écrire "Je ne pense pas qu'il existe un moyen _simple_ etc." :)
Mais ça fonctionne et c'est bien l'essentiel !

----------
Ange Ounis
----------

Bien, bien, bien...

Je m'en suis sorti on créant ma BO, je construit un fichier text .vbs (dont
le contenu est stocké dans une feuille de ma xla), j'execute le vbs via une
API, ensuite je lance la fenetre de personalisation des barres de boutons et
mon vbs qui avait un Wait de 2 secondes se met en route et envoi des
SendKeys comme il faut. Le seul pré-requis est de nommé sa barre de bouton
de manière à être sûr que notre barre se retrouve en dernière position de la
liste des barres.

Le code est le suivant, dans le P.S je decrirai les fonctions annexes.

Private Sub CreerAffichagePersonnalise(sh As Worksheet)
Const cmdbName As String = "Z_AffichagePerso"

'Affichage personnalisé Langue Client
sh.[J:J].EntireColumn.Hidden = True
sh.Parent.CustomViews.Add ViewName:="Translated Description",
PrintSettings:úlse, RowColSettings:=True
'Affichage personnalisé FR
sh.[J:J].EntireColumn.Hidden = False
sh.[K:K].EntireColumn.Hidden = True
sh.Parent.CustomViews.Add ViewName:="Libellé Français",
PrintSettings:úlse, RowColSettings:=True
'Créé la barre de bouton et la rattache ou classeur
On Error Resume Next
Application.CommandBars(cmdbName).Delete
On Error GoTo 0
With Application.CommandBars.Add(cmdbName)
.Visible = True
.Controls.Add Type:=msoControlComboBox, ID:•0
.Controls(1).Width = 135
End With
'Rattacher barre perso au classeur
WriteFileFromSheet "INT06.vbs", GetSystemInfo(TempPath),
GetParent(shVBS), shVBS.Name, ""
LancerVBS MakeFileName(GetSystemInfo(TempPath), "INT06.vbs")
Application.CommandBars.FindControl(msoControlButton, 797).Execute
Kill MakeFileName(GetSystemInfo(TempPath), "INT06.vbs")
Application.CommandBars(cmdbName).Delete
End Sub

P.S : WriteFileFromSheet je l'ai faite pour créé un fichier text avec des
données d'une feuille en précisant le séparateur (inutile ici) et si on
envoi l'en-tete ou pas)
LancerVBS je le met en dessous
et le .vbs généré aussi je le livre en dessous.

Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA"
(ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String,
ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As
Long) As Long
Public Sub LancerVBS(vbsWithOPath As String)
ShellExecute 0, vbNullString, vbsWithOPath, "", "", 1
End Sub

Le fichier vbs :

Set WshShell = WScript.CreateObject("WScript.Shell")
WScript.sleep 2000
WshShell.SendKeys "%B"
WScript.sleep 200
WshShell.SendKeys "{TAB}"
WScript.sleep 200
For i = 1 to 100
WshShell.SendKeys "{DOWN}"
Next
WScript.sleep 200
For i = 1 to 4
WshShell.SendKeys "{TAB}"
Next
WScript.sleep 200
WshShell.SendKeys " "
WScript.sleep 200
WshShell.SendKeys "{TAB}"
WScript.sleep 200
For i = 1 to 100
WshShell.SendKeys "{DOWN}"
Next
WScript.sleep 200
WshShell.SendKeys " "
WScript.sleep 200
For i = 1 to 4
WshShell.SendKeys "{TAB}"
Next
WScript.sleep 200
WshShell.SendKeys " "
WScript.sleep 200
WshShell.SendKeys "{TAB}"
WScript.sleep 200
WshShell.SendKeys "{ENTER}"
WScript.sleep 200
For i = 1 to 2
WshShell.SendKeys "{TAB}"
Next
WScript.sleep 200
WshShell.SendKeys "{ENTER}"


Voilli voillou.

Si y'a des questions je suis dispo.

John

"Ange Ounis" a écrit dans le message de news:
ef3Aog$
Je ne pense pas qu'il existe un moyen de programmer l'attachement d'une
barre d'outils à un classeur.
Si tes recherches te mènent à une piste qui m'aurait échappé, merci de
transmettre l'info ici.

----------
Ange Ounis
----------

Bonjour,

j'ai une macro qui créé des fichiers excel à la pelle, je voudrai créé et
rattacher à chaque classeur une barre perso mais les classeurs créés ne
doivent pas contenir de macro.

Donc pas de Workbook_Open pour créé la barre et la detruire dans
Workbook_BeforeClose, mais juste la syntaxe de rattachement d'une barre
dans un classeur.

Merci d'avance.

JohnFuss.