Plantage excel sur fermeture classeur

treza88

XLDnaute Occasionnel
Bonjour,

Dans une procedure qui me permet de quitter l'application si un seul classeur est ouvert ou de quitter uniquement le classeur ouvert si plusieur classeurs sont present, quant le classeur est tous seul pas de soucis ça ferme bien l'application par contre quant il y a plusieur classeurs d'ouvert, ça ferme bien le classeur concerné, mais juste apres ça fait planter excel avec proposition de recuperer les classeur fermer inopinemant.

Pour info le code est dans le classeur que je ferme, mais je ne pense pas que ce soit un réelle probleme?

Voici ma procedure car je ne vois pas ce qui produit le phenomene.


Code:
 Sub recup_données()
    Dim Wb As Workbook
    ActiveSheet.Unprotect
    Var = "G"
    var1 = "E4"
    var2 = "feuil1!E"
 
    Set Plage = Range("E4:E64")
    For Each Cel In Plage
        Ligne = Cel.Row
        Colonne = Cel.Column
        If Cel.Value <> Cells(Ligne - 1, Colonne).Value And Cel.Value <> Empty Or Cel.Offset(0, 1).Value <> Cells(Ligne - 1, Colonne + 1).Value And Cel.Offset(0, 1).Value <> Empty Then
            CelAL = Ligne
            CelAC = Colonne
            Call click_Bouton
        End If
 
    Next Cel
    Range("E4:G64").ClearContents
    ActiveWorkbook.Worksheets("feuil1").Select
    Dim MaDate, Mois, Année
    MaDate = Date           ' Attribue une date.
    Mois = Month(MaDate)    ' Mois contient le mois effectif.
    Mois = jour2    'MonthName(Mois)
    Année = Year(Date)
    NomFich = "Données du mois de " & Mois & " " & Année & ".xls"
    ChemFich = "Z:\Données temps fab\" & NomFich
    On Error GoTo Saut
    Dim wbk As Workbook
    Set wbk = Workbooks.Open(ChemFich)
 
    Do While wbk.ReadOnly = True
        MsgBox "This file is Read Only"
        wbk.Close
        Set wbk = Workbooks.Open(ChemFich)
    Loop
 
    Call Export
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    Dim a As String
    a = MsgBox("Les données on été enregistrées." & vbCrLf & vbLf & "Voulez vous faire une autre saisie ?", vbYesNo, "Dernier choix avant de quitter")
    If a = vbNo Then
        For Each Wb In Application.Workbooks
            Wb.Saved = True
        Next Wb
        Dim NbClass As Integer
        NbClass = Application.Workbooks.Count
      If NbClass > 1 Then   
            ActiveWorkbook.Close SaveChanges:=False         
      Else
            Application.Quit
        End If
    End If
 
    Exit Sub
Saut:
    Dim NewBook
    Set NewBook = Workbooks.Add
    NewBook.SaveAs Filename:=ChemFich
    ActiveCell.Value = "Date"
    ActiveCell.Offset(0, 1).Value = "Client"
    ActiveCell.Offset(0, 2).Value = "Poste"
    ActiveCell.Offset(0, 3).Value = "Temps passé"
    ActiveCell.Offset(0, 4).Value = "Saisie"
    Call Export
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    a = MsgBox("Voulez vous faire une autre saisie ?", vbYesNo, "AM Création")
    If a = vbNo Then
        For Each Wb In Application.Workbooks
            Wb.Saved = True
        Next Wb
        Dim NbClass2 As Integer
        NbClass2 = Application.Workbooks.Count
        If NbClass2 > 1 Then
            ActiveWorkbook.Close SaveChanges:=False
        Else
            Application.Quit
        End If
    End If
End Sub
Merci d'avance
 
Dernière édition:

treza88

XLDnaute Occasionnel
Re : Plantage excel sur fermeture classeur

Ok merci Pierrot93 je viens de refaire un test car j'ai eu un doute, parceque j'avais rajouté des liderations de memoires sur mes variables objets, et que apparemment cela n'avait pas resolu le probleme, mais je crois que si car apres le dernier essaie ça a l'air de fonctionner.

Desolé je vous ai derangé pour rien apparemment, au cas ou ça recommencerait je reviendrais sur le post.

Encore merci, meme si c'est pour me dire qu'il n'y avait rien.
 

Pierrot93

XLDnaute Barbatruc
Re : Plantage excel sur fermeture classeur

Re,

sans doute sans rapport, mais perso je trouve préférable de placer les déclarations des variables sur la première ligne de la procédure, plus facile à lire... En rajoutant également un "option explicit" sur la première ligne du module, ce qui oblige à déclarer toutes les variables et évite ainsi bien des erreurs.... Enfin c'est juste mon avis...

bonne journée
@+
 

treza88

XLDnaute Occasionnel
Re : Plantage excel sur fermeture classeur

Tu as tout a fait raison, mais comme j'ai tendance a construire mes procedures en rajoutant du code bout a bout, ça donne ce resultat.
Je devrais les reprendre pour les remettre en forme, mais comme ça fonctionne du coup elle reste comme elles ont été construite, mais je suis sur que c'est pas la meilleur façon de proceder.

Bonne journée à toi aussi
 

MJ13

XLDnaute Barbatruc
Re : Plantage excel sur fermeture classeur

Bonjour Treza, Pierrot


mais juste apres ça fait planter excel avec proposition de recuperer les classeur fermer inopinemant.

Il y a comme un bug sur application.quit dans certains cas. Mais attention car tu quittes l'application et les autres fichiers aussi se ferment. Essaie dèja de dbugger pour voir où cela plante :confused:.
 

