Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Copier code VBA d'un classeur vers un autre

8 réponses
Avatar
Mousnynao
Bonjour,

Je tente de copier le code VBA d'un classeur source vers un classeur de
destination.
J'ai décomposé le tout par section et dans l'une d'elles je copie le code
contenu dans le module [ ThisWorkbook ] et dans les modules [ Feuil... ].

Le scan rencontre le module [ ThisWorkbook ] en premier et opère la copie
sans problème, mais à la première feuille, celui-ci plante à l'instruction [
End With ].

Voici le code :

Function CopieThisWorkBook()

Dim strCode As String
Dim strNom As String
Dim strChemin As String
Dim strNomDes As String

strNom = VBC.Name
strChemin =
Workbooks("XFRVBA.xls").Sheets("Menu").Range("adrFicDes").Value
strNomDes =
Workbooks("XFRVBA.xls").Sheets("Menu").Range("nomFicDes").Value

' Capture le code dans variable
strCode = VBC.CodeModule.Lines(1, VBC.CodeModule.CountOfLines)

If (strNom = "ThisWorkbook") Then
Workbooks(strNomDes).Activate
With ActiveWorkbook.VBProject.VBComponents(strNom).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString (strCode)
End With
Else
If (InStr(1, strNom, "Feuil", vbTextCompare) > 0) Then
Workbooks(strNomDes).Activate
With ActiveWorkbook.VBProject.VBComponents(strNom).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString (strCode)
End With ' C'est ici que je perd Excel au complet
End If
End If

End Function
'

La ligne [ .AddFromString (strCode) ] est bien exécuté, je place un point
d'arrêt sur l'instruction [ End With ] qui suit et je peux vérifier que le
code
a bel et bien été copié.

Après j'appuis sur la touche F8 pour passer à l'instruction suivante et là,
tout casse, Excel se ferme en urgence avec le rapport de problème
et la récupération du classeur en cours.

Avez-vous déjà rencontré ce dilème, y aurait-il quelque chose qui m'échappe ?

Merci de vous être penché sur mon problème.
mousnynao

8 réponses

Avatar
isabelle
bonjour Mousnynao,

tu dis :

La ligne [ .AddFromString (strCode) ] est bien exécuté

est que la copie de code se fait au bon endroit ?

isabelle

Mousnynao a écrit :
Bonjour,

Je tente de copier le code VBA d'un classeur source vers un classeur de
destination.
J'ai décomposé le tout par section et dans l'une d'elles je copie le code
contenu dans le module [ ThisWorkbook ] et dans les modules [ Feuil... ].

Le scan rencontre le module [ ThisWorkbook ] en premier et opère la copie
sans problème, mais à la première feuille, celui-ci plante à l'instruction [
End With ].

Voici le code :

Function CopieThisWorkBook()

Dim strCode As String
Dim strNom As String
Dim strChemin As String
Dim strNomDes As String

strNom = VBC.Name
strChemin =
Workbooks("XFRVBA.xls").Sheets("Menu").Range("adrFicDes").Value
strNomDes =
Workbooks("XFRVBA.xls").Sheets("Menu").Range("nomFicDes").Value

' Capture le code dans variable
strCode = VBC.CodeModule.Lines(1, VBC.CodeModule.CountOfLines)

If (strNom = "ThisWorkbook") Then
Workbooks(strNomDes).Activate
With ActiveWorkbook.VBProject.VBComponents(strNom).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString (strCode)
End With
Else
If (InStr(1, strNom, "Feuil", vbTextCompare) > 0) Then
Workbooks(strNomDes).Activate
With ActiveWorkbook.VBProject.VBComponents(strNom).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString (strCode)
End With ' C'est ici que je perd Excel au complet
End If
End If

End Function
'

La ligne [ .AddFromString (strCode) ] est bien exécuté, je place un point
d'arrêt sur l'instruction [ End With ] qui suit et je peux vérifier que le
code
a bel et bien été copié.

Après j'appuis sur la touche F8 pour passer à l'instruction suivante et là,
tout casse, Excel se ferme en urgence avec le rapport de problème
et la récupération du classeur en cours.

Avez-vous déjà rencontré ce dilème, y aurait-il quelque chose qui m'échappe ?

Merci de vous être penché sur mon problème.
mousnynao


Avatar
Mousnynao
Bonjour Isabelle,

Oui, la copie se fait au bon endroit, soit sur la feuille 1 du classeur
de destination.

