Insérer une macro dans une feuille générée

Bonjour,

A partir d'un classeur 'Menu', je génère un nouveau classeur 'Travail'.

Je voudrais pouvoir insérer une macro que j'ai stocké dans un module du classeur 'Menu', dans une feuille particulière de mon nouveau classeur 'Travail'.

Ci dessous la macro que je veux mettre dans le nouveau classeur :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, Range("K2:K65500")) Is Nothing Then
    If Target.Offset(0, 0).Value <> "OUI" Then
        Application.Run "MenuReach.xls!LOADCA"
        Cancel = True
        Else: MsgBox "Pour modifier un article, vous devez le faire depuis le fichier BDDA.", vbOKOnly + vbInformation, "Information"
    End If
End If
End Sub

Hélas, ma recherche est infructueuse, car mes mots trop courant (insérer macro dans feuille)

J'ai essayé d'utiliser assistant macro, mais la macro créée est vide.

Je vous remercie par avance

Bonjour,

La macro ci dessous insère ta macro dans la Feuil1 du classeur actif :

Si la feuille Cible (nouvellement créée) porte un autre nom modifier la macro en conséquence.

Important : Dans le classeur qui exécute la macro, dans le menu VBA Outils > Références...

Vous devez cocher Microsoft Visual Basic for Applications Extensibility 5.3

Sub CreateWsEvenMacro()
Dim X As Integer
With ActiveWorkbook.VBProject.VBComponents("Feuil1").codeModule
X = .countOfLines
.insertLines X + 1, "Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)"
.insertLines X + 2, "If Not Application.Intersect(Target, Range(""K2:K65500"")) Is Nothing Then"
.insertLines X + 3, "If Target.Offset(0, 0).Value <> ""OUI"" Then"
.insertLines X + 4, "Application.Run ""MenuReach.xls!LOADCA"" "
.insertLines X + 5, "Cancel = True"
.insertLines X + 6, "Else: MsgBox ""Pour modifier un article, vous devez le faire depuis le fichier BDDA."", 128, ""Information"" "
.insertLines X + 7, "End If"
.insertLines X + 8, "End If"
.insertLines X + 9, "End Sub"
End With
End Sub

A+

[EDIT] Attention code fauté et modifié.

Eventuellement recharger ce nouveau code. (La numérotation des lignes doit être continue...)

Bonsoir Galopin01,

J'ai commencé par intégrer la macro dans ma procédure de génération du fichier, la génération du fichier est un peu longue et bugue de temps en temps.

J'ai coupé court pour ne tester que cette macro.

Hélas, cela ne fonctionne pas.

A la base mon fichier est verrouillé du coté projet vba, mais meme en le déverrouillant j'obtiens le message suivant :

Erreur d'exécution '1004':

L'accès par programme au projet Visual Basic n'est pas fiable

et il bloque sur le code suivant :

With ActiveWorkbook.VBProject.VBComponents("1-Récap Articles").CodeModule

Une sécurité quelque part ?

Important : Dans le classeur qui exécute la macro, dans le menu VBA Outils > Références...

Vous devez cocher Microsoft Visual Basic for Applications Extensibility 5.3

On a parfois l'impression de le cocher mais si on ne fais que sélectionner la ligne ça rate... il faut bien "viser" la boite à cocher !

Eventuellement recharger le texte le la macro dans mon message d'origine j'ai du le modifier car il y avait un petit bug de numérotation... mais je suspecte plutôt la boite à cocher...

A+

Bonjour,

A tester.

Cdlt.

Public Sub CreateWsEvenMacro()
' Nécessite d'activer la référence :
'"Microsoft Visual Basic for Applications Extensibility 5.3"
Dim f1 As Worksheet
Dim X As Integer
Dim code As String

    Set f1 = Worksheets("Feuil1")

    code = "Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)" & vbCrLf
    code = code & "     If Not Application.Intersect(Target, Range(""K2:K65500"")) Is Nothing Then" & vbCrLf
    code = code & "         If Target.Offset(0, 0).Value <> ""OUI"" Then" & vbCrLf
    code = code & "             Application.Run ""MenuReach.xls!LOADCA"" " & vbCrLf
    code = code & "             Cancel = True" & vbCrLf
    code = code & "         Else" & vbCrLf
    code = code & "             MsgBox ""Pour modifier un article, vous devez le faire depuis le fichier BDDA."", 128, ""Information"" " & vbCrLf
    code = code & "         End If" & vbCrLf
    code = code & "     End If" & vbCrLf
    code = code & "End Sub"

    'Ajoute la procédure dans la feuille
    With ThisWorkbook.VBProject.VBComponents(f1.CodeName).CodeModule
        X = .CountOfLines + 1
        .InsertLines X, code
    End With

    Set f1 = Nothing

End Sub

Trouvé sur Google

Menu Fichier -> Options Excel -> Centre de gestion de la confidentialité -> Paramètres du Centre de gestion de la confidentialité -> Paramètres des macros -> Accèes approuvé au modèle d'objet du projet VBA

A+

Bonjour,

Galopin01,

La case est bien cochée, les options de sécurités sont ok, le code est bien rechargé, mais j'ai toujours une erreur d'exécution 9, l'indice n'appartient pas à la sélection.

Jean-Eric,

Pas d'erreur, la macro se déroule, mais rien dans la feuille de mon nouveau classeur.

Re,

Remplace 'ThisWorkbook" par 'ActiveWorkbook'.

Cette procédure fonctionne parfaitement chez moi.

Cdlt.

Jean-Eric,

J'avais remplacé activeworkbook par thisworkbook dans la macro de Galopin01, mais pas l'inverse.

Cela fonctionne parfaitement.

Merci aussi a Galopin01

Vous m'avez fait découvrir de nouvelles fonctions

Rechercher des sujets similaires à "inserer macro feuille generee"