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
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
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
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
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
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
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
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
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
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
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
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
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
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" <Mousnynao@discussions.microsoft.com> a écrit dans le message de
news: 4197EDC6-0261-44E5-9851-E7DF93622866@microsoft.com...
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
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
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
'----------------------------------
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
'----------------------------------
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
'----------------------------------