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 :

Pb référence / userform non-modal


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Pb référence / userform non-modal
    Bonjour à toutes et à tous.
    Ca fait maintenant plus d'un an que je travail sur une énorme base de données en ajoutant tout un tas de fonctionnalité.
    Aussi j'arrive sur un point qui me fait beugué, et qui est très certainement facile...
    Je n'arrive pas à activer une référence quelconque lors de la séquence workbook_open et ouvrir un userform "non-modal" derrière sans qu'il ne s'éteigne..
    Voici mon code fait sur un excel quelconque et qui ne marche pas aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_Open()
    Dim nomref As String
    nomref = "C:\Program Files\PDFCreator\PDFCreator.exe"    'ou une référence quelconque
    On Error Resume Next
    ThisWorkbook.VBProject.References.AddFromFile nomref
    UserForm1.Show    'userform non modal
    End Sub
    Si quelqu'un a une idée, je suis preneur.
    Je vous remercie,

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour Darkalane,

    Il faut certainement regarder au niveau de ton USF je pense que le problème est là.

    L'activation de la référence fonctionne correctement.

    A+

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Effectivement, l'ajout de référence se fait bien, mais le userform se lance (j'ai pu vérifier à l'aide d'un msgbox) mais s'éteint juste derriere..apres je ne vois pas quel paramètre je pourrais modifier afin que celui-ci reste en arrière plan.
    en tout cas, merci de t'être intéréssé à mon cas

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    Une piste avec la démarche suivante

    1) Créez un nouveau classeur et, dans le VBE, créez un UserForm1
    2) Dans un module de code standard, copiez le code suivant (adaptez à votre usage la constante cernée par des ###)

    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
     
    '### Constante à adapter (chemin de la référence souhaitée) ###
    Const MA_REFERENCE As String = "C:\Program Files\PDFCreator\PDFCreator.exe"
    '##############################################################
     
    Sub AddRef_UFShow(Optional dummy As Byte)
    Dim REF As Object   'VBIDE.Reference
    Dim bool As Boolean
    For Each REF In ThisWorkbook.VBProject.References
      If REF.FullPath = MA_REFERENCE Then
        bool = True
        Exit For
      End If
    Next REF
    If Not bool Then
      ThisWorkbook.VBProject.References.AddFromFile MA_REFERENCE
    Else
      UserForm1.Show vbModeless
    End If
    End Sub
    3) Dans la fenêtre de code de ThisWorkbook, copiez le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub Workbook_Open()
    Call AddRef_UFShow
    Application.OnTime Now + TimeValue("00:00:01"), "AddRef_UFShow"
    End Sub
    L'idée est de lancer 2 fois la procédure AddRef_UFShow, il semble nécessaire de terminer la procédure évènementielle
    Workbook_Open pour que la référence ait le temps de s'installer.

    Cordialement.

    PMO
    Patrick Morange

  5. #5
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    j'avais eu le même souci, (dans un contexte non d'appel de ref, mais d'instance cachée) résolu en effet avec un délai, mais avec un seul appel en plaçant l'appel de l'USF dans le timer car c'est lui qui posait pb en non modal... ça semble identique ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Workbook_Open()
    Dim nomref As String
    nomref = "C:\Program Files\PDFCreator\PDFCreator.exe"    'ou une référence quelconque
    On Error Resume Next
    ThisWorkbook.VBProject.References.AddFromFile nomref
    Application.OnTime Now + TimeValue("00:00:01"), "Depart" 'Créée un délai qui permat au lanceur de se refermer, sinon le mode modal bloque etc...
                                                            'Le OnTime appelle la procédure Depart..
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Depart()
    UserForm1.Show    'userform non modal
    End Sub
    cordialement,

    Didier

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    C'est impeccable, ca ronronne comme pas possible lol.merci à vous tous, l'apllication est enfin terminé Donc cette petite astuce de timer à garder sous le coude pour les prochaines fois. SUJET RESOLU

  7. #7
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonjour tous,
    Résolu mais bizarre quand même..
    UserForm1.Show sans paramètre ouvre l'UF en MODAL par défaut.
    Pour l'ouvrir en NonModal faut mettre le paramètre..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UserForm.Show 0 'ou VbModeLess
    A+

  8. #8
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    non, pas de mystère , vu que l'USF est non modal par construction, son ouverture obéit à ce critère si on ne change rien dans l'init..


    cordialement,

    Didier

  9. #9
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonjour Didier,
    Beh alors c'est que j'ai des Excel Spéciaux, quand je lance un UF avec simplement UserForm.Show, il est impossible d'avoir accès aux feuilles de calcul (ou autre chose d'ailleur).
    La seule solution pour exécuter un code 'Ailleur" c'est d'avoir, dans l'UF, une fonction qui boucle sur un DoEvents.
    A+
    Edit,
    Dans l'aide..
    Les valeurs pour modal sont :

    Constante ........................Valeur Description
    vbModal 1 ........................UserForm est modal. Valeur par défaut.
    vbModeless 0 ................... UserForm n'est pas modal.

  10. #10
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonsoir Le Forestier,

    On parle de la même chose, mais (cf l'image jointe au post précédent), sachant que je voulais un USF non modal, lors de sa construction, dans la fenêtre propriétés le concernant, j'ai mis son ShowModal à False :


    aide vba =

    ShowModal, propriété


    Définit un objet UserForm indiquant que son affichage est modal ou pas. En lecture seule au moment de l'exécution.

    Remarques

    La propriété ShowModal peut prendre les valeurs suivantes :

    Valeur Description
    True (Valeur par défaut) L'objet UserForm est modal.
    False L'objet UserForm est non modal.

    etc...
    Sachant que de base c'est le comportement par défaut que je désirai, je ne me casse pas la tête avec du code..

    Par contre la valeur par défaut est True, donc si tu n'y touches jamais, tu as bien le comportement auquel tu fais allusion

    cordialement,

    Didier

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

Discussions similaires

  1. [XL-2007] Userform non-modal & Accès au modèle objet du projet VBA
    Par JackIsJack dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/06/2010, 10h23
  2. [XL-2007] Userform non modale vide !
    Par Gloubi99 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 14/04/2010, 18h40
  3. [Toutes versions] Userform non modal = plantage d'excel
    Par youn1096 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 14/05/2009, 16h39
  4. [E-02] Comment garder un Userform non Modal affiché ?
    Par Frutchy dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 23/12/2008, 02h36
  5. UserForm non modal mais arrêtant la macro
    Par oohcalme dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2008, 11h11

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