XL 2016 Ouverture de formulaire placé sur un autre classeur

vgendron

XLDnaute Barbatruc
Bonjour !
ca faisait longtemps que je n'étais pas venu ici..
me revoici donc avec une question:

dans mon application, j'ai un Classseur "GTA_Test" possédant des formulaires
un autre classeur FVPR_test (ouvert en meme temps) possède d'autres formulaires

"GTA_Test" actif, formulaire ouvert: comment ouvrir un autre formulaire situé dans le classeur "FVPR_test"
j'avais pensé à un truc du genre

FVPR_test .Userform ("NomUserform").show

sur le meme principe qu'on utilise pour indiquer à vba de travailler sur la feuille truc du classeur machin
with ClasseurMachin
feuilletruc=....


mais la manip des formulaires ne semble pas fonctionner de la meme manière..
quelle serait donc la méthode efficace qui fasse en sorte que les deux classeurs connaissent les formulaires des uns et des autres, afin de pouvoir les ouvrir quelque soit le classeur actif

Merci
 

Pièces jointes

  • FVPR_Test.xlsm
    11.8 KB · Affichages: 19
  • GTA_Test.xlsm
    16.8 KB · Affichages: 6

vgendron

XLDnaute Barbatruc
Hello
bon.. j'ai bien trouvé la solution d'une macro qui effectue l'ouverture du formulaire.. mais.. ca me semble difficile à mettre en oeuvre avec mes 50 formulaires différents..
sauf si on peut appeler la macro avec le nom du formulaire à ouvrir..??
 

eriiic

XLDnaute Barbatruc
Bonjour,

J'ai testé ça, ça a l'air ok :
VB:
Sub test()
    Dim uf As Object
    Set uf = USF_GTA
    affUF uf
End Sub

Sub affUF(uf)
    uf.Show
End Sub
Ne pas typer As UserForm, ça plante.
A voir comment le goupiller depuis un autre classeur. Pas le temps pour moi, goto dodo... ;-)
eric

Edit : à la réflexion, j'ai l'impression que ça ne fait que déplacer le pb
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Salut eriiic
Merci pour ton retour
effectivement, je pense que je vais devoir m'orienter finalement vers la seconde solution .. avec un case à 50 item....

c'est quand meme bizarre de ne pas pouvoir appeler un formulaire en indiquant simplement le classeur auquel il appartient..
j'avais pourtant trouvé une macro permettant de lister les USF du classeur actif..
VB:
For Each LaForm In Application.VBE.ActiveVBProject.VBComponents
    If TypeOf LaForm Is MSForms.UserForm Then

ici on accède aux formulaires du "activevbproject"...
je chercherai encore un moyen de remplacer activevbproject par quelque chose qui donne le classeur souhaité...
 

job75

XLDnaute Barbatruc
Bonjour vgendron, eriiiic, le forum,

Il suffit d'utiliser la méthode Run, la macro dans l'UserForm de FVPR_Test.xlsm :
VB:
Private Sub CommandButton1_Click()
Dim fichier$, macro$
fichier = "GTA_Test.xlsm"
macro = "GTA"
Me.Hide
On Error Resume Next
Workbooks(fichier).Activate
If Err Then Workbooks.Open ThisWorkbook.Path & "\" & fichier
Run fichier & "!" & macro
End Sub
A+
 

Pièces jointes

  • FVPR_Test.xlsm
    19 KB · Affichages: 7
  • GTA_Test.xlsm
    20.6 KB · Affichages: 7

vgendron

XLDnaute Barbatruc
Salut @job75

Mes vacances ayant été annulées.....Grrrrr.. suis pas de bonne humeur...
je vais donc pouvoir faire mumuse avec mon application...

merci pour ta proposition, mais .. cette ligne de code
Workbooks(fichier).Activate
est justement ce que je voulais éviter...pour ne pas avoir l'effet sapin de noel (meme avec un screenupdating=false)
tant pis.. je crois que je vais devoir me faire une raison ... :-D
en meme temps.. j'ai maintenant 15 jours pour travailler la question...
 

job75

XLDnaute Barbatruc
Bonsoir vgendron,
merci pour ta proposition, mais .. cette ligne de code
Workbooks(fichier).Activate
est justement ce que je voulais éviter...pour ne pas avoir l'effet sapin de noel
Je ne te comprends pas, il est évident qu'on peut se passer de cette instruction :
VB:
Private Sub CommandButton1_Click()
Dim fichier$, macro$, wb As Workbook
fichier = "GTA_Test.xlsm"
macro = "GTA"
Me.Hide
On Error Resume Next
Set wb = Workbooks(fichier)
If wb Is Nothing Then Workbooks.Open ThisWorkbook.Path & "\" & fichier
Run fichier & "!" & macro
End Sub
A+
 

Pièces jointes

  • FVPR_Test.xlsm
    19.1 KB · Affichages: 5
  • GTA_Test.xlsm
    20.8 KB · Affichages: 3

Dranreb

XLDnaute Barbatruc
Bonsoir.
c'est quand meme bizarre de ne pas pouvoir appeler un formulaire en indiquant simplement le classeur auquel il appartient.
C'est normal car il ne lui appartient pas, c'est à son projet VBA qu'il appartient. Ce qui ouvre la voie à une possibilité: celle de cocher son projet en référence. À condition toutefois qu'il porte un nom différent de celui du classeur qui veut l'utiliser (qui est VBAProject en général).
 

vgendron

XLDnaute Barbatruc
@job75: Evidemment...honte à moi. je n'avais meme pas pensé à essayer sans cette instruction...
c'est de ta faute aussi... :p j'ai pris l'habitude d'utiliser tes solutions les yeux fermés:cool: .. excès de confiance :D:D

En tout cas, un grand merci.. je vais avoir un peu de boulot pour implémenter cette solution pour mes 50 formulaires...

@Dranreb: ha haaaaaa.. effectivement, la voie que tu ouvres me semble très interressante également..
une première recherche rapide m'a amené chez silkyroad.. vous connaissez surement aussi.. (est ce qu'il commet aussi sur ce forum ??) https://silkyroad.developpez.com/VBA/VisualBasicEditor/

bon bah... au boulot !
Je reviendrai surement vers vous par la suite
Merci
 

Discussions similaires

Statistiques des forums

Discussions
312 218
Messages
2 086 363
Membres
103 197
dernier inscrit
sandrine.lacaussade@orang