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 :

probleme avec la suppression des userform


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut probleme avec la suppression des userform
    bonjour j'ai un petit soucis avec mes userform
    si qq un pouvait m'aider ce serait super....

    en fait à l'ouverture d'un fichier excel l'auto_open crée plusieurs userform.

    lors de la fermeture de se fichier l'auto_close les ferme en utilisant la fonction remove

    le soucis vient du fait que les userform ne se suppriment pas toujours. si elles n'ont jamais été affiché il n'y a pas de soucis. Par contre toutes les userform qui ont été affiché à un moment ne se suppriment pas.

    lors de l'activation d'un bouton des userform j'utilise la fonction Unload pour les vider.
    est ce la bonne fonction? est il possible de désactiver toutes les userform? de retrouver l'etat initial du classeur?

    merci beaucoup

  2. #2
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    Bonjour,

    L’extrait de ton code censé détruire les Userforms serait le bienvenu
    Michel Gaboly
    Développeur Excel et VBA


    Pas de question technique par MP, je n’y répondrai pas, utilisez le forum - Merci
    Pensez à ajouter le tag

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    l' Auto_close lance cette macro

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub effacer_userform()
     
        ThisWorkbook.VBProject.vBComponents.Remove ThisWorkbook.VBProject.vBComponents("historique")
        ThisWorkbook.VBProject.vBComponents.Remove ThisWorkbook.VBProject.vBComponents("mot_passe")
        ThisWorkbook.VBProject.vBComponents.Remove ThisWorkbook.VBProject.vBComponents("choix_graph")
     
    End Sub

  4. #4
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    Re,

    J’ai testé ton code avec Excel 2007. Il fonctionne, que les UserForms aient été ouverts ou non. Quelle version utilises-tu ?

    N’as-tu aucun message d’erreur et es-tu sûr d’utiliser les bons noms ?

    Par ailleurs, tu pourrais rendre ton code plus lisible en le modifiant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub EffacerUserForms()
            With ThisWorkbook.VBProject
                vBComponents.Remove .vBComponents("historique")
                vBComponents.Remove .vBComponents("mot_passe")
                vBComponents.Remove .vBComponents("choix_graph")
            End With
    End Sub
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub EffacerUserForms()
            With ThisWorkbook.VBProject.vBComponents
                .Remove .Parent.vBComponents("historique")
                .Remove .Parent.vBComponents("mot_passe")
                .Remove .Parent.vBComponents("choix_graph")
            End With
    End Sub
    Enfin, sur le fond, quel est l’intérêt de récréer les UserForms à chaque ouverture du fichier pour les détruire à la fermeture ?

    Pourquoi ne pas simplement conserver les UserForms sans et les initialiser avant de les charger en mémoire (Load ou Show, selon les besoins) ?
    Michel Gaboly
    Développeur Excel et VBA


    Pas de question technique par MP, je n’y répondrai pas, utilisez le forum - Merci
    Pensez à ajouter le tag

  5. #5
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    J'utilise office 2003 en fait, enfin je ne vais pas tarder a passer en 2007.
    Merci pour la simplification de l'ecriture...

    en attendant je viens de remarquer qq chose.
    ma macro marche dans tous les cas si je la lance toute seule, sans passer par l' auto_close. La fin du fonctionnement des macros valide les suppressions.

    connais tu un moyen de simuler la fin de la macro (certaines operation doivent s'effectuer a ce moment..)

    j'essaye donc de remplacer mon auto_close par un beforeclose qui s'annule si les userform n'ont pas ete effacées. Par contre il ne se lance pas à la fermeture d'Excel, est ce normal?

    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
    Sub Workbook_BeforeClose(Cancel As Boolean)
        Dim vbComp As Object
        Dim cont As Long
     
        effacer_userform
        cont = 0
        For Each vbComp In ThisWorkbook.VBProject.VBComponents
            If vbComp.Type = 3 Then
                cont = cont + 1
            End If
        Next vbComp
        If cont > 0 Then
        Cancel = True
        End If
    End sub

  6. #6
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    De rien

    Quand tu rédiges un message, il y a au-dessus de la fenêtre de rédaction un ensemble d’icônes, parmi lesquelles la dernière, #, est destinée à la reproduction du code. Utilise-la, le résultat est bien plus lisible. Pour ce faire, sélectionne ton code, et clique ensuite sur la balise.

    Pour en revenir au sujet, il n’est pas normal que la procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        ' ...
    End Sub
    ne se déclenche pas. Tu as probablement quelque part (peut-être lors de l’affichage d’un UserForm, ce qui expliquerait, ce que tu décrivais au départ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Application.EnableEvents = False
    qui neutralise les procédures événementielles sans avoir plus loin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Application.EnableEvents = True
    pour rendre ces procédures à nouveau opérationnelles. Tu peux vérifier la valeur de Application.EnableEvents avec ce test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Test()
        MsgBox Application.EnableEvents
    End Sub
    et la remettre à True si nécessaire, en lançant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub RAZ()
        Application.EnableEvents = True
    End Sub
    Quant à simuler le Auto_Close, tu en copies le contenu dans une Sub quelconque qua tu lances manuellement.
    Michel Gaboly
    Développeur Excel et VBA


    Pas de question technique par MP, je n’y répondrai pas, utilisez le forum - Merci
    Pensez à ajouter le tag

  7. #7
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    merci pour tous ces conseils...

    en fait en passant par un workbook_beforeclose ca marche (c'est juste que je le mettais dans un module et pas dans this worksheet )

    mais je crois qu l'application Application.EnableEvents etait celle que je cherchais...

    Probleme résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme avec la barre des tâches !!
    Par SAMI B dans le forum Windows XP
    Réponses: 4
    Dernier message: 28/04/2006, 16h19
  2. [Javascript/Dhtml] Problemes avec la supression des formulai
    Par ETI-trian dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/03/2006, 20h49
  3. [Configuration] probleme avec le remplacement des accents
    Par xtaze dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 12
    Dernier message: 17/12/2005, 19h16
  4. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  5. Problèmes avec le filtrage des ip
    Par berry dans le forum Réseau
    Réponses: 9
    Dernier message: 30/12/2002, 07h51

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