De façon tout à fait par hazard, je repasse ce matin le macro complete
en mode pas à pas et cette fois ci, tout fonctionne.

Je relance la macro globale en mode normal et rien ne se copie.
Je commence à douter de la configuration de mon poste. Je vais refaire
mes devoirs sur un poste que j'ai monté moi-même et je donnerai
suite à mes observations.

Merci de t'être intéressé à mon problème.

mousnynao





"isabelle" a écrit :

bonjour Mousnynao,

tu dis :

La ligne [ .AddFromString (strCode) ] est bien exécuté

est que la copie de code se fait au bon endroit ?

isabelle

Mousnynao a écrit :
> Bonjour,
>
> Je tente de copier le code VBA d'un classeur source vers un classeur de
> destination.
> J'ai décomposé le tout par section et dans l'une d'elles je copie le code
> contenu dans le module [ ThisWorkbook ] et dans les modules [ Feuil... ].
>
> Le scan rencontre le module [ ThisWorkbook ] en premier et opère la copie
> sans problème, mais à la première feuille, celui-ci plante à l'instruction [
> End With ].
>
> Voici le code :
>
> Function CopieThisWorkBook()
>
> Dim strCode As String
> Dim strNom As String
> Dim strChemin As String
> Dim strNomDes As String
>
> strNom = VBC.Name
> strChemin =
> Workbooks("XFRVBA.xls").Sheets("Menu").Range("adrFicDes").Value
> strNomDes =
> Workbooks("XFRVBA.xls").Sheets("Menu").Range("nomFicDes").Value
>
> ' Capture le code dans variable
> strCode = VBC.CodeModule.Lines(1, VBC.CodeModule.CountOfLines)
>
> If (strNom = "ThisWorkbook") Then
> Workbooks(strNomDes).Activate
> With ActiveWorkbook.VBProject.VBComponents(strNom).CodeModule
> .DeleteLines 1, .CountOfLines
> .AddFromString (strCode)
> End With
> Else
> If (InStr(1, strNom, "Feuil", vbTextCompare) > 0) Then
> Workbooks(strNomDes).Activate
> With ActiveWorkbook.VBProject.VBComponents(strNom).CodeModule
> .DeleteLines 1, .CountOfLines
> .AddFromString (strCode)
> End With ' C'est ici que je perd Excel au complet
> End If
> End If
>
> End Function
> '
>
> La ligne [ .AddFromString (strCode) ] est bien exécuté, je place un point
> d'arrêt sur l'instruction [ End With ] qui suit et je peux vérifier que le
> code
> a bel et bien été copié.
>
> Après j'appuis sur la touche F8 pour passer à l'instruction suivante et là,
> tout casse, Excel se ferme en urgence avec le rapport de problème
> et la récupération du classeur en cours.
>
> Avez-vous déjà rencontré ce dilème, y aurait-il quelque chose qui m'échappe ?
>
> Merci de vous être penché sur mon problème.
> mousnynao



Avatar
Frédéric Sigonneau
Une autre source possible du comportement aléatoire de ta macro pourrait être
liée au fait que l'objet (du moins je suppose que c'est un objet) VBC (pour
VBComponent ?) n'est apparemment défini nulle part. Or cet objet sert à repérer
à la fois le composant traité (strNom) et le code qu'il contient (strCode).
Dans ce genre de situation, VBA, pour fournir un résultat, est capable de faire
absolument n'importe quoi, de la devinette qui tombe juste à l'erreur fatale et
sans appel..

FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

Mousnynao a écrit :
Bonjour Isabelle,

Oui, la copie se fait au bon endroit, soit sur la feuille 1 du classeur
de destination.

De façon tout à fait par hazard, je repasse ce matin le macro complete
en mode pas à pas et cette fois ci, tout fonctionne.

Je relance la macro globale en mode normal et rien ne se copie.
Je commence à douter de la configuration de mon poste. Je vais refaire
mes devoirs sur un poste que j'ai monté moi-même et je donnerai
suite à mes observations.

Merci de t'être intéressé à mon problème.

mousnynao





"isabelle" a écrit :

bonjour Mousnynao,

tu dis :

La ligne [ .AddFromString (strCode) ] est bien exécuté

est que la copie de code se fait au bon endroit ?

isabelle

Mousnynao a écrit :
Bonjour,

