OVH Cloud OVH Cloud

Modumles récalcitrants

11 réponses
Avatar
Bonsoir =E0 tous

Je souhaite effacer des macros par du vba.
Donc je suis all=E9 sur le site de Fr=E9d=E9ric Sigonneau
et j'ai copi=E9 le code suivant :

Set Wbk =3D Workbooks("Perso.xls")
'd=E9truire le module =E0 mettre =E0 jour s'il existe
On Error Resume Next
With Wbk.VBProject.VBComponents
.Remove .Item("MonModule")
End With
On Error GoTo 0

Que j'ai adapt=E9, bien s=FBr.
Sur 5 modules il m'en efface 3, les deux autres pas moyen.
Si on supprime le On Error Resume Next
ca passe quand m=EAme, donc pas d'erreur d=E9tect=E9e.
J'ai pens=E9 avoir un module de m=EAme nom ailleurs.
J'ai donc fait deux remove, rien
dix, 100, mille, tjrs pareil.

L'ennui c'est que si je veux refaire des modules du m=EAme=20
nom, il me jette =E9videmment.

Si vous avez des id=E9es, =E7a me rendra bien service.

merci.

10 réponses

1 2
Avatar
michdenis
Bonjour,

N.B c'est bien de publier une macro, mais il faut définir d'abord ce que l'on désire obtenir comme résultat .


Cette macro supprime toutes les macros et leur module, formulaires et leur code ainsi que la macros situées dans les
module feuilles.

Attention à son utilisation !

'-------------------------
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!



a écrit dans le message de news:d0b201c439bc$be6d3740$
Bonsoir à tous

Je souhaite effacer des macros par du vba.
Donc je suis allé sur le site de Frédéric Sigonneau
et j'ai copié le code suivant :

Set Wbk = Workbooks("Perso.xls")
'détruire le module à mettre à jour s'il existe
On Error Resume Next
With Wbk.VBProject.VBComponents
.Remove .Item("MonModule")
End With
On Error GoTo 0

Que j'ai adapté, bien sûr.
Sur 5 modules il m'en efface 3, les deux autres pas moyen.
Si on supprime le On Error Resume Next
ca passe quand même, donc pas d'erreur détectée.
J'ai pensé avoir un module de même nom ailleurs.
J'ai donc fait deux remove, rien
dix, 100, mille, tjrs pareil.

L'ennui c'est que si je veux refaire des modules du même
nom, il me jette évidemment.

Si vous avez des idées, ça me rendra bien service.

merci.
Avatar
Bonsoir

Merci pour cette réponse ultra super rapide

N.B c'est bien de publier une macro, mais il faut définir
d'abord ce que l'on désire obtenir comme résultat .


Je veux effacer toutes les macros pour les refaire
à partir de celles que je reprends d'un autre classeur.

Le code de FS paraissait tout à fait dans la cible.

J'essaie le tien.
Si tu ne me revois pas, c'est que j'ai été éliminé aussi :-
)

Avatar
Re

Même résultat : un module sur deux reste et bien dans cet
ordre :
1 effacé
2 reste
3 effacé
4 reste
5 effacé.

Selon les manipulations que je fais ils semblent
disparaitre un peu plus tard (?).
Du coup je me demande s'il ne faut pas un certain temps
pour purger le module.
Bon j'y crois pas trop quand même
Comme c'est la fin de semaine, je verra ça Lundi au calme.

Merci encore.
Avatar
LeSteph
Bonsoir,
pourquoi veux tu faire cela
Il y a des outils prévus dans excel
et des gens qui chercheront toujours à t'aider sur ce groupe
mais ton objectif n'est pas clair .
Pourquoi vouloir détruire Perso !!??

LeSteph


a écrit dans le message de
news:d12201c439c5$4ace6f80$
Re

Même résultat : un module sur deux reste et bien dans cet
ordre :
1 effacé
2 reste
3 effacé
4 reste
5 effacé.

Selon les manipulations que je fais ils semblent
disparaitre un peu plus tard (?).
Du coup je me demande s'il ne faut pas un certain temps
pour purger le module.
Bon j'y crois pas trop quand même
Comme c'est la fin de semaine, je verra ça Lundi au calme.

Merci encore.
Avatar
FxM
Bonsoir,

De Maître FS :

Sub test()
'suppose que le classeur est ouvert...
DeleteAllVBA Workbooks("Classeur_Consultation.xls")
'rend la suppression du code définitive :
Workbooks("Classeur_Consultation.xls").Save
End Sub

Sub DeleteAllVBA(Wbk As Workbook)
'd'après un auteur inconnu, mpep
Dim VBComp As Variant
Dim VBComps As Variant

Set VBComps = Wbk.VBProject.VBComponents
For Each VBComp In VBComps
Select Case VBComp.Type
Case 1 To 3
VBComps.Remove VBComp
Case Else
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
Next VBComp

End Sub
'=========================================
@+
FxM




wrote:

Bonsoir à tous

Je souhaite effacer des macros par du vba.
Donc je suis allé sur le site de Frédéric Sigonneau
et j'ai copié le code suivant :

Set Wbk = Workbooks("Perso.xls")
'détruire le module à mettre à jour s'il existe
On Error Resume Next
With Wbk.VBProject.VBComponents
.Remove .Item("MonModule")
End With
On Error GoTo 0

Que j'ai adapté, bien sûr.
Sur 5 modules il m'en efface 3, les deux autres pas moyen.
Si on supprime le On Error Resume Next
ca passe quand même, donc pas d'erreur détectée.
J'ai pensé avoir un module de même nom ailleurs.
J'ai donc fait deux remove, rien
dix, 100, mille, tjrs pareil.

L'ennui c'est que si je veux refaire des modules du même
nom, il me jette évidemment.

Si vous avez des idées, ça me rendra bien service.

merci.




Avatar
Geo
Bonjour FxM


Bonsoir,

De Maître FS :


Hé oui, c'est pour cela que je suis allé droit à son site que j'ai
évidemment dans mes favoris.

[...]

C'est au bureau que j'ai le pb et je n'ai pas ramené les classeurs
ici, donc je n'avancerai pas sur le sujet pendant quelques jours.

Je regarde quand même comment introduire une temporisation, j'y crois
pas trop mais je suis embêté avec ce truc.

Bonne fin de semaine.

Avatar
Geo
Bonjour LeSteph


Bonsoir,
pourquoi veux tu faire cela ?


j'essseplique puisque je n'ai pas été clair.

J'ai une soixantaine de classeurs (de 1 à n) bâtis par duplication du
classeur 0, puis personnalisation.
Dans ces classeurs il y a des macros qui contrôlent la présentation,
les répartitions, font des calculs d'approximation etc.
C'est une vieille histoire, car la première version a été faite avec
Excel 97 et j'avais reçu de sérieux coups de main sur ce forum.
Je viens de faire une opération de maintenance et je voudrais recopier
les macros modifiées sur les 60 classeurs.
Et évidemment ce qui marchait en 97, ne marche plus :-(

En gros :
je lis le classeur 0 et je mémorise le texte des modules; il y en a 5.
et pour chaque classeur :
- effacer les modules
- ajouter les modules et y insérer le code.

En plus je trouve ça tel quel, ou presque sur le site de Frédéric.
pas de pot, le code d'effacement se déroule bien, même sans
récupération d'erreur, mais les modules de rang pair ne disparaissent
pas et le Add se ramasse.

Il semble que si j'enregistre le classeur à la main après la tentative
d'effacement, les modules aient disparus à la réouverture.
Bon j'en avais marre donc je ne suis pas certain que ce soit
reproductible.
Mes classeurs pèsent 6 MO chacun, cela induit peut-être des délais qui
posent problème dans ce cas.
J'essaierai en ajoutant une tempo entre chaque opération.
Si ça dure des heures ce n'est pas bien grave car on ne fait pas cela
souvent, mais j'en ai besoin maintenant.

Merci

Avatar
Alain CROS
Bonjour

Affiche l'éditeur VBE avant de faire tourner ton code par
Application.VBE.MainWindow.Visible = True

J'ai constaté que le fait de rendre visible l'éditeur VBE doit le rappeler à l'ordre dans la mise à jour.

Alain CROS

"Geo" a écrit dans le message de news: #
Bonjour FxM


Bonsoir,

De Maître FS :


Hé oui, c'est pour cela que je suis allé droit à son site que j'ai
évidemment dans mes favoris.

[...]

C'est au bureau que j'ai le pb et je n'ai pas ramené les classeurs
ici, donc je n'avancerai pas sur le sujet pendant quelques jours.

Je regarde quand même comment introduire une temporisation, j'y crois
pas trop mais je suis embêté avec ce truc.

Bonne fin de semaine.





Avatar
michdenis
Bonjour Geo,

Pour ce type de truc, il n'y a pas besoin de temporisation.

La macro de Frédéric Sigonneau devrait fonctionner comme celle que je t'ai proposer. Cette dernière fonctionne très bien
si tu la place dans un des modules du classeur où tu veux faire disparaître le code ... tel que spécifié.


Salutations!




"Geo" a écrit dans le message de news:%
Bonjour FxM


Bonsoir,

De Maître FS :


Hé oui, c'est pour cela que je suis allé droit à son site que j'ai
évidemment dans mes favoris.

[...]

C'est au bureau que j'ai le pb et je n'ai pas ramené les classeurs
ici, donc je n'avancerai pas sur le sujet pendant quelques jours.

Je regarde quand même comment introduire une temporisation, j'y crois
pas trop mais je suis embêté avec ce truc.

Bonne fin de semaine.

Avatar
Geo
Bonjour Alain


Bonjour

Affiche l'éditeur VBE avant de faire tourner ton code par
Application.VBE.MainWindow.Visible = True

J'ai constaté que le fait de rendre visible l'éditeur VBE doit le
rappeler à l'ordre dans la mise à jour.



C'est noté, je regarde.

Merci.

1 2