Transfert de macro dans un nouveau classeur
Bonjours a tous , je suis actuellement sur un projet d ' "envergure" , si on peut dire et je stock sur une erreur 9 "indice n'appartient pas à la selection"
voici le morceau de code car le fichier complet est très lourd.
Public Function ExportCodeModule()
' Déclaration des variables
Dim strCode As String
Dim Compteur As Integer
Dim Indice As Long
Dim modObj As Object
Dim objMod As Object
Dim Classeur As Workbook
Dim vbCom As VBComponent
Dim Lignes As Long
'selectionne le fichier source associer au projet vba
Windows("squelette catalogue achat.xlsm").Activate
' transforme le module en variable objet de vba
Set modObj = Application.VBE.ActiveVBProject.VBComponents.item("Sauvegarde")
'transforme le code en variable texte
strCode = modObj.CodeModule.Lines(1, modObj.CodeModule.CountOfLines)
'selectionne le fichier receveur associer au projet vba
Windows("Liste des composants STD.xls").Activate
Compteur = 0
For Each Classeur In Workbooks
If (Classeur.Name = "Liste des composants STD.xls") Then
' Create a new module in workbook.
Classeur.Activate
Set objMod = Classeur.VBProject.VBComponents
objMod.Add (vbext_ct_StdModule)
With objMod("Module1").CodeModule
.DeleteLines 1, .CountOfLines
End With
' transforme le texte en code et l'intègre dzns le nouveau module
objMod.item("Module1").CodeModule.AddFromString (strCode)
objMod.item("Module1").Name = "Sauvegarde1"
Compteur = (Compteur + 1)
End If
Next Classeur
End Function
je vous explique :
je souhaite grace a cette fonction transféré une macro de sauvegarde de fichier uqe j'ai au préalable créé et nommé en l'enregistrant dans un repertoire bidon.
le code qui appel la fonction:
Sub Cmd_Export_Click()
If existephoto("P:\photoref0.gif") Then
'détruit la photo ref
Kill "P:\photoref0.gif"
End If
If existephoto("P:\photofam0.gif") Then
'détruit la photo fam
Kill "P:\photofam0.gif"
End If
With Workbooks.Add
.Activate
End With
Workbooks("squelette catalogue achat.xlsm").Sheets("Panier").Range("A2", "L20").Copy Destination:=ActiveWorkbook.Sheets(1).Range("A1")
Dim repertoire As String
Dim nomfichier As String
Dim extension As String
repertoire = "P:\"
nomfichier = "Liste des composants STD.xls"
extension = "*.xls"
ActiveWorkbook.SaveAs repertoire & nomfichier
Call ExportCodeModule
Windows("Liste des composants STD.xls").Activate
Call Save
Windows("Liste des composants STD.xls").Close
'Kill repertoire & nomfichier
'décharge le userform
Unload Me
End Sub
je travail dans un bouton d'un userform.(obligation du cahier des charges)
j'espère que j'ai été claire, si ce n'est pas le cas je représiserais.
Bonjour
j'espère que j'ai été claire, si ce n'est pas le cas je représiserais.
Ce serait beaucoup plus clair déjà si tu prenais la peine de:
1) Eliminer les lignes blanches inutiles qui allongent inutilement ton message
2) Utiliser les balises Code pour faire ressortir ton texte de code.
3) Ton PC n'as pas de correcteur d'orthographe? Parce que nous faisons tous des fautes (en tout cas, moi, j'ai conscience d'en faire) mais le correcteur d'orthographe en élimine déjà pas mal.
Parce que, sans vouloir être donneur de leçon, soigner sa présentation n'est jamais qu'une question de correction.
Cordialement
Ok, autant pour moi, je vais surveillez mon français ainsi que mon orthographe. pour ce qui est du code , je le renvoie avec les balises.
Edit Amadéus: Merci de tes modifications.
Pour afficher le Code:
Tu sélectionnes l'ensemble du texte à transformer, puis tu cliques sur le Bouton "Code". Tu obtiens automatiquement le résultat suivant
Sub Cmd_Export_Click()
If existephoto("P:\photoref0.gif") Then
'détruit la photo ref
Kill "P:\photoref0.gif"
End If
If existephoto("P:\photofam0.gif") Then
'détruit la photo fam
Kill "P:\photofam0.gif"
End If
With Workbooks.Add
.Activate
End With
Workbooks("squelette catalogue achat.xlsm").Sheets("Panier").Range("A2", "L20").Copy Destination:=ActiveWorkbook.Sheets(1).Range("A1")
Dim repertoire As String
Dim nomfichier As String
Dim extension As String
repertoire = "P:\"
nomfichier = "Liste des composants STD.xls"
extension = "*.xls"
ActiveWorkbook.SaveAs repertoire & nomfichier & extension
Workbooks("squelette catalogue achat.xlsm").Activate
ExportCodeModule
'décharge le userform
Unload Me
End Suble code qui me fait l'erreur 9 est:
Public Function ExportCodeModule()
' Déclaration des variables
Dim strCode As String
Dim Compteur As Integer
Dim Indice As Long
Dim modObj As Object
Dim objMod As Object
Dim Classeur As Workbook
Dim vbCom As VBComponent
Dim Lignes As Long
' transforme le module en variable objet de vba
Set modObj = Application.VBE.ActiveVBProject.VBComponents.item("Sauvegarde")
'NIVEAU DE L'ERREUR 9
'transforme le code en variable texte
strCode = modObj.CodeModule.Lines(1, modObj.CodeModule.CountOfLines)
'selectionne le fichier receveur associer au projet vba
Windows("Liste des composants STD.xls").Activate
Compteur = 0
For Each Classeur In Workbooks
If (Classeur.Name = "Liste des composants STD.xls") Then
' Create a new module in workbook.
Classeur.Activate
Set objMod = Classeur.VBProject.VBComponents
objMod.Add (vbext_ct_StdModule)
With objMod("Module1").CodeModule
.DeleteLines 1, .CountOfLines
End With
' transforme le texte en code et l'intègre dzns le nouveau module
objMod.item("Module1").CodeModule.AddFromString (strCode)
objMod.item("Module1").Name = "Sauvegarde1"
Compteur = (Compteur + 1)
End If
Next Classeur
End Function