Je tente de copier le code VBA d'un classeur source vers un classeur de
destination.
J'ai décomposé le tout par section et dans l'une d'elles je copie le code
contenu dans le module [ ThisWorkbook ] et dans les modules [ Feuil... ].

Le scan rencontre le module [ ThisWorkbook ] en premier et opère la copie
sans problème, mais à la première feuille, celui-ci plante à l'instruction [
End With ].

Voici le code :

Function CopieThisWorkBook()

Dim strCode As String
Dim strNom As String
Dim strChemin As String
Dim strNomDes As String

strNom = VBC.Name
strChemin =
Workbooks("XFRVBA.xls").Sheets("Menu").Range("adrFicDes").Value
strNomDes =
Workbooks("XFRVBA.xls").Sheets("Menu").Range("nomFicDes").Value

' Capture le code dans variable
strCode = VBC.CodeModule.Lines(1, VBC.CodeModule.CountOfLines)

If (strNom = "ThisWorkbook") Then
Workbooks(strNomDes).Activate
With ActiveWorkbook.VBProject.VBComponents(strNom).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString (strCode)
End With
Else
If (InStr(1, strNom, "Feuil", vbTextCompare) > 0) Then
Workbooks(strNomDes).Activate
With ActiveWorkbook.VBProject.VBComponents(strNom).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString (strCode)
End With ' C'est ici que je perd Excel au complet
End If
End If

End Function
'

La ligne [ .AddFromString (strCode) ] est bien exécuté, je place un point
d'arrêt sur l'instruction [ End With ] qui suit et je peux vérifier que le
code
a bel et bien été copié.

Après j'appuis sur la touche F8 pour passer à l'instruction suivante et là,
tout casse, Excel se ferme en urgence avec le rapport de problème
et la récupération du classeur en cours.

Avez-vous déjà rencontré ce dilème, y aurait-il quelque chose qui m'échappe ?

Merci de vous être penché sur mon problème.
mousnynao






Avatar
Mousnynao
Bonjour,

Merci de vos observations.

En fait, VBC est déclaré en globale dans un autre module et strNom n'est pas
un objet mais le nom d'un objet. J'adresse le module par l'objet dans le
classeur source et j'adresse le module par le nom de l'objet dans le classeur
de destination.

mousnynao

"Frédéric Sigonneau" a écrit :

Une autre source possible du comportement aléatoire de ta macro pourrait être
liée au fait que l'objet (du moins je suppose que c'est un objet) VBC (pour
VBComponent ?) n'est apparemment défini nulle part. Or cet objet sert à repérer
à la fois le composant traité (strNom) et le code qu'il contient (strCode).
Dans ce genre de situation, VBA, pour fournir un résultat, est capable de faire
absolument n'importe quoi, de la devinette qui tombe juste à l'erreur fatale et
sans appel..

FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

