OVH Cloud OVH Cloud

Delete module suivi d'un save

3 réponses
Avatar
Alain79
Dans une procedure d'un classeur nous avons introduit une=20
commande permettant de detruire tous les modules du=20
classeur, cette phase de destruction est suivi dans la=20
foul=E9e d'une fonction save du classeur.

A l'observation, le classeur affich=E9 ne pr=E9sente plus=20
aucun module mais celui qui a =E9t=E9 sauv=E9 en garde toujours=20
au moins deux qui n'=E9tait donc pas supprim=E9s au moment de=20
la sauvegarde...

La procedure de destruction utilis=E9 est la suivante

Public Function Suppression_Module(Val_Aux As String)
'Suppression Modules
For i =3D 1 To 1000
Set VBP =3D ActiveWorkbook.VBProject
On Error Resume Next
VBP.VBComponents.Remove VBP.VBComponents(Val_Aux)
If Err Then
Debug.Print "Sortie sur Exit sub " & Val_Aux & " "=20
& i
Exit Function
End If
Next i
Debug.Print "Sortie normale du sub " & Val_Aux & " " & i
End Function


Nous avons essayer de la synchroniser la suite des=20
op=E9ration et entre autre le save sur la disparition=20
effective de chaque module de la collection des modules.=20
Mais est rest=E9 sans succ=E8s sur les modules qui ne veulent=20
absolument pas disparaitre tant que le code est en cour=20
d'execution et qui sont donc sauv=E9s dans le classeur.

La disparition effective ne semble =EAtre possible qu'=E0=20
l'=E9ch=E9ance compete du code lanc=E9, soit apr=E8s la sauvegarde=20
et en cons=E9quence cette souvegarde comporte encore qcq=20
modules irrascibles...

3 réponses

Avatar
j
pas sur de comprendre le pb
si c'est ce que je crois que ça pourrait être, tu dois chercher à supprimer
le module en cours, et ça, ça semble effectivement pas possible directement

Tu peux essayer un truc
au début de la procédure, tu enregistres dans une variable l'adresse de
thisworkbook (zaza=thisworkbook.fullname), puis tu enregistres le fichier
sous rien.xls éventuellement dans les fichiers temporaires, par exemple
thisworkbook.saveas("c:windowstemprien.xls"), et tu continues d'exécuter
la macro depuis les fichiers temporaires :
tu ouvres le fichier zaza par workbooks.open(zaza) et tu lui zappes
sauvagement les modules avant de refermer le fichier "temporaire" par
thisworkbook.close(false)
ok, c'est pas propre, il reste un petit rien dans les temp, mais ça règle le
pb des modules récalcitrants...
--

http://jacxl.free.fr/



"Alain79" a écrit dans le message de
news: 048001c3c564$a8222f80$
Dans une procedure d'un classeur nous avons introduit une
commande permettant de detruire tous les modules du
classeur, cette phase de destruction est suivi dans la
foulée d'une fonction save du classeur.

A l'observation, le classeur affiché ne présente plus
aucun module mais celui qui a été sauvé en garde toujours
au moins deux qui n'était donc pas supprimés au moment de
la sauvegarde...

La procedure de destruction utilisé est la suivante

Public Function Suppression_Module(Val_Aux As String)
'Suppression Modules
For i = 1 To 1000
Set VBP = ActiveWorkbook.VBProject
On Error Resume Next
VBP.VBComponents.Remove VBP.VBComponents(Val_Aux)
If Err Then
Debug.Print "Sortie sur Exit sub " & Val_Aux & " "
& i
Exit Function
End If
Next i
Debug.Print "Sortie normale du sub " & Val_Aux & " " & i
End Function


Nous avons essayer de la synchroniser la suite des
opération et entre autre le save sur la disparition
effective de chaque module de la collection des modules.
Mais est resté sans succès sur les modules qui ne veulent
absolument pas disparaitre tant que le code est en cour
d'execution et qui sont donc sauvés dans le classeur.

