Refus de fermeture (workbooks.close)

Résolu
borntobealive Messages postés 138 Date d'inscription   Statut Membre Dernière intervention   -  
baladur13 Messages postés 47799 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
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
A voir également:

2 réponses

borntobealive Messages postés 138 Date d'inscription   Statut Membre Dernière intervention   7
 
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.
0
borntobealive Messages postés 138 Date d'inscription   Statut Membre Dernière intervention   7
 
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 petits
application.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
0
baladur13 Messages postés 47799 Date d'inscription   Statut Modérateur Dernière intervention   13 688
 
0
borntobealive Messages postés 138 Date d'inscription   Statut Membre Dernière intervention   7
 
Comme c'est un monologue je n'avais pas accès au bouton ( il faut avoir reçu au moins une réponse non ? )
0
baladur13 Messages postés 47799 Date d'inscription   Statut Modérateur Dernière intervention   13 688
 
Effectivement, sans réponse, impossible, pour quiconque, de mettre une conversation en résolu. C'est la condition "sine qua none" mais la réponse peut tout à fait provenir de l'auteur de la question.
0