"désaffecter" macro a une forme

Jacques25

XLDnaute Occasionnel
Bonjour à tous,

Je ne trouve pas ce que je veux malgré mes recherches, peut être je n'utilise pas les bons termes...

J'ai un classeur avec différentes formes auxquelles j'ai affecté des macros pour afficher la suite du classeur en fonction de ce qui est rempli au dessus.
Dans mon fonctionnement je souhaite qu'une fois que j'ai cliqué sur cette forme elle ne soit plus active. Je suis passé par un redimensionnement et un changement de couleur (ce qui revient à masquer la forme) mais j'ai depuis peu un autre soucis du une modification programme.

Y'a t'il un moyen en vba de désactiver une macro affecter à une forme?

Merci de votre aide.

Jacques
 

MichD

XLDnaute Impliqué
Re : "désaffecter" macro a une forme

Bonjour,

En supposant que la macro Test() soit liée aux formes en question...


VB:
Sub test()
Dim NomDeLaForme As String
NomDeLaForme = Application.Caller

'Exécution du code que la macro doit remplir


'Désactiver l'appel de la macro
With ActiveSheet
    With .Shapes(NomDeLaForme).OLEFormat.Object
        .OnAction = ""
    End With
End With
End Sub
 

Jacques25

XLDnaute Occasionnel
Re : "désaffecter" macro a une forme

Bonjour à tous,

Merci à tous les 2 de vous être penché sur mon sujet, désolé mais j'ai un peu trainé pour la réponse. Pas mal d'autres choses à gérer. Pour être plus explicite :

Mes formes sont des zones de texte auxquelles j'affecte une macro par le menu contextuel.
Ci dessous une des macros affectée à une des zones de texte :

Public Sub D1_D2()
'Suppression de la protection
Sheets("JJ").Unprotect Password:="***"
'Validation du bon remplissage de D1
If Range("CD24") <> 4 Then
B_Avertissement_D1.Show
Exit Sub
End If
'Affichage de l'étape D2
Rows("25:40").Select
Selection.EntireRow.Hidden = False
'Masquage bouton D1_D2
ActiveSheet.Shapes("Text Box 69").Select
With Selection.Font
.Name = "Comic Sans MS"
.FontStyle = "Gras"
.Size = 16
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = 2
End With
Selection.ShapeRange.Fill.Visible = msoFalse
Selection.ShapeRange.Line.Visible = msoFalse
Selection.ShapeRange.Height = 3#

Range("P26").Select

'Remise en place de la protection
Sheets("JJ").Protect UserInterfaceOnly:=True, Password:="***", Scenarios:=True, AllowFormattingRows:=True
End Sub


Afin d'éviter aux utilisateurs de relancer la macro je masque le bouton mais depuis peu j'ai une erreur qui se déclenche.
Je souhaiterai donc désaffecter la macro.

MichD comment dois je intégrer ton code? dans mon code D1_D2?
Gorfael, il me semble que la fonction Enabled me donne une erreur mais je vais retester.

Merci à tous et bonne journée.
Jacques
 

MichD

XLDnaute Impliqué
Re : "désaffecter" macro a une forme

Que veux-tu dire par cette expression : "Je souhaiterai donc désaffecter la macro".

Tu veux dissocier le code et le textbox ? L'inverse d'attacher une macro à un textbox?

La macro "Test" que j'ai publiée fait cela par elle-même. Elle dissocie toutes les macros liées
aux différentes formes contenues dans ta feuille pas seulement les Textbox.
 

Jacques25

XLDnaute Occasionnel
Re : "désaffecter" macro a une forme

Salut MichD, le forum,

Oui je veux dissocier le code de la textbox.
Si j'ai bien compris, mon code devient :

Sub D1_D2()
Dim NomDeLaForme As String
NomDeLaForme = Application.Caller

'Suppression de la protection
...
'Validation du bon remplissage de D1
...
'Affichage de l'étape D2
...
'Masquage bouton D1_D2
...
'Remise en place de la protection
Sheets("JJ").Protect UserInterfaceOnly:=True, Password:="***", Scenarios:=True, AllowFormattingRows:=True

With ActiveSheet
With .Shapes(NomDeLaForme).OLEFormat.Object
.OnAction = ""
End With
End With

End Sub

Et je laisse la macro D1_D2 affecter à ma textbox.
Est ce que j'ai bien compris la manip?

Merci pour ton aide.
Bonne journée

Jacques
 

Discussions similaires

Statistiques des forums

Discussions
312 500
Messages
2 089 007
Membres
104 003
dernier inscrit
adyady__