La disparition effective ne semble être possible qu'à
l'échéance compete du code lancé, soit après la sauvegarde
et en conséquence cette souvegarde comporte encore qcq
modules irrascibles...
Avatar
michdenis
Bonjour Alain79,


Essaie ceci :


Si tu ne veux pas supprimer le code dans les module feuilles, inactive cette ligne de code dans la procédure en ajoutant une
apostrophes en début de ligne...
.DeleteLines 1, .CountOfLines
Sinon, tout le code de projet situé dans les feuilles modules, modules(supprimer)et formulaires (supprimer) sera détruit..

'----------------------
Sub SupprimeToutCodeEtFormulaire()

Dim VBComp As Object
Dim VBComps As Object

Set VBComps = ActiveWorkbook.VBProject.VBComponents

For Each VBComp In VBComps
Select Case VBComp.Type
Case 100
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
VBComps.Remove VBComp
End Select
Next VBComp

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


Salutations!


Salutations!



"Alain79" a écrit dans le message de news:048001c3c564$a8222f80$
Dans une procedure d'un classeur nous avons introduit une
commande permettant de detruire tous les modules du
classeur, cette phase de destruction est suivi dans la
foulée d'une fonction save du classeur.

A l'observation, le classeur affiché ne présente plus
aucun module mais celui qui a été sauvé en garde toujours
au moins deux qui n'était donc pas supprimés au moment de
la sauvegarde...

La procedure de destruction utilisé est la suivante

Public Function Suppression_Module(Val_Aux As String)
'Suppression Modules
For i = 1 To 1000
Set VBP = ActiveWorkbook.VBProject
On Error Resume Next
VBP.VBComponents.Remove VBP.VBComponents(Val_Aux)
If Err Then
Debug.Print "Sortie sur Exit sub " & Val_Aux & " "
& i
Exit Function
End If
Next i
Debug.Print "Sortie normale du sub " & Val_Aux & " " & i
End Function


Nous avons essayer de la synchroniser la suite des
opération et entre autre le save sur la disparition
effective de chaque module de la collection des modules.
Mais est resté sans succès sur les modules qui ne veulent
absolument pas disparaitre tant que le code est en cour
d'execution et qui sont donc sauvés dans le classeur.

La disparition effective ne semble être possible qu'à
l'échéance compete du code lancé, soit après la sauvegarde
et en conséquence cette souvegarde comporte encore qcq
modules irrascibles...
Avatar
JLuc
Salut Alain79,
Et si tu essayais de lancer cette procedure via un autre classeur?
Tu ouvres le classeur a purger, tu supprimes les modules et tu le sauves.
A+
JLuc

Dans une procedure d'un classeur nous avons introduit une
commande permettant de detruire tous les modules du
classeur, cette phase de destruction est suivi dans la
foulée d'une fonction save du classeur.

A l'observation, le classeur affiché ne présente plus
aucun module mais celui qui a été sauvé en garde toujours
au moins deux qui n'était donc pas supprimés au moment de
la sauvegarde...

La procedure de destruction utilisé est la suivante

Public Function Suppression_Module(Val_Aux As String)
'Suppression Modules
For i = 1 To 1000
Set VBP = ActiveWorkbook.VBProject
On Error Resume Next
VBP.VBComponents.Remove VBP.VBComponents(Val_Aux)
If Err Then
Debug.Print "Sortie sur Exit sub " & Val_Aux & " "
& i
Exit Function
End If
Next i
Debug.Print "Sortie normale du sub " & Val_Aux & " " & i
End Function


Nous avons essayer de la synchroniser la suite des
opération et entre autre le save sur la disparition
effective de chaque module de la collection des modules.
Mais est resté sans succès sur les modules qui ne veulent
absolument pas disparaitre tant que le code est en cour
d'execution et qui sont donc sauvés dans le classeur.

La disparition effective ne semble être possible qu'à
l'échéance compete du code lancé, soit après la sauvegarde
et en conséquence cette souvegarde comporte encore qcq
modules irrascibles...