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 ?
Salut @ Tous, Quetzalcoatl a écrit: 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. Essai ceci pour ajouter ta barre dans la barre standard testé sur 2000, si
t'as un probleme sur 97 revient.
Sub TTest() Dim Tb As CommandBarButton 'Dim statusBarInitial As Boolean Set Tb = Application.CommandBars("Standard").Controls.Add _ (Type:=msoControlButton) With Tb .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
-- @+ Thierry
Salut @ Tous, Quetzalcoatl a écrit:
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.
Essai ceci pour ajouter ta barre dans la barre standard testé sur 2000, si
t'as un probleme sur 97 revient.
Sub TTest()
Dim Tb As CommandBarButton
'Dim statusBarInitial As Boolean
Set Tb = Application.CommandBars("Standard").Controls.Add _
(Type:=msoControlButton)
With Tb
.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
Salut @ Tous, Quetzalcoatl a écrit: 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. Essai ceci pour ajouter ta barre dans la barre standard testé sur 2000, si
t'as un probleme sur 97 revient.
Sub TTest() Dim Tb As CommandBarButton 'Dim statusBarInitial As Boolean Set Tb = Application.CommandBars("Standard").Controls.Add _ (Type:=msoControlButton) With Tb .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
-- @+ Thierry
Papyty
Salut @ Tous, Quetzalcoatl a écrit:
(puis supprimer) un bouton à une barre existante
Pour supprimer
Sub SupBarre() On Error Resume Next Application.CommandBars("Standard"). _ Controls("Saisie Auto ON/OFF").Delete End Sub
-- @+ Thierry
Salut @ Tous,
Quetzalcoatl a écrit:
(puis supprimer) un bouton à une barre existante
Pour supprimer
Sub SupBarre()
On Error Resume Next
Application.CommandBars("Standard"). _
Controls("Saisie Auto ON/OFF").Delete
End Sub
Sub SupBarre() On Error Resume Next Application.CommandBars("Standard"). _ Controls("Saisie Auto ON/OFF").Delete End Sub
-- @+ Thierry
Quetzalcoatl
Pour supprimer
Sub SupBarre() On Error Resume Next Application.CommandBars("Standard"). _ Controls("Saisie Auto ON/OFF").Delete End Sub
Merci bcp. Ca fonctionne bien avec EXCEL 97 lorsque je lance les macros à la main. En revanche, lorsque j'intègre les macros à mon programme, j'ai un problème, que je n'avais pas lorsque je créais/détruisais une barre personnalisée. Je deviens chèvre ! J'essaie d'expliquer ci-dessous.
- Mon bouton peut avoir 2 Face-Id : actif ou inactif. - A l'ouverture du classeur, je crée le bouton inactif. - Sur appui sur le bouton, j'active une macro qui appelle une macro qui efface le bouton et une macro qui le re-crée dans l'état opposé. - A la fermeture du classeur, j'efface le bouton.
Bon. J'ouvre mon classeur, le bouton est bien créé à l'état inactif, mais si je clique dessus, loin d'être effacé, un deuxième bouton est créé dans l'état opposé. Si je continue à cliquer sur le premier bouton, je crée autant de nouveaux boutons, chacun opposé à celui qui précède. Si je clique sur un bouton autre que le premier, il n'y a pas de création de nouveau bouton et je fait changer d'état (c'est-à-dire j'efface et je re-crée dans l'état opposé) tous les boutons sauf le premier. Le pas-à-pas montre que c'est l'effacement qui ne fonctionne pas, seulement pour le premier bouton. Pourtant, la même macro d'effacement fonctionne à la fermeture du classeur, ou bien sur activation manuelle. De même, la macro liée au bouton, lancée manuellement après ouverture du classeur, donne le bon résultat.
Fichtre ! Lorsque je remplace la création d'un bouton dans la barre "Standard" par la création d'un bouton dans une barre "perso", ça fonctionne bien. Je n'y comprends rien ! HELP !
-- Farewell
Pour supprimer
Sub SupBarre()
On Error Resume Next
Application.CommandBars("Standard"). _
Controls("Saisie Auto ON/OFF").Delete
End Sub
Merci bcp.
Ca fonctionne bien avec EXCEL 97 lorsque je lance les macros à la main.
En revanche, lorsque j'intègre les macros à mon programme, j'ai un problème, que
je n'avais pas lorsque je créais/détruisais une barre personnalisée. Je deviens
chèvre !
J'essaie d'expliquer ci-dessous.
- Mon bouton peut avoir 2 Face-Id : actif ou inactif.
- A l'ouverture du classeur, je crée le bouton inactif.
- Sur appui sur le bouton, j'active une macro qui appelle une macro qui efface
le bouton et une macro qui le re-crée dans l'état opposé.
- A la fermeture du classeur, j'efface le bouton.
Bon. J'ouvre mon classeur, le bouton est bien créé à l'état inactif, mais si je
clique dessus, loin d'être effacé, un deuxième bouton est créé dans l'état
opposé. Si je continue à cliquer sur le premier bouton, je crée autant de
nouveaux boutons, chacun opposé à celui qui précède. Si je clique sur un bouton
autre que le premier, il n'y a pas de création de nouveau bouton et je fait
changer d'état (c'est-à-dire j'efface et je re-crée dans l'état opposé) tous les
boutons sauf le premier.
Le pas-à-pas montre que c'est l'effacement qui ne fonctionne pas, seulement pour
le premier bouton.
Pourtant, la même macro d'effacement fonctionne à la fermeture du classeur, ou
bien sur activation manuelle.
De même, la macro liée au bouton, lancée manuellement après ouverture du
classeur, donne le bon résultat.
Fichtre ! Lorsque je remplace la création d'un bouton dans la barre "Standard"
par la création d'un bouton dans une barre "perso", ça fonctionne bien. Je n'y
comprends rien ! HELP !
Sub SupBarre() On Error Resume Next Application.CommandBars("Standard"). _ Controls("Saisie Auto ON/OFF").Delete End Sub
Merci bcp. Ca fonctionne bien avec EXCEL 97 lorsque je lance les macros à la main. En revanche, lorsque j'intègre les macros à mon programme, j'ai un problème, que je n'avais pas lorsque je créais/détruisais une barre personnalisée. Je deviens chèvre ! J'essaie d'expliquer ci-dessous.
- Mon bouton peut avoir 2 Face-Id : actif ou inactif. - A l'ouverture du classeur, je crée le bouton inactif. - Sur appui sur le bouton, j'active une macro qui appelle une macro qui efface le bouton et une macro qui le re-crée dans l'état opposé. - A la fermeture du classeur, j'efface le bouton.
Bon. J'ouvre mon classeur, le bouton est bien créé à l'état inactif, mais si je clique dessus, loin d'être effacé, un deuxième bouton est créé dans l'état opposé. Si je continue à cliquer sur le premier bouton, je crée autant de nouveaux boutons, chacun opposé à celui qui précède. Si je clique sur un bouton autre que le premier, il n'y a pas de création de nouveau bouton et je fait changer d'état (c'est-à-dire j'efface et je re-crée dans l'état opposé) tous les boutons sauf le premier. Le pas-à-pas montre que c'est l'effacement qui ne fonctionne pas, seulement pour le premier bouton. Pourtant, la même macro d'effacement fonctionne à la fermeture du classeur, ou bien sur activation manuelle. De même, la macro liée au bouton, lancée manuellement après ouverture du classeur, donne le bon résultat.
Fichtre ! Lorsque je remplace la création d'un bouton dans la barre "Standard" par la création d'un bouton dans une barre "perso", ça fonctionne bien. Je n'y comprends rien ! HELP !
-- Farewell
Papyty
Salut @ Tous, Quetzalcoatl a écrit:
Fichtre ! Lorsque je remplace la création d'un bouton dans la barre "Standard" par la création d'un bouton dans une barre "perso", ça fonctionne bien. Je n'y comprends rien ! HELP !
Peux tu joindre tes différentes macros concernant ce bouton en précisant celles de (je suppose) ThisWorkBook -- @+ Thierry
Salut @ Tous, Quetzalcoatl a écrit:
Fichtre ! Lorsque je remplace la création d'un bouton dans la barre "Standard"
par la création d'un bouton dans une barre "perso", ça fonctionne bien. Je n'y
comprends rien ! HELP !
Peux tu joindre tes différentes macros concernant ce bouton en précisant
celles de (je suppose) ThisWorkBook
--
@+
Thierry
Fichtre ! Lorsque je remplace la création d'un bouton dans la barre "Standard" par la création d'un bouton dans une barre "perso", ça fonctionne bien. Je n'y comprends rien ! HELP !
Peux tu joindre tes différentes macros concernant ce bouton en précisant celles de (je suppose) ThisWorkBook -- @+ Thierry
Quetzalcoatl
Je joins le code, parce que je me rends compte que mes explications... sont confuses ! Merci d'avance pour toute idée.
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 (inactif) End Sub
Private Sub Workbook_WindowActivate(ByVal Wn As Window) On Error Resume Next Application.CommandBars(namePTB).Visible = True If ActiveWorkbook.Names("saisie_auto_on") = "=1" _ Then CreatePTB (actif) _ Else CreatePTB (inactif) End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window) On Error Resume Next Application.CommandBars(namePTB).Visible = False End Sub
MODULE1: Public Const namePTB As String = "MyPrivateToolsBar" Public Const actif As Integer = 59 Public Const inactif As Integer = 1019
Sub CreatePTB(icon) Dim Btn As CommandBarButton On Error Resume Next DeletePTB Set Btn = Application.CommandBars("Standard").Controls.Add _ (Type:=msoControlButton) With Btn .BeginGroup = True .style = msoButtonIconAndCaption .Caption = "Saisie Auto ON/OFF" .FaceId = icon .OnAction = "saisie_automatique_ON_OFF_toggle" .TooltipText = "Saisie automatique :" _ & vbCrLf & "ON/OFF" End With Btn.Visible = True End Sub
Sub DeletePTB() On Error Resume Next Application.CommandBars("Standard").Controls("Saisie Auto ON/OFF").Delete End Sub
Sub saisie_automatique_ON_OFF_toggle() Dim icon As Variant If ActiveWorkbook.Names("saisie_auto_on") = "=1" Then ActiveWorkbook.Names.Add Name:="saisie_auto_on", RefersTo:="=0" icon = inactif Else ActiveWorkbook.Names.Add Name:="saisie_auto_on", RefersTo:="=1" icon = actif End If CreatePTB (icon) End Sub
-- Salute a tutti !
Je joins le code, parce que je me rends compte que mes explications... sont
confuses !
Merci d'avance pour toute idée.
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 (inactif)
End Sub
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
On Error Resume Next
Application.CommandBars(namePTB).Visible = True
If ActiveWorkbook.Names("saisie_auto_on") = "=1" _
Then CreatePTB (actif) _
Else CreatePTB (inactif)
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
On Error Resume Next
Application.CommandBars(namePTB).Visible = False
End Sub
MODULE1:
Public Const namePTB As String = "MyPrivateToolsBar"
Public Const actif As Integer = 59
Public Const inactif As Integer = 1019
Sub CreatePTB(icon)
Dim Btn As CommandBarButton
On Error Resume Next
DeletePTB
Set Btn = Application.CommandBars("Standard").Controls.Add _
(Type:=msoControlButton)
With Btn
.BeginGroup = True
.style = msoButtonIconAndCaption
.Caption = "Saisie Auto ON/OFF"
.FaceId = icon
.OnAction = "saisie_automatique_ON_OFF_toggle"
.TooltipText = "Saisie automatique :" _
& vbCrLf & "ON/OFF"
End With
Btn.Visible = True
End Sub
Sub DeletePTB()
On Error Resume Next
Application.CommandBars("Standard").Controls("Saisie Auto ON/OFF").Delete
End Sub
Sub saisie_automatique_ON_OFF_toggle()
Dim icon As Variant
If ActiveWorkbook.Names("saisie_auto_on") = "=1" Then
ActiveWorkbook.Names.Add Name:="saisie_auto_on", RefersTo:="=0"
icon = inactif
Else
ActiveWorkbook.Names.Add Name:="saisie_auto_on", RefersTo:="=1"
icon = actif
End If
CreatePTB (icon)
End Sub
Je joins le code, parce que je me rends compte que mes explications... sont confuses ! Merci d'avance pour toute idée.
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 (inactif) End Sub
Private Sub Workbook_WindowActivate(ByVal Wn As Window) On Error Resume Next Application.CommandBars(namePTB).Visible = True If ActiveWorkbook.Names("saisie_auto_on") = "=1" _ Then CreatePTB (actif) _ Else CreatePTB (inactif) End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window) On Error Resume Next Application.CommandBars(namePTB).Visible = False End Sub
MODULE1: Public Const namePTB As String = "MyPrivateToolsBar" Public Const actif As Integer = 59 Public Const inactif As Integer = 1019
Sub CreatePTB(icon) Dim Btn As CommandBarButton On Error Resume Next DeletePTB Set Btn = Application.CommandBars("Standard").Controls.Add _ (Type:=msoControlButton) With Btn .BeginGroup = True .style = msoButtonIconAndCaption .Caption = "Saisie Auto ON/OFF" .FaceId = icon .OnAction = "saisie_automatique_ON_OFF_toggle" .TooltipText = "Saisie automatique :" _ & vbCrLf & "ON/OFF" End With Btn.Visible = True End Sub
Sub DeletePTB() On Error Resume Next Application.CommandBars("Standard").Controls("Saisie Auto ON/OFF").Delete End Sub
Sub saisie_automatique_ON_OFF_toggle() Dim icon As Variant If ActiveWorkbook.Names("saisie_auto_on") = "=1" Then ActiveWorkbook.Names.Add Name:="saisie_auto_on", RefersTo:="=0" icon = inactif Else ActiveWorkbook.Names.Add Name:="saisie_auto_on", RefersTo:="=1" icon = actif End If CreatePTB (icon) End Sub
-- Salute a tutti !
Papyty
Salut @ Tous, Quetzalcoatl a écrit:
Je joins le code, parce que je me rends compte que mes explications... sont confuses ! Merci d'avance pour toute idée.
Il y avait quelques petites erreurs dans les noms des barres mais ça n'aurais pas fonctionné car il parrait impossible de modifier un contrôle pendant un OnAction. j'ai contourné le probléme en créant les deux boutons et en faisant afficher l'un ou l'autre selon ton test:
dans 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_SheetCalculate(ByVal Sh As Object) TestEtat 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 ___________________________________________________
Dans le module:
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 Application.CommandBars("Standard").Controls(namePTB).Visible = True If Err <> 0 Then Set Btn = Application.CommandBars("Standard").Controls.Add _ (Type:=msoControlButton) End If Application.CommandBars("Standard").Controls(namePTB2).Visible = True If Err <> 0 Then Set Btn2 = Application.CommandBars("Standard").Controls.Add _ (Type:=msoControlButton) End If With Btn .BeginGroup = True .Style = msoButtonIconAndCaption .Caption = namePTB .FaceId = 59 .OnAction = "saisie_automatique_ON_OFF_toggle" .TooltipText = "Saisie automatique :" _ & vbCrLf & "ON/OFF" End With With Btn2 .BeginGroup = True .Style = msoButtonIconAndCaption .Caption = namePTB2 .FaceId = 1019 .OnAction = "saisie_automatique_ON_OFF_toggle" .TooltipText = "Saisie automatique :" _ & vbCrLf & "ON/OFF" End With Btn.Visible = False Btn2.Visible = True End Sub
Sub DeletePTB() On Error Resume Next Application.CommandBars("Standard").Controls(namePTB).Delete Application.CommandBars("Standard").Controls(namePTB2).Delete End Sub
Sub saisie_automatique_ON_OFF_toggle() Dim icon As Variant 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 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 ___________________________________________________________________
Est ce que ça gaz??
-- @+ Thierry
Salut @ Tous,
Quetzalcoatl a écrit:
Je joins le code, parce que je me rends compte que mes explications... sont
confuses !
Merci d'avance pour toute idée.
Il y avait quelques petites erreurs dans les noms des barres mais ça
n'aurais pas fonctionné car il parrait impossible de modifier un contrôle
pendant un OnAction.
j'ai contourné le probléme en créant les deux boutons et en faisant
afficher l'un ou l'autre selon ton test:
dans 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_SheetCalculate(ByVal Sh As Object)
TestEtat
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
___________________________________________________
Dans le module:
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
Application.CommandBars("Standard").Controls(namePTB).Visible = True
If Err <> 0 Then
Set Btn = Application.CommandBars("Standard").Controls.Add _
(Type:=msoControlButton)
End If
Application.CommandBars("Standard").Controls(namePTB2).Visible = True
If Err <> 0 Then
Set Btn2 = Application.CommandBars("Standard").Controls.Add _
(Type:=msoControlButton)
End If
With Btn
.BeginGroup = True
.Style = msoButtonIconAndCaption
.Caption = namePTB
.FaceId = 59
.OnAction = "saisie_automatique_ON_OFF_toggle"
.TooltipText = "Saisie automatique :" _
& vbCrLf & "ON/OFF"
End With
With Btn2
.BeginGroup = True
.Style = msoButtonIconAndCaption
.Caption = namePTB2
.FaceId = 1019
.OnAction = "saisie_automatique_ON_OFF_toggle"
.TooltipText = "Saisie automatique :" _
& vbCrLf & "ON/OFF"
End With
Btn.Visible = False
Btn2.Visible = True
End Sub
Sub DeletePTB()
On Error Resume Next
Application.CommandBars("Standard").Controls(namePTB).Delete
Application.CommandBars("Standard").Controls(namePTB2).Delete
End Sub
Sub saisie_automatique_ON_OFF_toggle()
Dim icon As Variant
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
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
___________________________________________________________________
Je joins le code, parce que je me rends compte que mes explications... sont confuses ! Merci d'avance pour toute idée.
Il y avait quelques petites erreurs dans les noms des barres mais ça n'aurais pas fonctionné car il parrait impossible de modifier un contrôle pendant un OnAction. j'ai contourné le probléme en créant les deux boutons et en faisant afficher l'un ou l'autre selon ton test:
dans 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_SheetCalculate(ByVal Sh As Object) TestEtat 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 ___________________________________________________
Dans le module:
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 Application.CommandBars("Standard").Controls(namePTB).Visible = True If Err <> 0 Then Set Btn = Application.CommandBars("Standard").Controls.Add _ (Type:=msoControlButton) End If Application.CommandBars("Standard").Controls(namePTB2).Visible = True If Err <> 0 Then Set Btn2 = Application.CommandBars("Standard").Controls.Add _ (Type:=msoControlButton) End If With Btn .BeginGroup = True .Style = msoButtonIconAndCaption .Caption = namePTB .FaceId = 59 .OnAction = "saisie_automatique_ON_OFF_toggle" .TooltipText = "Saisie automatique :" _ & vbCrLf & "ON/OFF" End With With Btn2 .BeginGroup = True .Style = msoButtonIconAndCaption .Caption = namePTB2 .FaceId = 1019 .OnAction = "saisie_automatique_ON_OFF_toggle" .TooltipText = "Saisie automatique :" _ & vbCrLf & "ON/OFF" End With Btn.Visible = False Btn2.Visible = True End Sub
Sub DeletePTB() On Error Resume Next Application.CommandBars("Standard").Controls(namePTB).Delete Application.CommandBars("Standard").Controls(namePTB2).Delete End Sub
Sub saisie_automatique_ON_OFF_toggle() Dim icon As Variant 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 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 ___________________________________________________________________
Est ce que ça gaz??
-- @+ Thierry
Quetzalcoatl
Salut @ Tous, Bonjour et grand merci !
Il y avait quelques petites erreurs dans les noms des barres oui, je me suis rendu compte après coup que j'avais laissé dans le code quelques
scories de l'ancien code, avec lequel je créais une barre d'outils personnalisée
mais ça n'aurais pas fonctionné car il parrait impossible de modifier un contrôle pendant un OnAction. c'est ça que je ne comprends pas : si je crée une barre d'outils personnalisée
avec un bouton, je peux deleter cette barre (et le bouton avec !) pendant le OnAction de ce bouton.
j'ai contourné le probléme en créant les deux boutons et en faisant afficher l'un ou l'autre selon ton test: Merci, excellente idée.
J'ai un problème ici, TestEtat ne s'active pas (c'est censé s'activer quand ?).
Incidemment, y a-t-il d'autres manières d'accéder à un bouton que par son "caption" ? (il peut ne pas en avoir, dans ce cas, sait-on y accéder par le Face-Id par exemple ?). Ceci pour contourner le "Saisie Auto ON/OFF " (néanmoins fort astucieux !)
Encore merci. -- Hasta la vista
Salut @ Tous,
Bonjour et grand merci !
Il y avait quelques petites erreurs dans les noms des barres
oui, je me suis rendu compte après coup que j'avais laissé dans le code quelques
scories de l'ancien code, avec lequel je créais une barre d'outils personnalisée
mais ça
n'aurais pas fonctionné car il parrait impossible de modifier un contrôle
pendant un OnAction.
c'est ça que je ne comprends pas : si je crée une barre d'outils personnalisée
avec un bouton, je peux deleter cette barre (et le bouton avec !) pendant le
OnAction de ce bouton.
j'ai contourné le probléme en créant les deux boutons et en faisant
afficher l'un ou l'autre selon ton test:
Merci, excellente idée.
J'ai un problème ici, TestEtat ne s'active pas (c'est censé s'activer quand ?).
Incidemment, y a-t-il d'autres manières d'accéder à un bouton que par son
"caption" ? (il
peut ne pas en avoir, dans ce cas, sait-on y accéder par le Face-Id par exemple
?). Ceci pour contourner le "Saisie Auto ON/OFF " (néanmoins fort astucieux !)
Il y avait quelques petites erreurs dans les noms des barres oui, je me suis rendu compte après coup que j'avais laissé dans le code quelques
scories de l'ancien code, avec lequel je créais une barre d'outils personnalisée
mais ça n'aurais pas fonctionné car il parrait impossible de modifier un contrôle pendant un OnAction. c'est ça que je ne comprends pas : si je crée une barre d'outils personnalisée
avec un bouton, je peux deleter cette barre (et le bouton avec !) pendant le OnAction de ce bouton.
j'ai contourné le probléme en créant les deux boutons et en faisant afficher l'un ou l'autre selon ton test: Merci, excellente idée.
J'ai un problème ici, TestEtat ne s'active pas (c'est censé s'activer quand ?).
Incidemment, y a-t-il d'autres manières d'accéder à un bouton que par son "caption" ? (il peut ne pas en avoir, dans ce cas, sait-on y accéder par le Face-Id par exemple ?). Ceci pour contourner le "Saisie Auto ON/OFF " (néanmoins fort astucieux !)
Encore merci. -- Hasta la vista
Papyty
Salut @ Tous, Quetzalcoatl a écrit:
J'ai un problème ici, TestEtat ne s'active pas (c'est censé s'activer quand ?). Donc le principe est quand tu cliques sur le bouton On/Off ça lance ta
macro saisie_automatique_ON_OFF_toggle donc qui change le RefersTo (et pourrais faire ce que tu veux d'autre), ensuite quand cette macro est terminée on peut agir sur les boutons. C'est ce que fait TestEtat et renvoi le bon bouton adéquate celon le RefersTo dans Workbook_SheetCalculate.
Incidemment, y a-t-il d'autres manières d'accéder à un bouton que par son "caption" ?
Oui par son N°ID, mais ça ne change pas le probleme de modifier le bouton quand on clique dessus donc tant qu'il est actif.
(il peut ne pas en avoir, dans ce cas, sait-on y accéder par le Face-Id par exemple ?). Ceci pour contourner le "Saisie Auto ON/OFF " (néanmoins fort astucieux !)
Donc pour te proposer une solution plus simple il faudrait me dire ce que tu veux faire avec ce bouton. Lancer une autre macro certainement ;-)) en fait à quoi correspond le On et le Off.
-- @+ Thierry
Salut @ Tous, Quetzalcoatl a écrit:
J'ai un problème ici, TestEtat ne s'active pas (c'est censé s'activer quand ?).
Donc le principe est quand tu cliques sur le bouton On/Off ça lance ta
macro saisie_automatique_ON_OFF_toggle donc qui change le RefersTo (et
pourrais faire ce que tu veux d'autre), ensuite quand cette macro est
terminée on peut agir sur les boutons. C'est ce que fait TestEtat et renvoi
le bon bouton adéquate celon le RefersTo dans Workbook_SheetCalculate.
Incidemment, y a-t-il d'autres manières d'accéder à un bouton que par son
"caption" ?
Oui par son N°ID, mais ça ne change pas le probleme de modifier le bouton
quand on clique dessus donc tant qu'il est actif.
(il
peut ne pas en avoir, dans ce cas, sait-on y accéder par le Face-Id par exemple
?). Ceci pour contourner le "Saisie Auto ON/OFF " (néanmoins fort astucieux !)
Donc pour te proposer une solution plus simple il faudrait me dire ce que
tu veux faire avec ce bouton. Lancer une autre macro certainement ;-)) en
fait à quoi correspond le On et le Off.
J'ai un problème ici, TestEtat ne s'active pas (c'est censé s'activer quand ?). Donc le principe est quand tu cliques sur le bouton On/Off ça lance ta
macro saisie_automatique_ON_OFF_toggle donc qui change le RefersTo (et pourrais faire ce que tu veux d'autre), ensuite quand cette macro est terminée on peut agir sur les boutons. C'est ce que fait TestEtat et renvoi le bon bouton adéquate celon le RefersTo dans Workbook_SheetCalculate.
Incidemment, y a-t-il d'autres manières d'accéder à un bouton que par son "caption" ?
Oui par son N°ID, mais ça ne change pas le probleme de modifier le bouton quand on clique dessus donc tant qu'il est actif.
(il peut ne pas en avoir, dans ce cas, sait-on y accéder par le Face-Id par exemple ?). Ceci pour contourner le "Saisie Auto ON/OFF " (néanmoins fort astucieux !)
Donc pour te proposer une solution plus simple il faudrait me dire ce que tu veux faire avec ce bouton. Lancer une autre macro certainement ;-)) en fait à quoi correspond le On et le Off.
-- @+ Thierry
Papyty
Salut @ Tous, Papyty a écrit:
dans Workbook_SheetCalculate
Effectivement pour que ça fonctionne il faut qu'il y ai au moins un calcul dans ta feuille.
-- @+ Thierry
Salut @ Tous, Papyty a écrit:
dans Workbook_SheetCalculate
Effectivement pour que ça fonctionne il faut qu'il y ai au moins un calcul
dans ta feuille.
Effectivement pour que ça fonctionne il faut qu'il y ai au moins un calcul dans ta feuille.
-- @+ Thierry
Quetzalcoatl
dans Workbook_SheetCalculate
Effectivement pour que ça fonctionne il faut qu'il y ai au moins un calcul dans ta feuille.
Hello, En résumé, mon problème est que la macro TestEtat ne s'exécute pas. Dans la feuille qui apparaît à l'écran, j'ai des formules (des sommes etc...). L'option "Mode de calcul = automatique" est cochée. En fait, j'arrive à exécuter TestEtat uniquement si je saisis une nouvelle formule dans une cellule, par exemple "=2+2".
Pour contourner cette difficulté, j'ai placé un appel à TestEtat en fin de saisie_automatique_ON_OFF_toggle(), et ça fonctionne.
-- Bien sincèrement
dans Workbook_SheetCalculate
Effectivement pour que ça fonctionne il faut qu'il y ai au moins un calcul
dans ta feuille.
Hello,
En résumé, mon problème est que la macro TestEtat ne s'exécute pas.
Dans la feuille qui apparaît à l'écran, j'ai des formules (des sommes etc...).
L'option "Mode de calcul = automatique" est cochée.
En fait, j'arrive à exécuter TestEtat uniquement si je saisis une nouvelle
formule dans une cellule, par exemple "=2+2".
Pour contourner cette difficulté, j'ai placé un appel à TestEtat en fin de
saisie_automatique_ON_OFF_toggle(), et ça fonctionne.
Effectivement pour que ça fonctionne il faut qu'il y ai au moins un calcul dans ta feuille.
Hello, En résumé, mon problème est que la macro TestEtat ne s'exécute pas. Dans la feuille qui apparaît à l'écran, j'ai des formules (des sommes etc...). L'option "Mode de calcul = automatique" est cochée. En fait, j'arrive à exécuter TestEtat uniquement si je saisis une nouvelle formule dans une cellule, par exemple "=2+2".
Pour contourner cette difficulté, j'ai placé un appel à TestEtat en fin de saisie_automatique_ON_OFF_toggle(), et ça fonctionne.