Mousnynao a écrit :
> Bonjour Isabelle,
>
> Oui, la copie se fait au bon endroit, soit sur la feuille 1 du classeur
> de destination.
>
> De façon tout à fait par hazard, je repasse ce matin le macro complete
> en mode pas à pas et cette fois ci, tout fonctionne.
>
> Je relance la macro globale en mode normal et rien ne se copie.
> Je commence à douter de la configuration de mon poste. Je vais refaire
> mes devoirs sur un poste que j'ai monté moi-même et je donnerai
> suite à mes observations.
>
> Merci de t'être intéressé à mon problème.
>
> mousnynao
>
>
>
>
>
> "isabelle" a écrit :
>
>> bonjour Mousnynao,
>>
>> tu dis :
>>
>> La ligne [ .AddFromString (strCode) ] est bien exécuté
>>
>> est que la copie de code se fait au bon endroit ?
>>
>> isabelle
>>
>> Mousnynao a écrit :
>>> Bonjour,
>>>
>>> Je tente de copier le code VBA d'un classeur source vers un classeur de
>>> destination.
>>> J'ai décomposé le tout par section et dans l'une d'elles je copie le code
>>> contenu dans le module [ ThisWorkbook ] et dans les modules [ Feuil... ].
>>>
>>> Le scan rencontre le module [ ThisWorkbook ] en premier et opère la copie
>>> sans problème, mais à la première feuille, celui-ci plante à l'instruction [
>>> End With ].
>>>
>>> Voici le code :
>>>
>>> Function CopieThisWorkBook()
>>>
>>> Dim strCode As String
>>> Dim strNom As String
>>> Dim strChemin As String
>>> Dim strNomDes As String
>>>
>>> strNom = VBC.Name
>>> strChemin =
>>> Workbooks("XFRVBA.xls").Sheets("Menu").Range("adrFicDes").Value
>>> strNomDes =
>>> Workbooks("XFRVBA.xls").Sheets("Menu").Range("nomFicDes").Value
>>>
>>> ' Capture le code dans variable
>>> strCode = VBC.CodeModule.Lines(1, VBC.CodeModule.CountOfLines)
>>>
>>> If (strNom = "ThisWorkbook") Then
>>> Workbooks(strNomDes).Activate
>>> With ActiveWorkbook.VBProject.VBComponents(strNom).CodeModule
>>> .DeleteLines 1, .CountOfLines
>>> .AddFromString (strCode)
>>> End With
>>> Else
>>> If (InStr(1, strNom, "Feuil", vbTextCompare) > 0) Then
>>> Workbooks(strNomDes).Activate
>>> With ActiveWorkbook.VBProject.VBComponents(strNom).CodeModule
>>> .DeleteLines 1, .CountOfLines
>>> .AddFromString (strCode)
>>> End With ' C'est ici que je perd Excel au complet
>>> End If
>>> End If
>>>
>>> End Function
>>> '
>>>
>>> La ligne [ .AddFromString (strCode) ] est bien exécuté, je place un point
>>> d'arrêt sur l'instruction [ End With ] qui suit et je peux vérifier que le
>>> code
>>> a bel et bien été copié.
>>>
>>> Après j'appuis sur la touche F8 pour passer à l'instruction suivante et là,
>>> tout casse, Excel se ferme en urgence avec le rapport de problème
>>> et la récupération du classeur en cours.
>>>
>>> Avez-vous déjà rencontré ce dilème, y aurait-il quelque chose qui m'échappe ?
>>>
>>> Merci de vous être penché sur mon problème.
>>> mousnynao



Avatar
michdenis
J' ai fait un petit exemple :

Copier tout le code du classeur où le code est situé
vers le classeur2.xls.

Ce code suppose que chaque "Nom des modules" du
classeur où est le code à un équivalent dans le classeur2.xls

Aucun problème éprouvé.

'-------------------------------------
Sub test()

Dim VPC As Object, Code As String
Dim Chemin As String, Wk As Workbook
Dim NomFichier As String

'Info sur le classeur où le code va être copié.
Chemin = "c:exceltoday"
NomFichier = "Classeur2.xls"

'Vérifier si le fichier existe :
If Dir(Chemin & fichier) <> "" Then
On Error Resume Next
Set Wk = Workbooks(NomFichier)
If Err <> 0 Then
Err.Clear
Set Wk = Workbooks.Open(Chemin & fichier)
End If
Else
MsgBox "Impossible de trouver le classeur désiré."
Exit Sub
End If
For Each VPC In ThisWorkbook.VBProject.VBComponents
With VPC.CodeModule
Code = .Lines(1, .CountOfLines)
Err = 0
If Code <> "" Then
CopieVers_Autre_WorkBook Wk, VPC, Code
End If
End With
Next

End Sub

'-------------------------------------
Sub CopieVers_Autre_WorkBook(Wk As Workbook, _
VPC As Object, Code As String)

With Wk.VBProject.VBComponents(VPC.Name).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString Code
End With

End Sub
'-------------------------------------






"Mousnynao" a écrit dans le message de
news:
Bonjour,

Je tente de copier le code VBA d'un classeur source vers un classeur de
destination.
J'ai décomposé le tout par section et dans l'une d'elles je copie le code
contenu dans le module [ ThisWorkbook ] et dans les modules [ Feuil... ].

Le scan rencontre le module [ ThisWorkbook ] en premier et opère la copie
sans problème, mais à la première feuille, celui-ci plante à l'instruction [
End With ].

Voici le code :

Function CopieThisWorkBook()

Dim strCode As String
Dim strNom As String
Dim strChemin As String
Dim strNomDes As String

strNom = VBC.Name
strChemin Workbooks("XFRVBA.xls").Sheets("Menu").Range("adrFicDes").Value
strNomDes Workbooks("XFRVBA.xls").Sheets("Menu").Range("nomFicDes").Value

' Capture le code dans variable
strCode = VBC.CodeModule.Lines(1, VBC.CodeModule.CountOfLines)

