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

PB : Supprimer Modules excel en VBA

3 réponses
Avatar
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

3 réponses

Avatar
Pascal Engelmajer
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" a écrit dans le message de news:

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


Avatar
Frédéric Sigonneau
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


Avatar
Alain CROS
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" a écrit dans le message de news:
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