Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/05/2006, 14h45   #1
Invité régulier
 
Inscription : novembre 2004
Messages : 76
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 76
Points : 8
Points : 8
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 :
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.
truman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 14h49   #2
Membre du Club
 
Avatar de Lucas42
 
Inscription : janvier 2006
Messages : 300
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 300
Points : 62
Points : 62
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
Citation:
form_name
Lucas42 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 14h50   #3
Membre Expert
 
Avatar de méphistopheles
 
Inscription : janvier 2005
Messages : 1 552
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : janvier 2005
Messages : 1 552
Points : 1 212
Points : 1 212
il faut que tu fasse un parcourt des forms de tonprojet en regardant si le nom est bien form_name.

ça doit ressembler à :
Code :
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...
méphistopheles est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 15h02   #4
Invité régulier
 
Inscription : novembre 2004
Messages : 76
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 76
Points : 8
Points : 8
Code :
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'.
truman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 15h02   #5
Membre chevronné
 
Avatar de Catbull
 
Inscription : avril 2003
Messages : 542
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations forums :
Inscription : avril 2003
Messages : 542
Points : 767
Points : 767
Code :
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.
__________________
CatBull - Modérateur VB
Catbull est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 15h03   #6
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Citation:
Envoyé par truman
Code :
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 ?
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 15h05   #7
Invité régulier
 
Inscription : novembre 2004
Messages : 76
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 76
Points : 8
Points : 8
Citation:
Envoyé par bbil
déjà revoir ton titre ... ? VBA ou VB6 ?
Désolé
truman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 15h14   #8
Invité régulier
 
Inscription : novembre 2004
Messages : 76
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 76
Points : 8
Points : 8
Citation:
Envoyé par Catbull
Code :
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.
truman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 15h32   #9
Membre chevronné
 
Avatar de Catbull
 
Inscription : avril 2003
Messages : 542
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations forums :
Inscription : avril 2003
Messages : 542
Points : 767
Points : 767
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.
__________________
CatBull - Modérateur VB
Catbull est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 15h52   #10
Invité régulier
 
Inscription : novembre 2004
Messages : 76
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 76
Points : 8
Points : 8
Ne marche pas non plus.

J'ai trouvé ce morceau de code :

Code :
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.
truman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 16h51   #11
Invité régulier
 
Inscription : novembre 2004
Messages : 76
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 76
Points : 8
Points : 8
Grmbl... Ca commence à me chauffer cette affaire.
truman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 17h10   #12
Membre chevronné
 
Avatar de Catbull
 
Inscription : avril 2003
Messages : 542
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations forums :
Inscription : avril 2003
Messages : 542
Points : 767
Points : 767
Pour savoir si un UserForm existe, tu peux passer par l'objet VBE :

Code :
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.
__________________
CatBull - Modérateur VB
Catbull est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 17h34   #13
Invité régulier
 
Inscription : novembre 2004
Messages : 76
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 76
Points : 8
Points : 8
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.
truman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 17h43   #14
Membre chevronné
 
Avatar de Catbull
 
Inscription : avril 2003
Messages : 542
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations forums :
Inscription : avril 2003
Messages : 542
Points : 767
Points : 767
Code :
1
2
On Error Resume Next
UserForms.Add("Nom de la form").Show
__________________
CatBull - Modérateur VB
Catbull est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 17h46   #15
Modérateur
 
Avatar de AlainTech
 
Homme Alain Gerard
Consultant informatique
Inscription : mai 2005
Messages : 3 675
Détails du profil
Informations personnelles :
Nom : Homme Alain Gerard
Âge : 58
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique
Secteur : Finance

Informations forums :
Inscription : mai 2005
Messages : 3 675
Points : 7 665
Points : 7 665
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!
AlainTech est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 17h49   #16
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
et voila :

Code :
VBA.UserForms.Add("UserForm1").Show


bon le temps que je cherche CatBull à répondu
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 17h50   #17
Invité régulier
 
Inscription : novembre 2004
Messages : 76
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 76
Points : 8
Points : 8
Les créer dynamiquement
Impossible...
Je vais devoir revoir toute la structure de base du programme ! Achevez-moi. Pitié
truman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 17h57   #18
Membre habitué

 
Inscription : mai 2002
Messages : 143
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 143
Points : 133
Points : 133
Code :
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)
bhaal76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 18h00   #19
Invité régulier
 
Inscription : novembre 2004
Messages : 76
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 76
Points : 8
Points : 8
Citation:
Envoyé par bhaal76
Code :
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 ?
truman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 18h02   #20
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
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 !!
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h15.


 
 
 
 
Partenaires

Hébergement Web