If (strNom = "ThisWorkbook") Then
Workbooks(strNomDes).Activate
With ActiveWorkbook.VBProject.VBComponents(strNom).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString (strCode)
End With
Else
If (InStr(1, strNom, "Feuil", vbTextCompare) > 0) Then
Workbooks(strNomDes).Activate
With ActiveWorkbook.VBProject.VBComponents(strNom).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString (strCode)
End With ' C'est ici que je perd Excel au complet
End If
End If

End Function
'

La ligne [ .AddFromString (strCode) ] est bien exécuté, je place un point
d'arrêt sur l'instruction [ End With ] qui suit et je peux vérifier que le
code
a bel et bien été copié.

Après j'appuis sur la touche F8 pour passer à l'instruction suivante et là,
tout casse, Excel se ferme en urgence avec le rapport de problème
et la récupération du classeur en cours.

Avez-vous déjà rencontré ce dilème, y aurait-il quelque chose qui m'échappe
?

Merci de vous être penché sur mon problème.
mousnynao
Avatar
Mousnynao
Bonjour,

Merci de vous être penché sur mon problème.

J'ai testé votre code et chez moi ça cause le même problème.
Toutefois, si j'ai bien comprit votre code, celui-ci est dans le
classeur A et copie le code VBA dans un classeur B.

Pour ma part, mon code est dans le classeur A qui ouvre le classeur B
contenant le code VBA à copier dans le classeur C.

Je vais tester comme vous l'avez imaginé.

mousnynao

"michdenis" a écrit :

J' ai fait un petit exemple :

Copier tout le code du classeur où le code est situé
vers le classeur2.xls.

Ce code suppose que chaque "Nom des modules" du
classeur où est le code à un équivalent dans le classeur2.xls

Aucun problème éprouvé.

'-------------------------------------
Sub test()

Dim VPC As Object, Code As String
Dim Chemin As String, Wk As Workbook
Dim NomFichier As String

'Info sur le classeur où le code va être copié.
Chemin = "c:exceltoday"
NomFichier = "Classeur2.xls"

'Vérifier si le fichier existe :
If Dir(Chemin & fichier) <> "" Then
On Error Resume Next
Set Wk = Workbooks(NomFichier)
If Err <> 0 Then
Err.Clear
Set Wk = Workbooks.Open(Chemin & fichier)
End If
Else
MsgBox "Impossible de trouver le classeur désiré."
Exit Sub
End If
For Each VPC In ThisWorkbook.VBProject.VBComponents
With VPC.CodeModule
Code = .Lines(1, .CountOfLines)
Err = 0
If Code <> "" Then
CopieVers_Autre_WorkBook Wk, VPC, Code
End If
End With
Next

End Sub

'-------------------------------------
Sub CopieVers_Autre_WorkBook(Wk As Workbook, _
VPC As Object, Code As String)

With Wk.VBProject.VBComponents(VPC.Name).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString Code
End With

End Sub
'-------------------------------------






"Mousnynao" a écrit dans le message de
news:
Bonjour,

Je tente de copier le code VBA d'un classeur source vers un classeur de
destination.
J'ai décomposé le tout par section et dans l'une d'elles je copie le code
contenu dans le module [ ThisWorkbook ] et dans les modules [ Feuil... ].

Le scan rencontre le module [ ThisWorkbook ] en premier et opère la copie
sans problème, mais à la première feuille, celui-ci plante à l'instruction [
End With ].

Voici le code :

Function CopieThisWorkBook()

Dim strCode As String
Dim strNom As String
Dim strChemin As String
Dim strNomDes As String

strNom = VBC.Name
strChemin > Workbooks("XFRVBA.xls").Sheets("Menu").Range("adrFicDes").Value
strNomDes > Workbooks("XFRVBA.xls").Sheets("Menu").Range("nomFicDes").Value

' Capture le code dans variable
strCode = VBC.CodeModule.Lines(1, VBC.CodeModule.CountOfLines)

If (strNom = "ThisWorkbook") Then
Workbooks(strNomDes).Activate
With ActiveWorkbook.VBProject.VBComponents(strNom).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString (strCode)
End With
Else
If (InStr(1, strNom, "Feuil", vbTextCompare) > 0) Then
Workbooks(strNomDes).Activate
With ActiveWorkbook.VBProject.VBComponents(strNom).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString (strCode)
End With ' C'est ici que je perd Excel au complet
End If
End If

End Function
'

La ligne [ .AddFromString (strCode) ] est bien exécuté, je place un point
d'arrêt sur l'instruction [ End With ] qui suit et je peux vérifier que le
code
a bel et bien été copié.

