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

VBA Discussion :

[VBA] Lancer une form à partir de son nom [Trucs & Astuces]


Sujet :

VBA

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 76
    Points : 24
    Points
    24
    Par défaut [VBA] Lancer une form à partir de son nom
    Bonjour

    Bon, ça doit pas être bien sorcier mais pourtant j'y arrive pas. Pas de blabla, un code d'exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'Nom de la form
    Dim form_name as string
     
    form_name=frm_ma_form
     
    'Et là ça marche pas (pas étonnant d'ailleurs)
    form_name.Show
    Voila, simplement je voudrai lancer une form à partir de son nom (dans mon programme, j'ai un tableau d'attributs et chaque attribut correspond à une form dont le nom est stocké sous forme de string (tableau de structures) si vous voulez tout savoir ) et je ne sais pas comment procéder.

    Merci de votre aide.

  2. #2
    Membre régulier Avatar de Lucas42
    Inscrit en
    Janvier 2006
    Messages
    301
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 301
    Points : 97
    Points
    97
    Par défaut
    essaye de mettre un attribut spécifique à l'ouverture d'une form , essaye avec plusieurs nom , execute , et je te parriré que ta form selectionné s'ouvre , mais seulememt à l'EXECUTION du programme , il faut que tu fasse une mise à jour PERMANENTE de ta variable
    form_name

  3. #3
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    il faut que tu fasse un parcourt des forms de tonprojet en regardant si le nom est bien form_name.

    ça doit ressembler à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim formquejecherche as form
    for each formquejecherche in monprojet
       if formquejecherche=form_name then formquejecherche.show
    next
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 76
    Points : 24
    Points
    24
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim frm as UserForm
    For Each frm In VBA.UserForms
        If frm = Tattrib(SearchAtt("Canal")).form Then
            frm.Show
        End If
    Next
    J'ai déjà essayé mais impossible de comparer un objet form et un string Le problème c'est que je trouve pas de propriété 'Name'.

  5. #5
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Forms("Ma forme").Show
    A tester. Je ne sais plus si la collection Forms contient les forms non chargées.

    Edité : Remplacement de la collection Controls par Forms.

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par truman
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim frm as UserForm
    For Each frm In VBA.UserForms
        If frm = Tattrib(SearchAtt("Canal")).form Then
            frm.Show
        End If
    Next
    J'ai déjà essayé mais impossible de comparer un objet form et un string Le problème c'est que je trouve pas de propriété 'Name'.
    déjà revoir ton titre ... ? VBA ou VB6 ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 76
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par bbil
    déjà revoir ton titre ... ? VBA ou VB6 ?
    Désolé

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 76
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par Catbull
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Forms("Ma forme").Show
    A tester. Je ne sais plus si la collection Forms contient les forms non chargées.

    Edité : Remplacement de la collection Controls par Forms.
    Salut.

    Alors Controls il me dit objet invalide. Mais je suis en train d'essayer de le trifouiller parce que ça doit être un truc du genre. Forms c'est pas reconnu C'est une procédure VB6 ? Je suis en VBA.

  9. #9
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    En VBA, il faut utiliser la collection UserForms. Mais je viens de tester et cela ne fonctionne pas. Apparament seules les feuilles chargées sont présentes dans la collection. Je n'ai pas l'aide VBA sur mon poste, je ne peux pas vérifier cette hypothèse.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 76
    Points : 24
    Points
    24
    Par défaut
    Ne marche pas non plus.

    J'ai trouvé ce morceau de code :

    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 REMPLISSAGE(ByVal argmt As Integer, ByVal numero As Integer)
    Dim userformname As String
     
    'AFFICHAGE DES DONNEES
    userformname = "client_p" & numero
    'AJOUT DES AUTRES DONNEES
    With VBA.UserForms.Add(userformname)
        .TextBox1.Text = Cells(argmt, 3)
        .TextBox2.Text = Cells(argmt, 4)
        .TextBox6.Text = Cells(argmt, 5)
        .TextBox3.Text = Cells(argmt, 6)
        .TextBox4.Text = Cells(argmt, 10)
        .TextBox5.Text = Cells(argmt, 11)
    End With
    End Sub
    Ca ajoute une nouvelle feuille du nom spécifié. Le problème c'est que je n'arrive pas à trouver une méthode pour trouver une feuille déjà existante sachant que la propriété Name n'existe pas.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 76
    Points : 24
    Points
    24
    Par défaut
    Grmbl... Ca commence à me chauffer cette affaire.

  12. #12
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Pour savoir si un UserForm existe, tu peux passer par l'objet VBE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Public Function UFExiste(Name As String) As Boolean
        'Cocher la référence
        ' Microsoft Visual Basic For Application Extensibility
     
        On Error Resume Next
        UFExiste = (Application.VBE.ActiveVBProject.VBComponents(Name).Type = vbext_ct_MSForm)
     
    End Function
    La fonction UFExiste prend en paramètre une chaine, si cette chaine coorrespond au nom d'une feuille alors elle renvoie True, False dans le cas contraire.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 76
    Points : 24
    Points
    24
    Par défaut
    Ca peut servir mais en réalité, ça ne résoud pas mon problème. Si j'ai bien compris, la fonction que tu me donnes me permet de savoir si une form d'un nom donné existe ou non.
    Normalement, dans mon cas précis, tous les noms de forms stockés dans mon tableau sont valides, je suis donc sûr de leur existence dans mon programme. Le soucis c'est que même dans l'objet VBE je ne trouve aucune méthode pour charger une form à l'aide de son nom sous forme de string.

  14. #14
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    On Error Resume Next
    UserForms.Add("Nom de la form").Show

  15. #15
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Je viens de tourner le problème un peu dans tous les sens.
    J'ai, entre autres, suivi la même piste que Catbull (VBE) en essayant d'instancier le form trouvé dans VBE pour le charger... mais nada.

    Il me semble qu'on tombe là sur une faiblesse de VBA

    Il ne restera plus qu'à créer tous les forms en dynamique pour pouvoir y accéder par une instance.

    Sinon, un Select Case.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  16. #16
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    et voila :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VBA.UserForms.Add("UserForm1").Show


    bon le temps que je cherche CatBull à répondu

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 76
    Points : 24
    Points
    24
    Par défaut
    Les créer dynamiquement
    Impossible...
    Je vais devoir revoir toute la structure de base du programme ! Achevez-moi. Pitié

  18. #18
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 163
    Points : 173
    Points
    173
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Sub masub()
        Load UserForm1
     
        If (VBA.UserForms.Count >= 1) Then
            MsgBox VBA.UserForms(0).Name, vbkonly
            Unload VBA.UserForms(0)
        End If
    End Sub
    je charge un userform1 juste pour le test ...
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !
    (Albert Einstein)

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 76
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par bhaal76
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Sub masub()
        Load UserForm1
     
        If (VBA.UserForms.Count >= 1) Then
            MsgBox VBA.UserForms(0).Name, vbkonly
            Unload VBA.UserForms(0)
        End If
    End Sub
    je charge un userform1 juste pour le test ...
    Ca ça affiche le nom de ta form mais pour shower à partir d'un nom en string ?

  20. #20
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par truman
    Ca ça affiche le nom de ta form mais pour shower à partir d'un nom en string ?
    voir la méthode à CatBull un peu plus haut !!

Discussions similaires

  1. Réponses: 19
    Dernier message: 02/02/2009, 18h06
  2. Créer une Form à partir de son nom
    Par Delphi-ne dans le forum Delphi
    Réponses: 11
    Dernier message: 11/12/2006, 17h39
  3. Récupérer une variable à partir de son nom ...
    Par CynO dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/10/2005, 16h59
  4. [VBA] Executer une fonction en passant son nom en argument
    Par David Guyon dans le forum Access
    Réponses: 4
    Dernier message: 05/10/2005, 19h56
  5. [Winform][C#]Comment lancer une forme à partir du menu
    Par rb dans le forum Windows Forms
    Réponses: 2
    Dernier message: 03/06/2005, 17h01

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