Affecter une macro à des boutons aléatoires en VBA
Bonjour,
Pour vous expliquer rapidement j'ai créé un code qui copie une feuille excel et lui attribue un bouton d'accès sur la page Sommaire, le problème est que je n'arrive pas à affecter une macro à ce bouton du type :
Sheets(copiefeuille).Visible = True
ActiveSheet.Visible = False
je pensais utilisée .OnAction mais je suis bloquée sur l'étape suivante à faire pour pouvoir lier ces 2 codes.
Voici le code de copie que j'ai réalisé :
Sub copie()
nomFeuille = ActiveSheet.Name
ActiveSheet.Copy After:=Sheets(nomFeuille)
ActiveSheet.Shapes("Arrondir un rectangle avec un coin diagonal 2").Visible = False
Sheets("Sommaire").Visible = True
Sheets("Sommaire").Activate
nom = InputBox("Quel nom souhaitez-vous inscrire sur le bouton?", "Nom du bouton", "")
TxtB1 = Sheets("Sommaire").Shapes("Rectangle à coins arrondis 47").TextFrame2.TextRange.Characters.Text
TxtB2 = Sheets("Sommaire").Shapes("Rectangle à coins arrondis 50").TextFrame2.TextRange.Characters.Text
TxtB3 = Sheets("Sommaire").Shapes("Rectangle à coins arrondis 51").TextFrame2.TextRange.Characters.Text
TxtB4 = Sheets("Sommaire").Shapes("Rectangle à coins arrondis 52").TextFrame2.TextRange.Characters.Text
TxtB5 = Sheets("Sommaire").Shapes("Rectangle à coins arrondis 53").TextFrame2.TextRange.Characters.Text
TxtB6 = Sheets("Sommaire").Shapes("Rectangle à coins arrondis 54").TextFrame2.TextRange.Characters.Text
TxtB7 = Sheets("Sommaire").Shapes("Rectangle à coins arrondis 55").TextFrame2.TextRange.Characters.Text
TxtB8 = Sheets("Sommaire").Shapes("Rectangle à coins arrondis 56").TextFrame2.TextRange.Characters.Text
TxtB9 = Sheets("Sommaire").Shapes("Rectangle à coins arrondis 57").TextFrame2.TextRange.Characters.Text
TxtB10 = Sheets("Sommaire").Shapes("Rectangle à coins arrondis 58").TextFrame2.TextRange.Characters.Text
If TxtB1 = "" Then
Sheets("Sommaire").Shapes("Rectangle à coins arrondis 47").Select
With Selection
.Characters.Text = nom
End With
ElseIf TxtB2 = "" Then
Sheets("Sommaire").Shapes("Rectangle à coins arrondis 50").Select
With Selection
.Characters.Text = nom
End With
ElseIf TxtB3 = "" Then
Sheets("Sommaire").Shapes("Rectangle à coins arrondis 51").Select
With Selection
.Characters.Text = nom
End With
ElseIf TxtB4 = "" Then
Sheets("Sommaire").Shapes("Rectangle à coins arrondis 52").Select
With Selection
.Characters.Text = nom
End With
ElseIf TxtB5 = "" Then
Sheets("Sommaire").Shapes("Rectangle à coins arrondis 53").Select
With Selection
.Characters.Text = nom
End With
ElseIf TxtB6 = "" Then
Sheets("Sommaire").Shapes("Rectangle à coins arrondis 54").Select
With Selection
.Characters.Text = nom
End With
ElseIf TxtB7 = "" Then
Sheets("Sommaire").Shapes("Rectangle à coins arrondis 55").Select
With Selection
.Characters.Text = nom
.OnAction = "action"
End With
ElseIf TxtB8 = "" Then
Sheets("Sommaire").Shapes("Rectangle à coins arrondis 56").Select
With Selection
.Characters.Text = nom
End With
ElseIf TxtB9 = "" Then
Sheets("Sommaire").Shapes("Rectangle à coins arrondis 57").Select
With Selection
.Characters.Text = nom
End With
ElseIf TxtB10 = "" Then
Sheets("Sommaire").Shapes("Rectangle à coins arrondis 58").Select
With Selection
.Characters.Text = nom
End With
End If
End Sub
Merci d'avance pour l'aide que vous pourrez m'apporter.
Salut Charly,
Ton fichier incluant ton code serait bien plus utile que ton code seul.
Cordialement.
voilà mon fichier test.
la macro copie est présente sur les feuilles :
- fiche de visite
- photo de visite
- mode opératoire
- tenue électrique
à savoir qu'une même feuille peut être copiée plusieurs fois.
merci d'avance
charly5771 a écrit :je pensais utilisée .OnAction mais je suis bloquée sur l'étape suivante à faire pour pouvoir lier ces 2 codes.
Afin d'affecter une macro à un bouton, il n'y a pas d'autre possibilité selon moi que de passer par .OnAction. Il n'y a qu'un seul passage dans ta macro où tu utilises cette instruction et je ne suis pas certain que ce soit au bon endroit. De plus, je ne sais pas ce que tu veux dire pas ''être bloquée sur l'étape suivante pour pouvoir lier ces 2 codes'' : de quels 2 codes parles-tu ?
Ton fichier est hyper compliqué et on se perd un peu parmi toutes tes tentatives pas toujours abouties, tes multiples feuilles et tes super-multiples boutons. Ne pourrais-tu pas alors simuler un fichier avec un minimum de feuilles, un minimum de boutons et un minimum de macros juste pour illustrer ce que tu tentes de faire afin que l'on puisse t'aider plus facilement ? Et une fois que tu auras compris le principe pour cet exemple simple, tu pourras l'appliquer à ton usine à gaz, non ?
A te relire.
voilà j'ai un peu simplifié mon fichier.
j'ai également rajouter la macro affecter avec la partie où je bloque car je n'arrive à trouver un moyen pour enregistrer dans une variable que je voudrais nommée nomCopie qui est en faite le nom de la feuille qui vient d'être copiée dans la macro copie.
merci encore
Salut,
Dans le fichier ci-joint, j’ai placé l’instruction .OnAction = "affecter" à chaque passage où tu traites les boutons.
Par contre, si tu veux masquer la feuille ayant servi à effectuer la copie, il faut mieux le faire à la fin de la macro ‘copie’ ; regarde l’instruction Sheets(nomFeuille).Visible = False que j’y ai placée.
Ca te permet d’avancer ?
Bonjour,
J'ai réussi à avancer et trouver une solution de ce que je voulais et maintenant tout marche.
Le problème est qu'une fois présenté à mon supérieur il m'a dit qu'il ne voulait pas que les "boutons copies" soit déjà présent. Il voudrait qu'à chaque fois qu'il utilise la macro copie, un bouton se crée sur la page Sommaire en les rangeant sur plusieurs colonne car il se peut que pour une prépa on ai besoin de créer une soixantaine de boutons, mais encore une fois le nombre de "boutons copies" est aléatoire.
J'espère que vous allez pouvoir m'aider.
Merci d'avance
Salut
charly5771 a écrit :J'ai réussi à avancer et trouver une solution de ce que je voulais et maintenant tout marche.
Félicitation pour ton travail ! Apparemment, ce que je t’ai proposé n’a pas aidé beaucoup, sinon tu me l’aurais dit
Comme ta nouvelle demande est quelque chose de nouveau, je te propose d’indiquer ce fil comme résolu et d’en recommencer un autre.
Cordialement.