treza88

XLDnaute Occasionnel
Re : Plantage excel sur fermeture classeur

Bonjour MJ13, excel ne plante pas sur application.quit, mais à la fermeture du classeur quand il y a plusieurs classeur ouvert dans la partie de code suivante :

Code:
NbClass = Application.Workbooks.Count
If NbClass > 1 Then 
ActiveWorkbook.Close SaveChanges:=False 
Else
Application.Quit
End If

Mais a priori mon probleme a du être resolu par la liberation des variables objets, car je quittait le classeur sans les liberer et en faisant cela ça a l'air de fonctionner.
 

treza88

XLDnaute Occasionnel
Re : Plantage excel sur fermeture classeur

Bonjour à tous,

Comme je l'avais dit plus haut, si le probleme n'etait pas resolu, je reprendrais la discussion.

Et bien c'est le cas , le probleme que je croyais resolu, ne l'ai pas Excel plante toujours, malgré la liberation de mes variable objet.
MJ13 m'a conseiller de déboguer, mais je ne suis pas abitué a utiliser cette commande.
Donc dans un premier temps si quelqu'un veut bien m'aiguiller sur l'utilisation du debogueur.

Pour info pour moi l'erreur se produit juste apres:

Code:
ActiveWorkbook.Close SaveChanges:=False
 

treza88

XLDnaute Occasionnel
Re : Plantage excel sur fermeture classeur

Re

Merci pour les essaies que tu me propose MJ13, et chez moi non plus ça ne bug pas. mais en meme temps, je viens de faire d'autres essaies et ça ne viendrai peut etre pas du fichier que je ferme mais peut etre plutot du fichier restant ouvert qui se reactive, car avec d'autre classeurs ouvert (essai fait avec des classeur ayant ou pas des macro) je n'ais pas de probleme excel ne bug pas. Dans le classeur qui reste ouvert et qui poserais probleme j'ai la procedure suivante, qui me permet d'afficher une barre d'outil perso a l'activation du classeur.
Mais pourquoi excel buguerai la dessus pour moi c'est un grand mistere

Code:
Private Sub Workbook_Activate()
    On Error Resume Next
    If Application.CommandBars("BO").Visible = False Then
        Application.CommandBars("BO").Visible = True
    End If
    If Application.CommandBars("BO").Visible = False Then
        Call BO
    End If
End Sub

Je met egalement la proceduer quand le classeur est desactivé:

Code:
Private Sub Workbook_Deactivate()
    On Error Resume Next
    Application.CommandBars("BO").Visible = False
End Sub

Voila, je pense que dans la reflection ça avance, pas encore dans la solution mais je vais pas desespérer.
 

treza88

XLDnaute Occasionnel
Re : Plantage excel sur fermeture classeur

Rebonjour à tous,

En continuant mes test, j'ai donc un message d'erreur qui se produit à la reactivation du classeur qui était rester ouvert.
Le message se produit juste à la reactivation,là ou j'ai mis un premier stop juste apres le debut de ma procedure, comme ci dessous :


Code:
 Private Sub Workbook_Activate()
Stop
    On Error Resume Next

    If Application.CommandBars("BO").Visible = False Then
   
        Application.CommandBars("BO").Visible = True
        
    End If
    Stop
    If Application.CommandBars("BO").Visible = False Then
    Stop
        Call BO
            End If
End Sub


Et le message qui apparait est:

Erreur d'entrée/sortie de peripherique
Le tout dans une fenetre venant de Microsoft Visual Basic.

Pouvez vous me dire à quoi cela peut correspondre ?

Ensuite la procedure continu et excel plante entre le deuxieme et le troisieme stop.

Voyez vous une solution pour resoudre le probleme?

Merci d'avance
 
Dernière édition:

MJ13

XLDnaute Barbatruc
Re : Plantage excel sur fermeture classeur

Re

Ce problème de plantage ne doit pas te faire oublier qu'Excel est un tableur et qu'il n'est pas infaillible. On arrive facilement à le faire planter :eek:.

Après pour le résoudre, tu peux essayer de bloquer les évènements avec application.enableevents = false par exemple :confused:.

Tu peux aussi tester le nombre de fichiers d'ouverts et d'agir en conséquence.
 

treza88

XLDnaute Occasionnel
Re : Plantage excel sur fermeture classeur

Bonjour a tous

Pour info, j'ai resolution le probleme en mettant le code d'enregistrement du fichier dans une procedure independante comme ci dessous, et plus de plantage.

Quelqu'un pourra peut etre m'expliquer pourquoi ça fonctionne, car moi j'en sais rien mais ça marche.

Code:
Dim a As String
    a = MsgBox("Les données on été enregistrées." & vbCrLf & vbLf & "Voulez vous faire une autre saisie ?", vbYesNo, "Dernier choix avant de quitter")
    If a = vbNo Then
        For Each Wb In Application.Workbooks
            Wb.Saved = True
        Next Wb
        Set Wb = Nothing
       
Call Ferme_Classeur

    End If

    Exit Sub

Et


Code:
Sub Ferme_Classeur()
Dim NbClass As Integer
        NbClass = Application.Workbooks.Count
        If NbClass > 1 Then
        
            ThisWorkbook.Close savechanges:=False
            Exit Sub
        Else
            Application.Quit
        End If
     Exit Sub
End Sub


Bonne journée a tous et merci
 

Statistiques des forums

Discussions
312 249
Messages
2 086 609
Membres
103 260
dernier inscrit
NHOURRA