IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Excel a cessé de fonctionner suite a l'execution d'un code


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut Excel a cessé de fonctionner suite a l'execution d'un code
    Bonjour à tous,

    Tout d'abord désolé pour le titre du poste, mais je n'ai pas trouvé de titre plus explicite.

    Le contexte est le suivant :
    Je cherche à mettre un bouton "actions" sur les feuilles d'un classeur, au clic sur ce bouton, un pop-up s'ouvre et offre plusieurs actions possibles.
    Mes feuilles sont en fait des fiches à remplir et les actions possible sont : Valider, Modifier, Imprimer, Supprimer, ...

    Mon problème :
    Une action en particulière fait passer l'application Excel dans un "drôle d'état" (la encore je ne trouve pas d'autres mots).
    L'action en question est : Supprimer (son but est tout simplement de supprimer la feuille).

    Je vous décris brièvement le "drôle d'état" :
    • La croix "fermer le classeur" est inopérante de même que celle "fermer l'application"
    • La navigation dans le ruban est possible mais aucun bouton ne fonctionne
    • Les autres contrôles du ruban font planter Excel
    • La navigation dans la feuille (sélection de cellules) fonction à la souris mais plante si faite via le clavier (ex : Ctrl + Fin)
    • Pleins d'autres choses étranges




    J'ai minimisé le code en ne laissant que la création de la commandBar et du bouton Supprimer pour pouvoir vous le présenter.
    Voici le code :

    Création, suppression et alimentation de la Pop-up :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Const CmdBarName = "Menu Actions"
     
    Private Sub DeleteCommandBar()
        On Error Resume Next
            Application.CommandBars(CmdBarName).Delete
    End Sub
     
    Private Sub CreateCommandBar()
        Dim objCommandBar As CommandBar
            Set objCommandBar = Application.CommandBars.Add(CmdBarName, msoBarPopup, False, True)
                Call AjouterBouton("Supprimer", 1088, "Supprimer", objCommandBar, True)
    fin:
        Set objCommandBar = Nothing
    End Sub
     
    Private Sub AjouterBouton(ButtonName As String, ButtonFace As Long, ButtonOnAction As String, ByRef objCommandBar As CommandBar, bEnab As Boolean)
        With objCommandBar.Controls.Add(Type:=msoControlButton, Temporary:=True)
            .Caption = ButtonName
            .FaceId = ButtonFace
            .OnAction = ButtonOnAction
            .Enabled = bEnab
        End With
    End Sub
    Le code de l'action Supprimer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Supprimer(): Call SupprimerFiche(ActiveSheet): End Sub
     
    Sub SupprimerFiche(ByRef objWorksheet As Worksheet)
        Dim sPrompt$
            sPrompt = "Message de confirmation"
            Select Case MsgBox(Prompt:=sPrompt, Buttons:=vbExclamation + vbYesNo, Title:="Supprimer fiche pédagogique")
                Case vbYes
                    Application.DisplayAlerts = False
                        objWorksheet.Delete
                    Application.DisplayAlerts = True
                Case Else
                    'Rien
            End Select
    End Sub
    Et enfin, la macro associée à mon bouton Actions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub ShowPopUp()
        Call DeleteCommandBar
        Call CreateCommandBar
        Application.CommandBars(CmdBarName).ShowPopUp
    End Sub
    Je supprime le pop-up pour la recréer à chaque clic car le pop-up est en fait dynamique (Nombre de bouton et propriété Enabled des boutons). Notamment en fonction de l'utilisateur sur le fichier et du contenue de la fiche.
    Le code fonctionne lorsqu'il est lancé depuis l'éditeur VBA. Mais provoque ce drôle d'état lorsqu'il l'est depuis le pop-up.

    J'ai trouvé deux solutions pour sortir de cet état :
    1. Changer de feuille et prendre le focus sur un Shape (les Shapes de la feuille active après suppression sont eux aussi inopérants)
    2. Ajouter une feuille et la supprimer

    Les deux solutions ne fonctionnent que manuellement.




    Avez-vous des idées sur ce qui provoque cet état ? Des Solutions ?
    S'il vous prend l'envie de tester le code, il vous suffit de copier les 3 morceaux de codes dans un module, de créer plusieurs feuilles et d'y ajouter un bouton en lui associant la macro ShowPopUp.

    Merci d'avoir pris le temps de me lire et merci d'avance pour vos réponses.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 194
    Par défaut
    Bonjour,

    mon avis est que passer en paramètre, byref qui plus est, un objet qui va être supprimé par la sub qui le porte ne dois rien donner de stable

    j'aurais plutôt préféré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Supprimer(): Call SupprimerFiche(ActiveSheet.name): End Sub
     
    Sub SupprimerFiche(ByVal WorksheetName As String)
        Dim sPrompt as String 'on est en VBA !!!
            sPrompt = "Message de confirmation"
            Select Case MsgBox(Prompt:=sPrompt, Buttons:=vbExclamation + vbYesNo, Title:="Supprimer fiche pédagogique")
                Case vbYes
                    Application.DisplayAlerts = False
                        Worksheets(WorksheetName).Delete
                    Application.DisplayAlerts = True
                Case Else
                    'Rien
            End Select
    End Sub
    mais ce n'est que mon avis...

  3. #3
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Merci pour cette réponse Phil Free,

    ByVal ou ByRef ne change rien au comportement que je décris.
    J'utilise ByRef car je travail avec l'objet lui même et non une copie de l'objet.

    Ne trainant pas de variables entre mes procédures, pas de soucis avec la variable objWorksheet, elle devient juste Nothing et n'ai plus utilisé de toutes façons.

  4. #4
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Bonjour,
    Je viens de tester votre code ainsi que proposé.
    Chez moi ça marche impec avec un truc bizarre. Un petit message qui me propose : Aide ou supprimer
    Je choisi supprimer et la feuille est supprimée après le choix oui du MsgBox. ça marche impec! Je suis en Mac!
    Nom : Capture d’écran 2018-03-20 à 16.49.27.png
