Refus de fermeture (workbooks.close)

Résolu
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

2 réponses

  1. 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.
    1. 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
      
      1. Comme c'est un monologue je n'avais pas accès au bouton ( il faut avoir reçu au moins une réponse non ? )
      2. Modérateur
        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.

    Discussions similaires

    wannonce en panne

    7 réponses