G'Day JPS,Chez Frédéric, il y a quelques exemples où on récupère dans une string
le code
d'un module.
L'adaptation devrait bien aller. Je suis pris pour le moment mais d'ici
ce
soir,je te fournirais un exemple (à moins qu'un autre brave ait le temps
d'ici là).
Voici 2 petits exemples de ce que je te racontais.
Le premier (EssaiTransformeMultiClasseurs) effectue le changement en
prenant
tous les modules standard des classeurs ouverts (pas ceux des feuilles ou
du
workbook) et en créant de nouveaux modules JPS+ancienNom.
Le deuxième (EssaiTransformeUNModule) effectue le changement en changeant
pour
un module précis dans un classeur précis (assure-toi qu'ils existent).
Dans TransformeCode (c'est le coeur du traitement), on pourrait effectuer
le
changement de code 'in situ' sans créer de nouveaux modules, mais avec
tous les
dangers que cela suppose si la procédure va mal ==> risque de perte de
code.
Avise si ça t'intéresse.
Je ne t'ai pas recopié les fonctions CodeObfuscator et Subst : elle n'ont
pas
changé.
Salutations,
Daniel M.
P.S.: Tu sais pas le plaisir que j'ai pris à détruire autant de modules
JPS_
;-))
' ****************** LE CODE *****************
Sub EssaiTransformeMultiClasseurs()
Dim Wk As Workbook
Dim i As Integer
For Each Wk In Workbooks
If Wk.Name <> ThisWorkbook.Name Then
For i = 1 To Wk.VBProject.VBComponents.Count
With Wk.VBProject.VBComponents(i)
'Debug.Print .Name, .Type
If .Type = vbext_ct_StdModule Then ' module standard
TransformeCode Wk, .Name, Wk, "JPS_" & .Name
End If
End With
Next i '(NomModuleSrc).CodeModule
End If
Next Wk
End Sub
Sub EssaiTransformeUNModule()
TransformeCode Workbooks("FACTUREEUROS.XLS"), "Daniel", _
Workbooks("FACTUREEUROS.XLS"), "JPS"
End Sub
' Moteur de remplacement qui emprunte au module
' "AjouterDuCodeDansUnModule" disponible sur le site
' de Frédéric Sigonneau --
'
http://perso.wanadoo.fr/frederic.sigonneau/code/VBE/AjouterDuCodeDansUnModule.txt
' et de quelques autres routines du site (section VBE)
' Daniel M. Août 2004
Sub TransformeCode(ClasseurSrc As Workbook, NomModuleSrc As String, _
ClasseurDest As Workbook, NomModuleDest As String)
Dim sSrc As String, sDest As String, rep As Variant
If ClasseurDest.Name = ThisWorkbook.Name Or _
ClasseurSrc.Name = ThisWorkbook.Name Then
' On ne touche pas à ce classeur-ci. Point final!
MsgBox "On n'entre pas le nom de ce classeur (" & _
ThisWorkbook.Name & ") comme source ou destination.", _
vbCritical + vbOKOnly, "Erreur"
Exit Sub
End If
With ClasseurSrc.VBProject.VBComponents(NomModuleSrc).CodeModule
Debug.Print .CountOfDeclarationLines, .CountOfLines
sSrc = .Lines(1 + .CountOfDeclarationLines, .CountOfLines -
.CountOfDeclarationLines)
End With
On Error Resume Next
'détruire le module à mettre à jour s'il existe
rep = MsgBox("Nous allons détruire le module " & NomModuleDest & _
" s'il est présent dans " & ClasseurDest.Name & "." & _
vbNewLine & _
"Voulez-vous détruire ce module pour le remplacer par le nouveau
code
transformé?", _
vbYesNo + vbInformation, "Attention!!!")
If rep = vbNo Then
Exit Sub
End If
With ClasseurDest.VBProject.VBComponents
.Remove .Item(NomModuleDest)
End With
Err.Clear
sDest = CodeObfuscator(sSrc) ' LA TRANSFORMATION
ClasseurDest.VBProject.VBComponents.Add(1).Name = NomModuleDest ' ajout du
module standard
If Err.Number <> 0 Then ' si problème ==> avise et sort
MsgBox "Incapable d'ajouter un module au classeur " & _
ClasseurDest.Name & ".", vbExclamation + vbOKOnly, "Arrêt de
la
procédure"
Exit Sub
End If
On Error GoTo 0
ClasseurDest.VBProject.VBComponents(NomModuleDest).CodeModule.AddFromString
sDest
End Sub
G'Day JPS,
Chez Frédéric, il y a quelques exemples où on récupère dans une string
le code
d'un module.
L'adaptation devrait bien aller. Je suis pris pour le moment mais d'ici
ce
soir,
je te fournirais un exemple (à moins qu'un autre brave ait le temps
d'ici là).
Voici 2 petits exemples de ce que je te racontais.
Le premier (EssaiTransformeMultiClasseurs) effectue le changement en
prenant
tous les modules standard des classeurs ouverts (pas ceux des feuilles ou
du
workbook) et en créant de nouveaux modules JPS+ancienNom.
Le deuxième (EssaiTransformeUNModule) effectue le changement en changeant
pour
un module précis dans un classeur précis (assure-toi qu'ils existent).
Dans TransformeCode (c'est le coeur du traitement), on pourrait effectuer
le
changement de code 'in situ' sans créer de nouveaux modules, mais avec
tous les
dangers que cela suppose si la procédure va mal ==> risque de perte de
code.
Avise si ça t'intéresse.
Je ne t'ai pas recopié les fonctions CodeObfuscator et Subst : elle n'ont
pas
changé.
Salutations,
Daniel M.
P.S.: Tu sais pas le plaisir que j'ai pris à détruire autant de modules
JPS_
;-))
' ****************** LE CODE *****************
Sub EssaiTransformeMultiClasseurs()
Dim Wk As Workbook
Dim i As Integer
For Each Wk In Workbooks
If Wk.Name <> ThisWorkbook.Name Then
For i = 1 To Wk.VBProject.VBComponents.Count
With Wk.VBProject.VBComponents(i)
'Debug.Print .Name, .Type
If .Type = vbext_ct_StdModule Then ' module standard
TransformeCode Wk, .Name, Wk, "JPS_" & .Name
End If
End With
Next i '(NomModuleSrc).CodeModule
End If
Next Wk
End Sub
Sub EssaiTransformeUNModule()
TransformeCode Workbooks("FACTUREEUROS.XLS"), "Daniel", _
Workbooks("FACTUREEUROS.XLS"), "JPS"
End Sub
' Moteur de remplacement qui emprunte au module
' "AjouterDuCodeDansUnModule" disponible sur le site
' de Frédéric Sigonneau --
'
http://perso.wanadoo.fr/frederic.sigonneau/code/VBE/AjouterDuCodeDansUnModule.txt
' et de quelques autres routines du site (section VBE)
' Daniel M. Août 2004
Sub TransformeCode(ClasseurSrc As Workbook, NomModuleSrc As String, _
ClasseurDest As Workbook, NomModuleDest As String)
Dim sSrc As String, sDest As String, rep As Variant
If ClasseurDest.Name = ThisWorkbook.Name Or _
ClasseurSrc.Name = ThisWorkbook.Name Then
' On ne touche pas à ce classeur-ci. Point final!
MsgBox "On n'entre pas le nom de ce classeur (" & _
ThisWorkbook.Name & ") comme source ou destination.", _
vbCritical + vbOKOnly, "Erreur"
Exit Sub
End If
With ClasseurSrc.VBProject.VBComponents(NomModuleSrc).CodeModule
Debug.Print .CountOfDeclarationLines, .CountOfLines
sSrc = .Lines(1 + .CountOfDeclarationLines, .CountOfLines -
.CountOfDeclarationLines)
End With
On Error Resume Next
'détruire le module à mettre à jour s'il existe
rep = MsgBox("Nous allons détruire le module " & NomModuleDest & _
" s'il est présent dans " & ClasseurDest.Name & "." & _
vbNewLine & _
"Voulez-vous détruire ce module pour le remplacer par le nouveau
code
transformé?", _
vbYesNo + vbInformation, "Attention!!!")
If rep = vbNo Then
Exit Sub
End If
With ClasseurDest.VBProject.VBComponents
.Remove .Item(NomModuleDest)
End With
Err.Clear
sDest = CodeObfuscator(sSrc) ' LA TRANSFORMATION
ClasseurDest.VBProject.VBComponents.Add(1).Name = NomModuleDest ' ajout du
module standard
If Err.Number <> 0 Then ' si problème ==> avise et sort
MsgBox "Incapable d'ajouter un module au classeur " & _
ClasseurDest.Name & ".", vbExclamation + vbOKOnly, "Arrêt de
la
procédure"
Exit Sub
End If
On Error GoTo 0
ClasseurDest.VBProject.VBComponents(NomModuleDest).CodeModule.AddFromString
sDest
End Sub
G'Day JPS,Chez Frédéric, il y a quelques exemples où on récupère dans une string
le code
d'un module.
L'adaptation devrait bien aller. Je suis pris pour le moment mais d'ici
ce
soir,je te fournirais un exemple (à moins qu'un autre brave ait le temps
d'ici là).
Voici 2 petits exemples de ce que je te racontais.
Le premier (EssaiTransformeMultiClasseurs) effectue le changement en
prenant
tous les modules standard des classeurs ouverts (pas ceux des feuilles ou
du
workbook) et en créant de nouveaux modules JPS+ancienNom.
Le deuxième (EssaiTransformeUNModule) effectue le changement en changeant
pour
un module précis dans un classeur précis (assure-toi qu'ils existent).
Dans TransformeCode (c'est le coeur du traitement), on pourrait effectuer
le
changement de code 'in situ' sans créer de nouveaux modules, mais avec
tous les
dangers que cela suppose si la procédure va mal ==> risque de perte de
code.
Avise si ça t'intéresse.
Je ne t'ai pas recopié les fonctions CodeObfuscator et Subst : elle n'ont
pas
changé.
Salutations,
Daniel M.
P.S.: Tu sais pas le plaisir que j'ai pris à détruire autant de modules
JPS_
;-))
' ****************** LE CODE *****************
Sub EssaiTransformeMultiClasseurs()
Dim Wk As Workbook
Dim i As Integer
For Each Wk In Workbooks
If Wk.Name <> ThisWorkbook.Name Then
For i = 1 To Wk.VBProject.VBComponents.Count
With Wk.VBProject.VBComponents(i)
'Debug.Print .Name, .Type
If .Type = vbext_ct_StdModule Then ' module standard
TransformeCode Wk, .Name, Wk, "JPS_" & .Name
End If
End With
Next i '(NomModuleSrc).CodeModule
End If
Next Wk
End Sub
Sub EssaiTransformeUNModule()
TransformeCode Workbooks("FACTUREEUROS.XLS"), "Daniel", _
Workbooks("FACTUREEUROS.XLS"), "JPS"
End Sub
' Moteur de remplacement qui emprunte au module
' "AjouterDuCodeDansUnModule" disponible sur le site
' de Frédéric Sigonneau --
'
http://perso.wanadoo.fr/frederic.sigonneau/code/VBE/AjouterDuCodeDansUnModule.txt
' et de quelques autres routines du site (section VBE)
' Daniel M. Août 2004
Sub TransformeCode(ClasseurSrc As Workbook, NomModuleSrc As String, _
ClasseurDest As Workbook, NomModuleDest As String)
Dim sSrc As String, sDest As String, rep As Variant
If ClasseurDest.Name = ThisWorkbook.Name Or _
ClasseurSrc.Name = ThisWorkbook.Name Then
' On ne touche pas à ce classeur-ci. Point final!
MsgBox "On n'entre pas le nom de ce classeur (" & _
ThisWorkbook.Name & ") comme source ou destination.", _
vbCritical + vbOKOnly, "Erreur"
Exit Sub
End If
With ClasseurSrc.VBProject.VBComponents(NomModuleSrc).CodeModule
Debug.Print .CountOfDeclarationLines, .CountOfLines
sSrc = .Lines(1 + .CountOfDeclarationLines, .CountOfLines -
.CountOfDeclarationLines)
End With
On Error Resume Next
'détruire le module à mettre à jour s'il existe
rep = MsgBox("Nous allons détruire le module " & NomModuleDest & _
" s'il est présent dans " & ClasseurDest.Name & "." & _
vbNewLine & _
"Voulez-vous détruire ce module pour le remplacer par le nouveau
code
transformé?", _
vbYesNo + vbInformation, "Attention!!!")
If rep = vbNo Then
Exit Sub
End If
With ClasseurDest.VBProject.VBComponents
.Remove .Item(NomModuleDest)
End With
Err.Clear
sDest = CodeObfuscator(sSrc) ' LA TRANSFORMATION
ClasseurDest.VBProject.VBComponents.Add(1).Name = NomModuleDest ' ajout du
module standard
If Err.Number <> 0 Then ' si problème ==> avise et sort
MsgBox "Incapable d'ajouter un module au classeur " & _
ClasseurDest.Name & ".", vbExclamation + vbOKOnly, "Arrêt de
la
procédure"
Exit Sub
End If
On Error GoTo 0
ClasseurDest.VBProject.VBComponents(NomModuleDest).CodeModule.AddFromString
sDest
End Sub
j'ai noté deux anomalies toutefois pour lesquelles tu auras sûrement une
explication :
1) Range("65536") devient Range("65536]
2) Range(Range("H8") devient Range(Range([H8]
et maintenant la proc rectifiée qui fera de moi le prochain MVP....
With ClasseurSrc.VBProject.VBComponents(NomModuleSrc).CodeModule
Debug.Print .CountOfDeclarationLines, .CountOfLines
sSrc = .Lines(1 + .CountOfDeclarationLines, .CountOfLines)
'NDLR : ceci devait être en prime que j'ai refusée!
.CountOfDeclarationLines)
End With
On Error Resume Next
'détruire le module à mettre à jour s'il existe
'NDLR : en fait, on constate avec plaisir que le module à mettre à jour
n'est pas détruit
'ce qui rend les quelques rectifications à faire plus faciles
'dans la ligne ci-dessous il fallait remplacer NomModuleDest par
'NomModuleSrc
rep = MsgBox("Nous allons détruire le module " & NomModuleSrc & _
" s'il est présent dans " & ClasseurDest.Name & "." & _
vbNewLine & _
"Voulez-vous détruire ce module pour le remplacer par le nouveau
code transformé?", _
vbYesNo + vbInformation, "Attention!!!")
If rep = vbNo Then
Exit Sub
End If
With ClasseurDest.VBProject.VBComponents
.Remove .Item(NomModuleDest) <============== Voilà celui que j'enlève
End With
j'ai noté deux anomalies toutefois pour lesquelles tu auras sûrement une
explication :
1) Range("65536") devient Range("65536]
2) Range(Range("H8") devient Range(Range([H8]
et maintenant la proc rectifiée qui fera de moi le prochain MVP....
With ClasseurSrc.VBProject.VBComponents(NomModuleSrc).CodeModule
Debug.Print .CountOfDeclarationLines, .CountOfLines
sSrc = .Lines(1 + .CountOfDeclarationLines, .CountOfLines)
'NDLR : ceci devait être en prime que j'ai refusée!
.CountOfDeclarationLines)
End With
On Error Resume Next
'détruire le module à mettre à jour s'il existe
'NDLR : en fait, on constate avec plaisir que le module à mettre à jour
n'est pas détruit
'ce qui rend les quelques rectifications à faire plus faciles
'dans la ligne ci-dessous il fallait remplacer NomModuleDest par
'NomModuleSrc
rep = MsgBox("Nous allons détruire le module " & NomModuleSrc & _
" s'il est présent dans " & ClasseurDest.Name & "." & _
vbNewLine & _
"Voulez-vous détruire ce module pour le remplacer par le nouveau
code transformé?", _
vbYesNo + vbInformation, "Attention!!!")
If rep = vbNo Then
Exit Sub
End If
With ClasseurDest.VBProject.VBComponents
.Remove .Item(NomModuleDest) <============== Voilà celui que j'enlève
End With
j'ai noté deux anomalies toutefois pour lesquelles tu auras sûrement une
explication :
1) Range("65536") devient Range("65536]
2) Range(Range("H8") devient Range(Range([H8]
et maintenant la proc rectifiée qui fera de moi le prochain MVP....
With ClasseurSrc.VBProject.VBComponents(NomModuleSrc).CodeModule
Debug.Print .CountOfDeclarationLines, .CountOfLines
sSrc = .Lines(1 + .CountOfDeclarationLines, .CountOfLines)
'NDLR : ceci devait être en prime que j'ai refusée!
.CountOfDeclarationLines)
End With
On Error Resume Next
'détruire le module à mettre à jour s'il existe
'NDLR : en fait, on constate avec plaisir que le module à mettre à jour
n'est pas détruit
'ce qui rend les quelques rectifications à faire plus faciles
'dans la ligne ci-dessous il fallait remplacer NomModuleDest par
'NomModuleSrc
rep = MsgBox("Nous allons détruire le module " & NomModuleSrc & _
" s'il est présent dans " & ClasseurDest.Name & "." & _
vbNewLine & _
"Voulez-vous détruire ce module pour le remplacer par le nouveau
code transformé?", _
vbYesNo + vbInformation, "Attention!!!")
If rep = vbNo Then
Exit Sub
End If
With ClasseurDest.VBProject.VBComponents
.Remove .Item(NomModuleDest) <============== Voilà celui que j'enlève
End With
Bonsoir Jean-Paul,j'ai noté deux anomalies toutefois pour lesquelles tu auras sûrement une
explication :
1) Range("65536") devient Range("65536]
2) Range(Range("H8") devient Range(Range([H8]
Je ne peux pas l'expliquer :-(
Peux-tu donner les lignes au complet?
Car, dans la fenêtre Debug (Ctrl-G dans VBE), si j'entre
?CodeObfuscator("Range(""65536"")")
j'obtiens
[65536]
?CodeObfuscator("Range(Range(""H8""))")
j'obtiens
Range([H8])
Ce qui est cohérent avec les résultats attendus.et maintenant la proc rectifiée qui fera de moi le prochain MVP....
With ClasseurSrc.VBProject.VBComponents(NomModuleSrc).CodeModule
Debug.Print .CountOfDeclarationLines, .CountOfLines
sSrc = .Lines(1 + .CountOfDeclarationLines, .CountOfLines)
'NDLR : ceci devait être en prime que j'ai refusée!
.CountOfDeclarationLines)
End With
OK. Je pense que le résultat sera le même : i.e. tu récupères les lignes
après
celles de déclarations (Option Explicit et autres).
Tu peux enlever ou mettre en commentaire la ligne débutant par Debug.PrintOn Error Resume Next
'détruire le module à mettre à jour s'il existe
'NDLR : en fait, on constate avec plaisir que le module à mettre à jour
n'est pas détruit
'ce qui rend les quelques rectifications à faire plus faciles
'dans la ligne ci-dessous il fallait remplacer NomModuleDest par
'NomModuleSrc
Je crois qu'il était correct de parler de NomModuleDest.
L'avis concerne strictement la destruction du Module de Destination (pour
le
remplacer ensuite par le nouveau code).
D'ailleurs, si tu réponds Non : on arrête tout.
Je ne suis pas sûr que cette précaution est vraiment utile.
Quand on y pense, les noms de modules débutant par JPS_, comme leur
maître,
méritent probablement d'être MAJ régulièrement. ;-))
Mais au-delà de la petite blague, il demeure que je ne suis pas convaincu
de
l'utilité de ce traitement.
Je ne touche pas (dans cette procédure) au Module Source. Il ne sera
jamais
détruit ici.
Mais la bonne question est : peut-être voudrais-tu avoir la possibilité de
le
détruire après coup (et c'est probablement ce à quoi tu pensais)? Cela
nécessiterait un petit ajout de code en FIN de traitement. Avise si tel
est ton
intérêt.rep = MsgBox("Nous allons détruire le module " & NomModuleSrc & _
" s'il est présent dans " & ClasseurDest.Name & "." & _
vbNewLine & _
"Voulez-vous détruire ce module pour le remplacer par le nouveau
code transformé?", _
vbYesNo + vbInformation, "Attention!!!")
If rep = vbNo Then
Exit Sub
End If
With ClasseurDest.VBProject.VBComponents
.Remove .Item(NomModuleDest) <============== Voilà celui que
j'enlève
End With
Salutations,
Daniel M.
Bonsoir Jean-Paul,
j'ai noté deux anomalies toutefois pour lesquelles tu auras sûrement une
explication :
1) Range("65536") devient Range("65536]
2) Range(Range("H8") devient Range(Range([H8]
Je ne peux pas l'expliquer :-(
Peux-tu donner les lignes au complet?
Car, dans la fenêtre Debug (Ctrl-G dans VBE), si j'entre
?CodeObfuscator("Range(""65536"")")
j'obtiens
[65536]
?CodeObfuscator("Range(Range(""H8""))")
j'obtiens
Range([H8])
Ce qui est cohérent avec les résultats attendus.
et maintenant la proc rectifiée qui fera de moi le prochain MVP....
With ClasseurSrc.VBProject.VBComponents(NomModuleSrc).CodeModule
Debug.Print .CountOfDeclarationLines, .CountOfLines
sSrc = .Lines(1 + .CountOfDeclarationLines, .CountOfLines)
'NDLR : ceci devait être en prime que j'ai refusée!
.CountOfDeclarationLines)
End With
OK. Je pense que le résultat sera le même : i.e. tu récupères les lignes
après
celles de déclarations (Option Explicit et autres).
Tu peux enlever ou mettre en commentaire la ligne débutant par Debug.Print
On Error Resume Next
'détruire le module à mettre à jour s'il existe
'NDLR : en fait, on constate avec plaisir que le module à mettre à jour
n'est pas détruit
'ce qui rend les quelques rectifications à faire plus faciles
'dans la ligne ci-dessous il fallait remplacer NomModuleDest par
'NomModuleSrc
Je crois qu'il était correct de parler de NomModuleDest.
L'avis concerne strictement la destruction du Module de Destination (pour
le
remplacer ensuite par le nouveau code).
D'ailleurs, si tu réponds Non : on arrête tout.
Je ne suis pas sûr que cette précaution est vraiment utile.
Quand on y pense, les noms de modules débutant par JPS_, comme leur
maître,
méritent probablement d'être MAJ régulièrement. ;-))
Mais au-delà de la petite blague, il demeure que je ne suis pas convaincu
de
l'utilité de ce traitement.
Je ne touche pas (dans cette procédure) au Module Source. Il ne sera
jamais
détruit ici.
Mais la bonne question est : peut-être voudrais-tu avoir la possibilité de
le
détruire après coup (et c'est probablement ce à quoi tu pensais)? Cela
nécessiterait un petit ajout de code en FIN de traitement. Avise si tel
est ton
intérêt.
rep = MsgBox("Nous allons détruire le module " & NomModuleSrc & _
" s'il est présent dans " & ClasseurDest.Name & "." & _
vbNewLine & _
"Voulez-vous détruire ce module pour le remplacer par le nouveau
code transformé?", _
vbYesNo + vbInformation, "Attention!!!")
If rep = vbNo Then
Exit Sub
End If
With ClasseurDest.VBProject.VBComponents
.Remove .Item(NomModuleDest) <============== Voilà celui que
j'enlève
End With
Salutations,
Daniel M.
Bonsoir Jean-Paul,j'ai noté deux anomalies toutefois pour lesquelles tu auras sûrement une
explication :
1) Range("65536") devient Range("65536]
2) Range(Range("H8") devient Range(Range([H8]
Je ne peux pas l'expliquer :-(
Peux-tu donner les lignes au complet?
Car, dans la fenêtre Debug (Ctrl-G dans VBE), si j'entre
?CodeObfuscator("Range(""65536"")")
j'obtiens
[65536]
?CodeObfuscator("Range(Range(""H8""))")
j'obtiens
Range([H8])
Ce qui est cohérent avec les résultats attendus.et maintenant la proc rectifiée qui fera de moi le prochain MVP....
With ClasseurSrc.VBProject.VBComponents(NomModuleSrc).CodeModule
Debug.Print .CountOfDeclarationLines, .CountOfLines
sSrc = .Lines(1 + .CountOfDeclarationLines, .CountOfLines)
'NDLR : ceci devait être en prime que j'ai refusée!
.CountOfDeclarationLines)
End With
OK. Je pense que le résultat sera le même : i.e. tu récupères les lignes
après
celles de déclarations (Option Explicit et autres).
Tu peux enlever ou mettre en commentaire la ligne débutant par Debug.PrintOn Error Resume Next
'détruire le module à mettre à jour s'il existe
'NDLR : en fait, on constate avec plaisir que le module à mettre à jour
n'est pas détruit
'ce qui rend les quelques rectifications à faire plus faciles
'dans la ligne ci-dessous il fallait remplacer NomModuleDest par
'NomModuleSrc
Je crois qu'il était correct de parler de NomModuleDest.
L'avis concerne strictement la destruction du Module de Destination (pour
le
remplacer ensuite par le nouveau code).
D'ailleurs, si tu réponds Non : on arrête tout.
Je ne suis pas sûr que cette précaution est vraiment utile.
Quand on y pense, les noms de modules débutant par JPS_, comme leur
maître,
méritent probablement d'être MAJ régulièrement. ;-))
Mais au-delà de la petite blague, il demeure que je ne suis pas convaincu
de
l'utilité de ce traitement.
Je ne touche pas (dans cette procédure) au Module Source. Il ne sera
jamais
détruit ici.
Mais la bonne question est : peut-être voudrais-tu avoir la possibilité de
le
détruire après coup (et c'est probablement ce à quoi tu pensais)? Cela
nécessiterait un petit ajout de code en FIN de traitement. Avise si tel
est ton
intérêt.rep = MsgBox("Nous allons détruire le module " & NomModuleSrc & _
" s'il est présent dans " & ClasseurDest.Name & "." & _
vbNewLine & _
"Voulez-vous détruire ce module pour le remplacer par le nouveau
code transformé?", _
vbYesNo + vbInformation, "Attention!!!")
If rep = vbNo Then
Exit Sub
End If
With ClasseurDest.VBProject.VBComponents
.Remove .Item(NomModuleDest) <============== Voilà celui que
j'enlève
End With
Salutations,
Daniel M.