Affichages : 561
Taille : 31,6 Ko
    Nom : Capture d’écran 2018-03-20 à 16.49.44.png
Affichages : 541
Taille : 13,4 Ko
    Nom : Capture d’écran 2018-03-20 à 16.50.17.png
Affichages : 687
Taille : 32,7 Ko

  5. #5
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Merci Transitoire d'avoir pris le temps de tester le code.

    N'étant pas sur mac je peux me tromper mais je crois que les pop-up sont toujours accompagnées d'un bouton aide. Donc rien d'anormale dans la pop-up.

    Comme indiqué dans mon premier post, le code fonction donc la feuille est bien supprimée suite au message de confirmation. C'est une fois la suppression effectuée que le drôle d'état arrive.
    Apres avoir supprimé la feuille le classeur se comporte normalement ?

  6. #6
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Je confirme, même avec la feuille supprimée, tout fonctionne bien.
    Je suis en Mac 10.6.8 et excel 2011 avec toutes les MAJ.
    J'ai fait des copiés collés pour le code et tout fonctionne bien.. La s'arrête ma compétence, désolé.
    Cordialement

Discussions similaires

  1. [XL-2010] "Excel a cessé de fonctionner" suite à un bug lors de suppression de lignes
    Par Dushka dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/02/2014, 09h00
  2. [XL-2007] Problème macro VBA "Excel a cessé de fonctionner"
    Par MAD61141 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/01/2014, 20h02
  3. [XL-2010] Excel a cessé de fonctionner --> Automation ?
    Par Mattrois dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 10/07/2013, 11h54
  4. Excel a cessé de fonctionner: pb de time out?
    Par quarkup31 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/02/2013, 22h23
  5. [AC-2007] Erreur Excel a cessé de fonctionner
    Par tibofo dans le forum VBA Access
    Réponses: 0
    Dernier message: 09/09/2010, 11h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo