Refus de fermeture (workbooks.close)
Résolu
borntobealive
Messages postés
167
Statut
Membre
-
baladur13 Messages postés 47339 Date d'inscription Statut Modérateur Dernière intervention -
baladur13 Messages postés 47339 Date d'inscription Statut Modérateur Dernière intervention -
slt,
Probleme original pour moi puisque excel ne me balance aucun message d'erreur... il se contente de planter et de quitter.
Situation : je creer des fichier qui sont des comptes mensuels à partir d'un fichier
La suppression marche du tonerre, l'ajout aussi mais quand je veux modifier un module excel ne parvient pas à executer
quelqu'un à une idée ?
d'avance merci
(le code pour les acharnés)
Probleme original pour moi puisque excel ne me balance aucun message d'erreur... il se contente de planter et de quitter.
Situation : je creer des fichier qui sont des comptes mensuels à partir d'un fichier
Template.xlsm, quand je voulais faire une modification des macro contenu dans ce fichier Template je devais aussi le modifier dans chacun de mes fichiers... sauf que maintenant ils sont trops nombreux pour que je le fasse à la main du coup j'ai écris un petit bout de code qui fait des mises à jour.
La suppression marche du tonerre, l'ajout aussi mais quand je veux modifier un module excel ne parvient pas à executer
dec.wk_ComptaMensuel.close(oups). il bloque sur la ligne jusqu'à l'erreur
quelqu'un à une idée ?
d'avance merci
(le code pour les acharnés)
Sub MAJ()
If ThisWorkbook.name <> "Template.xlsm" Then Exit Sub
Declaration.RAZ_comptaGen
Dim cel As Range
Dim module As String
Dim nom As String
Dim faire As String
'donner le nom du module modifier
module = "Action"
' que faire ?
' 1 pour ajouter un nouveau module
'2 pour supprimer un module
'3 pour modifier un module existant
faire = 3
For Each cel In Dec.Tab_listeCompte.ListColumns("relevés mensuels").DataBodyRange
nom = Month(cel.Value) & "_" & Year(cel.Value) & ".xlsm"
cel.Offset(0, -1).Value = "en cours"
Application.Workbooks.Open Filename:=Dec.chemin & Application.PathSeparator & nom
Declaration.RAZ_ComptaMensuel (Replace(nom, ".xlsm", ""))
Select Case faire
Case Is = 1
Call AjouterModule(module)
Case Is = 2
Call RetirerModule(module)
Case Is = 3
Call ModifierModule(module)
End Select
Application.DisplayAlerts = False
Dec.Wk_ComptaMensuel.Save
Dec.Wk_ComptaMensuel.Close
Next cel
End Sub
Sub AjouterModule(module As String)
Dim S As String
With Dec.Wk_ComptaMensuel.VBProject.VBComponents.Add(vbext_ct_StdModule)
.name = module
End With
With ThisWorkbook.VBProject.VBComponents(module).CodeModule
S = .Lines(1, .CountOfLines)
End With
With Dec.Wk_ComptaMensuel.VBProject.VBComponents(module).CodeModule
.AddFromString S
End With
End Sub
Sub RetirerModule(module As String)
With Dec.Wk_ComptaMensuel.VBProject
On Error GoTo fin
.VBComponents.Remove .VBComponents(module)
End With
fin:
End Sub
Sub ModifierModule(module As String)
Dim S As String
Stop
With ThisWorkbook.VBProject.VBComponents(module).CodeModule
S = .Lines(1, .CountOfLines)
End With
With Dec.Wk_ComptaMensuel.VBProject.VBComponents(module).CodeModule
.DeleteLines 1, .CountOfLines
End With
With Dec.Wk_ComptaMensuel.VBProject.VBComponents(module).CodeModule
.AddFromString S
End With
End Sub
2 réponses
-
news sur ma demande :
j'ai enlever le application.displayAlert = false , c'était pas lui qui me cachait une option.
J'ai essayer avec un module vide et les 3 actions (ajouter, modifier, retirer) ont parfaitement fonctionner. Je pense que le fait de toucher à un module important de mon classeur ne l'aide pas. je vais creuser dans cette direction. -
Trouvé :
le problème c'est que j'agissait sur des module directement reliés à ThisWorkbook qui contenanait une ribambelle d'évènement.
Je me suis permis de rajouter des petitsapplication.enableEvent = false
et paf Ca a fait des chocapic s
Je reste ouvert à toute explication (Ca marche mais je sais toujours pas pourquoi ça ne marchais pas )
Merci de m'avoir regarder faire mon monologue ;-)
(mon nouveau code pour les acharnés)Sub MAJ() If ThisWorkbook.name <> "Template.xlsm" Then Exit Sub Declaration.RAZ_comptaGen Dim cel As Range Dim module As String Dim nom As String Dim faire As String 'donner le nom du module modifier module = "ThisWorkbook" ' que faire ? ' 1 pour ajouter un nouveau module '2 pour supprimer un module '3 pour modifier un module existant faire = 3 For Each cel In Dec.Tab_listeCompte.ListColumns("relevés mensuels").DataBodyRange nom = Month(cel.Value) & "_" & Year(cel.Value) & ".xlsm" With cel.Offset(0, -1) .Value = "en cours" .Interior.ColorIndex = 4 End With Application.EnableEvents = False Application.Workbooks.Open Filename:=Dec.chemin & Application.PathSeparator & nom Declaration.RAZ_ComptaMensuel (Replace(nom, ".xlsm", "")) 'stop Select Case faire Case Is = 1 Call AjouterModule(module) Case Is = 2 Call RetirerModule(module) Case Is = 3 Call ModifierModule(module) End Select Application.DisplayAlerts = False Dec.Wk_ComptaMensuel.Save 'Stop Dec.Wk_ComptaMensuel.Close With cel.Offset(0, -1) .Value = "" .Interior.ColorIndex = 4 End With Application.EnableEvents = True Next cel End Sub Sub AjouterModule(module As String) Dim S As String With Dec.Wk_ComptaMensuel.VBProject.VBComponents.Add(vbext_ct_StdModule) .name = module End With With ThisWorkbook.VBProject.VBComponents.Item(module).CodeModule S = .Lines(1, .CountOfLines) End With With Dec.Wk_ComptaMensuel.VBProject.VBComponents.Item(module).CodeModule .AddFromString S End With End Sub Sub RetirerModule(module As String) With Dec.Wk_ComptaMensuel.VBProject On Error GoTo fin .VBComponents.Remove .VBComponents.Item(module) End With fin: End Sub Sub ModifierModule(module As String) Dim S As String With ThisWorkbook.VBProject.VBComponents.Item(module).CodeModule If .CountOfLines = 0 Then Exit Sub S = .Lines(1, .CountOfLines) End With With Dec.Wk_ComptaMensuel.VBProject.VBComponents.Item(module).CodeModule .DeleteLines 1, .CountOfLines End With With Dec.Wk_ComptaMensuel.VBProject.VBComponents.Item(module).CodeModule .AddFromString S End With End Sub Sub instalation() If ThisWorkbook.name <> "Template.xlsm" Then Exit Sub Declaration.RAZ_comptaGen Dim cel As Range Dim module As String Dim nom As String Dim vbmod As VBComponent For Each cel In Dec.Tab_listeCompte.ListColumns("relevés mensuels").DataBodyRange nom = Month(cel.Value) & "_" & Year(cel.Value) & ".xlsm" With cel.Offset(0, -1) .Value = "en cours" .Interior.ColorIndex = 4 End With Application.EnableEvents = False Application.Workbooks.Open Filename:=Dec.chemin & Application.PathSeparator & nom Call Declaration.RAZ_ComptaMensuel(Replace(nom, ".xlsm", "")) For Each vbmod In Dec.Wk_ComptaMensuel.VBProject.VBComponents module = vbmod.name Call ModifierModule(module) Next vbmod Application.DisplayAlerts = False Dec.Wk_ComptaMensuel.Save With cel.Offset(0, -1) .Value = "" .Interior.ColorIndex = 4 End With Dec.Wk_ComptaMensuel.Close Application.EnableEvents = True Next cel End Sub-
Bonjour
A toutes fins utiles ==> https://www.commentcamarche.net/infos/25917-marquer-un-fil-de-discussion-comme-etant-resolu/ -
-
-