Après j'appuis sur la touche F8 pour passer à l'instruction suivante et là,
tout casse, Excel se ferme en urgence avec le rapport de problème
et la récupération du classeur en cours.

Avez-vous déjà rencontré ce dilème, y aurait-il quelque chose qui m'échappe
?

Merci de vous être penché sur mon problème.
mousnynao




Avatar
michdenis
C'est la même procédure mais cette fois ci elle prend
le code du fichier Classeur2.xls qu'elle ouvre et le copie
dans le fichier où la macro est écrite.

Si tu ne veux pas qu'il touche a cette procédure, tu ajoutes
un module dans le classeur source qui n'existe pas dans
le classeur2.xls(Où est le code à copier) et tu mets
cette procédure là

'--------------------------------
Sub test()

Dim VPC As Object, Code As String
Dim Chemin As String, Wk As Workbook
Dim WkSource As Workbook
Dim NomFichier As String

Set WkSource = ThisWorkbook

'Info sur le classeur d'où origine le code
Chemin = "c:exceltoday"
NomFichier = "Classeur2.xls"

'Vérifier si le fichier existe :
If Dir(Chemin & fichier) <> "" Then
On Error Resume Next
Set Wk = Workbooks(NomFichier)
If Err <> 0 Then
Err.Clear
Set Wk = Workbooks.Open(Chemin & NomFichier)
End If
For Each VPC In Wk.VBProject.VBComponents
With VPC.CodeModule
'Pour empêcher de toucher au module où la
'procédure est écrite : Ne touchera pas au module1
If VPC.Name <> "Module1" Then
Code = .Lines(1, .CountOfLines)
Err = 0
CopieVers_Autre_WorkBook WkSource, VPC, Code
End If
End With
Next
Else
MsgBox "Impossible de trouver le classeur désiré."
Exit Sub
End If
End Sub

'----------------------------------
Sub CopieVers_Autre_WorkBook(Wk As Workbook, _
VPC As Object, Code As String)

With Wk.VBProject.VBComponents(VPC.Name).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString Code
End With

End Sub
'----------------------------------
Avatar
Mousnynao
Bonjour,

Je tenais à vous remercier du temps que vous avez passer sur mon dossier.

Je ne suis pas venu a bout de le faire fonctionner encore, mais il ne me
manque surement pas grand chose. Intuitivement, je crois qu'il s'agit
d'obtenir le bon classeur actif au bon moment.

Dans vos 2 exemples que j'ai du adapter un peu, j'ai obtenu le même message
d'erreur. Je vais retenter en effectuant la manip avec le code tel que vous me
l'avez proposé.

Cordialement
Michel

"michdenis" a écrit :

C'est la même procédure mais cette fois ci elle prend
le code du fichier Classeur2.xls qu'elle ouvre et le copie
dans le fichier où la macro est écrite.

Si tu ne veux pas qu'il touche a cette procédure, tu ajoutes
un module dans le classeur source qui n'existe pas dans
le classeur2.xls(Où est le code à copier) et tu mets
cette procédure là

'--------------------------------
Sub test()

Dim VPC As Object, Code As String
Dim Chemin As String, Wk As Workbook
Dim WkSource As Workbook
Dim NomFichier As String

Set WkSource = ThisWorkbook

'Info sur le classeur d'où origine le code
Chemin = "c:exceltoday"
NomFichier = "Classeur2.xls"

'Vérifier si le fichier existe :
If Dir(Chemin & fichier) <> "" Then
On Error Resume Next
Set Wk = Workbooks(NomFichier)
If Err <> 0 Then
Err.Clear
Set Wk = Workbooks.Open(Chemin & NomFichier)
End If
For Each VPC In Wk.VBProject.VBComponents
With VPC.CodeModule
'Pour empêcher de toucher au module où la
'procédure est écrite : Ne touchera pas au module1
If VPC.Name <> "Module1" Then
Code = .Lines(1, .CountOfLines)
Err = 0
CopieVers_Autre_WorkBook WkSource, VPC, Code
End If
End With
Next
Else
MsgBox "Impossible de trouver le classeur désiré."
Exit Sub
End If
End Sub

'----------------------------------
Sub CopieVers_Autre_WorkBook(Wk As Workbook, _
VPC As Object, Code As String)

With Wk.VBProject.VBComponents(VPC.Name).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString Code
End With

End Sub
'----------------------------------