Bonjour,
J'avais l'habitude d'insèrer des boutons et d'y attacher des macros, du coup, en fonction du nombre de macro, j'avais autant de boutons que de macros. C'est un peu plus sexy en le faisant via un userform, par contre, je dois quand même attacher le userform à un bouton.
Est il possible de "coller" le userform directement sur une feuille excel ? Sans avoir à l'appeler ? Est il possible de l'ancrer à un endroit bien précis de la feuille excel ?
Le fichier sur lequel je travaille est confidentiel, je ne peux pas le joindre.
J'espère que ma demande est assez claire.
D'avance merci.
Cdlt
Bonjour Attila,
Peut être une autre approche en utilisant la macro événementielle Worksheet_SelectionChange. ( à voir ... )
Il suffit de cliquer sur une cellule pour lancer la macro correspondante, avec :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Fin
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, [B2]) Is Nothing Then
Macro1
ElseIf Not Intersect(Target, [C2]) Is Nothing Then
Macro2
.....
ElseIf Not Intersect(Target, [C11]) Is Nothing Then
Macro10
End If
Fin:
End Sub
Comme je l'ai dit, il ne s'agit que : "Peut être une autre approche"
N'est pas LA solution, mais j'ai toujours trouvé cette approche plus simple plutôt qu'à chaque nouvelle macro modifier un userform et modifier le code en conséquence.
Pour saluer @sylvanu , un code pour lancer les macros :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("B2,C3,B4,C5,B6,C7,B8,C9,B10,C11")) Is Nothing _
Then Application.Run "macro" & Target.Row - 1
End Sub
Bonjour MaPomme,
Mais cela suppose qu'on ait une seule macro par ligne.
S'il y a Macro1 en B2 et Macro2 en C2, ce sera toujours Macro1 qui sera exécutée.
Une autre approche simplissime est que la cellule cliquée contienne le nom de la macro.
On n'a donc plus besoin de toucher à Worksheet_SelectionChange en cas d'évolution :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Fin
If Target.Count > 1 Then Exit Sub
Application.Run Target.Value
Fin:
End Sub