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 ?
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
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
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 ;-)))
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
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
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
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
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
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.
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.