OVH Cloud OVH Cloud

VBA : positionnement d'une barre d'outils

16 réponses
Avatar
Quetzalcoatl
Bonjour,

J'utilise EXCEL 97 SR-2.
J'ai une macro VBA qui crée et affiche une barre d'outil (1 seul bouton, qui
active une macro) à l'ouverture du classeur (et la supprime à la fermeture, ou
la masque si la fenêtre est désactivée).

Dim tb As CommandBar
Dim statusBarInitial As Boolean
Set tb = Application.CommandBars.Add _
(Name:=namePTB, Position:=msoBarTop, _
MenuBar:=False, Temporary:=False)
With tb.Controls.Add(msoControlButton)
.style = msoButtonIconAndCaption
.Caption = "Saisie Auto ON/OFF"
.FaceId = icon
.OnAction = "saisie_automatique_ON_OFF_toggle"
.TooltipText = "Saisie automatique :" _
& vbCrLf & "ON/OFF"
End With
tb.Visible = True
End Sub

Je voudrais éviter que cette barre d'outil ne vienne occuper une ligne
supplémentaire de l'écran, alors qu'il reste de la place à côté des autres
barres d'outils affichées ("standard" et "mise en forme"). Comment faire ?
Peut-être ajouter (puis supprimer) un bouton à une barre existante plutôt que de
créer une nouvelle barre ?

Merci d'avance pour toute indication.

--
Adeus

6 réponses

1 2
Avatar
Papyty
Salut @ Tous,
Quetzalcoatl a écrit:

Pour contourner cette difficulté, j'ai placé un appel à TestEtat en fin de
saisie_automatique_ON_OFF_toggle(), et ça fonctionne.


Super, l'important c'est que ça marche ;-)))
--
@+
Thierry

Avatar
sabatier
on se contente de bien peu, papyty...
jps

Papyty wrote:

Salut @ Tous,
Quetzalcoatl a écrit:

Pour contourner cette difficulté, j'ai placé un appel à TestEtat en fin de
saisie_automatique_ON_OFF_toggle(), et ça fonctionne.


Super, l'important c'est que ça marche ;-)))
--
@+
Thierry



Avatar
Papyty
Salut @ Tous, sabatier a écrit:
on se contente de bien peu, papyty...
jps



Ben j'ai déja vu pas mal de choses à optimiser mais pas trop le temps, mais
d'ici deux trois jours je pourrais surement dire mieux.
Mais vos idées seront les bien venues aussi ;-)))

--
@+
Thierry

Avatar
Papyty
Salut @ Tous, Quetzalcoatl a écrit:

Pour contourner cette difficulté, j'ai placé un appel à TestEtat en fin de
saisie_automatique_ON_OFF_toggle(), et ça fonctionne.


Oui Quetzalcoatl apres tests et vérifications je pense que t'as trouvé la
meilleure solution.
J'ai un peu optimisé le code et voici ce que ça donne, enfin à mon modeste
niveau. Mais je serais heureus si jps à mieux car le VBA ça m'interresse
fortement et vu que je débute je suis vraiment à l'écoute de vos
contributions sur ce newsgroups.

ThisWorkbook:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
DeletePTB
On Error Resume Next
ActiveWorkbook.Names.Add Name:="saisie_auto_on", _
RefersTo:="=0"
End Sub

Private Sub Workbook_Open()
ActiveWorkbook.Names.Add Name:="saisie_auto_on", _
RefersTo:="=0"
CreatePTB
End Sub

Private Sub Workbook_WindowActivate(ByVal Wn As Window)
TestEtat
End Sub

Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
On Error Resume Next
With Application.CommandBars("Standard")
.Controls(namePTB).Visible = False
.Controls(namePTB2).Visible = False
End With
End Sub
______________________________________________________________

Module Standard

Public Const namePTB As String = "Saisie Auto ON/OFF"
Public Const namePTB2 As String = "Saisie Auto ON/OFF "

Sub CreatePTB()
Dim Btn As CommandBarButton
On Error Resume Next
With Application.CommandBars("Standard")
.Controls(namePTB).Visible = True
If Err <> 0 Then
Set Btn = .Controls.Add(Type:=msoControlButton)
End If
.Controls(namePTB2).Visible = True
If Err <> 0 Then
Set Btn2 = .Controls.Add(Type:=msoControlButton)
End If
End With
With Btn
.BeginGroup = True
.Style = msoButtonIconAndCaption
.Caption = namePTB
.FaceId = 59
.OnAction = "saisie_automatique_ON_OFF_toggle"
.TooltipText = "Saisie automatique :" _
& vbCrLf & "ON/OFF"
.Visible = False
End With
With Btn2
.BeginGroup = True
.Style = msoButtonIconAndCaption
.Caption = namePTB2
.FaceId = 1019
.OnAction = "saisie_automatique_ON_OFF_toggle"
.TooltipText = "Saisie automatique :" _
& vbCrLf & "ON/OFF"
.Visible = True
End With
End Sub

Sub DeletePTB()
On Error Resume Next
With Application.CommandBars("Standard")
.Controls(namePTB).Delete
.Controls(namePTB2).Delete
End With
End Sub

Sub saisie_automatique_ON_OFF_toggle()
If ActiveWorkbook.Names("saisie_auto_on") = "=1" Then
ActiveWorkbook.Names.Add Name:="saisie_auto_on", RefersTo:="=0"
Else
ActiveWorkbook.Names.Add Name:="saisie_auto_on", RefersTo:="=1"
End If
TestEtat
End Sub

Sub TestEtat()
On Error Resume Next
If ActiveWorkbook.Names("saisie_auto_on") = "=1" Then
With Application.CommandBars("Standard")
.Controls(namePTB2).Visible = False
.Controls(namePTB).Visible = True
End With
Else
With Application.CommandBars("Standard")
.Controls(namePTB).Visible = False
.Controls(namePTB2).Visible = True
End With
End If
End Sub

--
@+
Thierry

Avatar
Quetzalcoatl

Oui Quetzalcoatl apres tests et vérifications je pense que t'as trouvé la
meilleure solution.
J'ai un peu optimisé le code et voici ce que ça donne, enfin à mon modeste
niveau. Mais je serais heureus si jps à mieux car le VBA ça m'interresse
fortement et vu que je débute je suis vraiment à l'écoute de vos
contributions sur ce newsgroups.


Merci.
Je suis intéressé aussi par d'éventuelles optimisations, pour apprendre. Parce
que là, je ne vois pas ce qu'on pourrait optimiser.
A moins qu'il existe la possibilité dans EXCEL de créer un "bouton" qui possède
de base 2 états possibles ou qqchose comme ça.
Mais bon, il faudrait voir ce que ça apporterait de plus.

Cordialement.
--
Farewell

Avatar
Quetzalcoatl
on se contente de bien peu, papyty...
jps


Silence radio ?
--
Ite missa est

1 2