Insére code dans bouton par une maccro : erreur indice 9

guil456

XLDnaute Nouveau
Bonjour,

Voici mon problème :
Je cherche à créer un nouveau classeur à partir d'un premier et y ajouter un CommandButton qui appelle un userform qui lui même appelle un module.

La création du bouton dans le nouveau classeur fonctionne.

Cependant, je n'arrive pas à insérer le simple code Userform4.show sur CommandButton_Click, ni à importer l'userform et le module.

Voici le code trouvé sur plusieurs forums pour écrire la maccro dans le nouveau bouton :

Dim oWs As Worksheet
Dim oOLE As OLEObject
Dim code As String
Dim iX As Integer
Dim x As Integer
For page = 1 To vclasseur.Sheets.Count


iX = page

code = "Private Sub CommandButton" & iX & "_Click()" & vbCrLf
code = code & "UserForm4.Show" & vbCrLf
code = code & "End Sub"

Set oWs = Sheets(page)

Set oOLE = oWs.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Left:=700, Top:=0, Width:=80, Height:=32)
With oOLE
.Object.Caption = "MAILING"
.Name = "CommandButton" & iX

End With

vclasseur.Sheets(page).Activate
With ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
x = .CountOfLines + 1
.InsertLines x, code
End With Problème ici mais pas d'erreur juste rien ne se passe

Next

et le code pour le module et l'userform qui fonctionne pour quelqu'un mais pas pour moi

'copie userform
Workbooks("ANNUAIRE ST.xls").VBProject.VBComponents.Item("UserForm4").Export ("D:\temp.frm")
vclasseur.VBProject.VBComponents.Import ("D:\temp.frm")
Kill ("D:\temp.frm")
Kill ("D:\temp.frx")

'copie du module
Workbooks("ANNUAIRE ST.xls").VBProject.VBComponents.Item("Module5").Export ("D:\temp.bas")
vclasseur.VBProject.VBComponents.Import ("D:\temp.bas")
Kill ("D:\temp.bas")

vclasseur est le nom du nouveau classeur créé et ANNUAIRE ST est celui qui contient l'userform 4 et le module 5

Avez vous une idée du pourquoi du comment? ça fait un petit bout de temps que je cherche et je ne trouve rien vu que ces codes ne provoquent pas d'erreur et ont l'air de marcher pour les autres.

Merci pour votre aide
 
Dernière édition:

guil456

XLDnaute Nouveau
Re: Re : Importer module + userform dans nouveau classeur

Bonjour,

Est-ce-que tu as compilé ton code pour le debugger ?

As-tu la référence nécessaire à VBE ?

A +
:)

Compiler mon code? avec le pas à pas? non je n'y avais pas pensé, je vais essayé.

Je dois avoir la référence nécessaire "microsoft visual basic for application extensibility 5.3" , et je crois que si je ne l'avais pas ça devrait créer une erreur il me szemble. Merci pour cette première piste, je regarde tout de suite.
 

guil456

XLDnaute Nouveau
Re: Re : Importer module + userform dans nouveau classeur

j'ai regardé en fait au tout début de ma maccro qui commence à être assez longue j'avais le on error resume next, je l'ai enlevé et j'ai l'erreur suivante :

.CountOfLines = variable objet ou variable bloc With non défini.
??
 

guil456

XLDnaute Nouveau
Re: Re : Importer module + userform dans nouveau classeur

Je continue de chercher depuis tout à l'heure et j'ai un peu avancé, mais ma premirèe question reste pourtant là.
J'ai enregistré l'userform dans mon disque dur et je l'importe simplement par

ActiveWorkbook.VBProject.VBComponents.Import ("C:\Users\Guillaume\Desktop\ANNUAIRE\UserForm4.frm")

J'ai désactivé aussi la sécurité des maccros. Ca fonctionne,

Reste plus qu'à parvenir à écrire simplement 'UserForm4.Show' dans chaque bouton créé et ça , ça ne marche toujours pas.

J'ai trouvé un autre moyen de le faire mais sans résultat.

Dim xl As Object
Set xl = ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
With xl l'indice n'appartien pas à la sélection erreur indice 9
.CreateEventProc "Click", "CommandButton" & iX
x = .ProcStartLine("CommandButton" & iX & "_Click", vbext_pk_Proc)
.InsertLines x + 2, "UserForm4.Show"
End With

Une aide serait la bienvenue, j'ai passé ma journée dessus.
 
Dernière édition:

guil456

XLDnaute Nouveau
Re: Importer module + userform dans nouveau classeur

Quoique je fasse ça bloque toujours sur la ligne "With ThisWorkbook.VBProject.VBComponents(ActiveSheet.Na me).CodeModule"
j'ai essayé avec .codename .name "Feuil4" "commandbutton" & iX , bref je ne sais plus quoi faire
j'ai toujours l'erreur 9 l'indice n'appartient pas à la sélection, pourtant avec activesheet.codename et sheets(page).activate juste avant je ne vois pas pourquoi j'ai des problèmes. Activesheet est frocément présent par définition.
 

guil456

XLDnaute Nouveau
J'ai enfin fini par trouver: Il fallait changer This par Active au début ! ralala, les petits détails de la programmation m'étonneront toujours.
Pour ceux qui liront ce sujet voici la version la plus simple de ce bout de code :
ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule.AddFromString (laMacro)

peut remplacer le with .......
end with
 

Discussions similaires

Statistiques des forums

Discussions
312 685
Messages
2 090 942
Membres
104 703
dernier inscrit
romla937