PB : Supprimer Modules excel en VBA

Le
romain
Bonjour,
Avec un classeur excel, j'ouvre un autre classeur, je déprotége son
code et je dois supprimer un ensemble de modules préétablis dans
celui-ci avant de les ré-importer (gestion en fait des mises à jour).
Cependant, certains modules du classeur à mettre à jour ont l'air
"vérrouillés" car il faut que j'arrête l'execution de la macro de mise
à jour pour visualiser la suppression effective de ces modules. je
ne comprends pas le verrouillage d'excel car la suppression manuelle
marche trés bien.. j'ai bien essayé de m'appuyer sur DoEvents mais
cela ne donne rien.

exemple de mon code :

wbPAQ.VBProject.VBComponents.Remove .Item(strNomModuleUpdate) : le PB
vient de là, suppression effective qu'à l'arrêt de la macro
DoEvents
'on exporte le nouveau module
ThisWorkbook.VBProject.VBComponents(strNomModuleUpdate).Export
tmpModule & nomModule
'on importe le nouveau module dans le classeur à mettre à jour
wbPAQ.VBProject.VBComponents.Import(tmpModule & nomModule).Name =
strNomModuleUpdate

ou WbPAQ représente le classeur à mettre à jour.

Je désespère.
Merci de votre aide.
Romain
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pascal Engelmajer
Le #1228065
Salut,
pour faire la même chose je ne détruis pas le module de code (Remove). je
supprime les lignes. Puis je les ré-écris à partir du fichier texte .bas)
un piste vite fait
Dim monModule As codeModule
Dim nomModule As String
Dim nbLignes As Long
Dim Wb As Workbook
nomModule = "xxxxx" 'module destination
Set Wb = Workbooks("wbPAQ")
Set monModule = Wb.VBProject.VBComponents(nomModule).codeModule
nbLignes = monModule.CountOfLines
'.../...
With monModule
.DeleteLines 1, nbLignes
.AddFromFile tmpModule & nomModule & ".bas"
' ne pas oublier la ligne CodePane.Window ... origine possible
ton pb
' >le PB vient de là, suppression effective qu'à l'arrêt de la
macro
.CodePane.Window.Close
End With

End With
'.../...


--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"romain"
Bonjour,

wbPAQ.VBProject.VBComponents.Remove .Item(strNomModuleUpdate) : le PB
vient de là, suppression effective qu'à l'arrêt de la macro
DoEvents
'on exporte le nouveau module
ThisWorkbook.VBProject.VBComponents(strNomModuleUpdate).Export
tmpModule & nomModule
'on importe le nouveau module dans le classeur à mettre à jour
wbPAQ.VBProject.VBComponents.Import(tmpModule & nomModule).Name > strNomModuleUpdate

ou WbPAQ représente le classeur à mettre à jour.

Je désespère....
Merci de votre aide.
Romain


Frédéric Sigonneau
Le #1232396
Bonjour,

Il peut être nécessaire d'insister pour que l'exécution du code soit réellement
prise en compte. Dans ce cas, un seul DoEvents ne suffit pas. Je suis parfois
obligé, dans le même genre de situation, d'inclure des petites boucles comme
celles-ci au lieu d'un DoEvents isolé :

Do: i=i+1: DoEvents: Loop While i<5000

Si tu déprotèges ton projet avec du code avant de supprimer le module, une
petite moulinette de DoEvents juste après le code de déprotection (et avant le
code de suppression) pourrait aussi être profitable (avec Excel 2000 notamment).

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !

romain a écrit:
Bonjour,
Avec un classeur excel, j'ouvre un autre classeur, je déprotége son
code et je dois supprimer un ensemble de modules préétablis dans
celui-ci avant de les ré-importer (gestion en fait des mises à jour).
Cependant, certains modules du classeur à mettre à jour ont l'air
"vérrouillés" car il faut que j'arrête l'execution de la macro de mise
à jour pour visualiser la suppression effective de ces modules.... je
ne comprends pas le verrouillage d'excel car la suppression manuelle
marche trés bien..... j'ai bien essayé de m'appuyer sur DoEvents mais
cela ne donne rien....

exemple de mon code :

wbPAQ.VBProject.VBComponents.Remove .Item(strNomModuleUpdate) : le PB
vient de là, suppression effective qu'à l'arrêt de la macro
DoEvents
'on exporte le nouveau module
ThisWorkbook.VBProject.VBComponents(strNomModuleUpdate).Export
tmpModule & nomModule
'on importe le nouveau module dans le classeur à mettre à jour
wbPAQ.VBProject.VBComponents.Import(tmpModule & nomModule).Name > strNomModuleUpdate

ou WbPAQ représente le classeur à mettre à jour.

Je désespère....
Merci de votre aide.
Romain


Alain CROS
Le #1229738
Bonjour.

Avant la ligne qui pose problème, mettre

Application.VBE.MainWindow.Visible = True
puis la ligne problématique puis
Application.VBE.MainWindow.Visible = False

Le fait de rendre visible l'éditeur VBE doit le rappeler à l'ordre dans la mise à jour.

Alain CROS

"romain"
Bonjour,
Avec un classeur excel, j'ouvre un autre classeur, je déprotége son
code et je dois supprimer un ensemble de modules préétablis dans
celui-ci avant de les ré-importer (gestion en fait des mises à jour).
Cependant, certains modules du classeur à mettre à jour ont l'air
"vérrouillés" car il faut que j'arrête l'execution de la macro de mise
à jour pour visualiser la suppression effective de ces modules.... je
ne comprends pas le verrouillage d'excel car la suppression manuelle
marche trés bien..... j'ai bien essayé de m'appuyer sur DoEvents mais
cela ne donne rien....

exemple de mon code :

wbPAQ.VBProject.VBComponents.Remove .Item(strNomModuleUpdate) : le PB
vient de là, suppression effective qu'à l'arrêt de la macro
DoEvents
'on exporte le nouveau module
ThisWorkbook.VBProject.VBComponents(strNomModuleUpdate).Export
tmpModule & nomModule
'on importe le nouveau module dans le classeur à mettre à jour
wbPAQ.VBProject.VBComponents.Import(tmpModule & nomModule).Name > strNomModuleUpdate

ou WbPAQ représente le classeur à mettre à jour.

Je désespère....
Merci de votre aide.
Romain


Publicité
Poster une réponse
Anonyme