Afficher un userform d'un autre classeur

  • Initiateur de la discussion Philoo
  • Date de début
P

Philoo

Guest
Bonjour à tous !
J'ai une question très simple, mais qui me pose problème :
Comment afficher un userform stocké dans un autre classeur , par ailleurs ouvert ?

J'ai essayé de trouver l'objet de workbooks contenant les forms d'un classeur, mais pour l'instant je suis bredouille...
J'ai essayé par la propriété 'VBAproject" mais rien à faire non plus (enfin de ce que j'ai vu)

Si quelqu'un à une idée...
Merci d'avance

Philoo
 
P

Philoo

Guest
En fait c'est bon je m'en suis sorti par une pirouette : j'ai créé une macro qui affiche le userform dans le classeur qui le contient, et dans l'autre je lance cette macro à partir d'une autre avcec une commande genre :
Application.Run("monClasseur.xls!MaMacro")

Voilà a+
Philoo
 
@

@+Thierry

Guest
Bonjour Philoo et le Forum

Pas beau pour un printemps et frisquet hein ! même en plein Sud-Est...

Bon je ne sais pas si celà peut te convenir mais plutot que de passer par VbProject.VBcomponents et toutes les déclarations nécessaires, que d'ailleurs je ne suis pas certain puissent fonctionner...

Deux petits codes comme ceux-ci, me semblent bien plus simples (si tes deux classeurs sont bien effectivement ouverts):

Dans Classeur qui NE contient PAS le UserForm :

Sub LancementUSF1 ()
Application.Run "ClasseurUSF!LancerUSF1"
End Sub


Dans Classeur qui contient le UserForm : "ClasseurUSF"

Sub LancerUSF1()
UserForm1.Show
End Sub


Maintenant il y a toutes les recommandations d'usage en ce qui concerne l'utilisation de Userform sur différents classeurs ouverts en même temps, car il faut s'assurer que chaque object est référencé complètement avec le nom du workbook, sinon ce sera le plantage assuré.

Bon Appétit à tous et toutes

@+Thierry
 
P

Philoo

Guest
oui, messages croisés !!
On a eu la même idée en même temps...
Mais je te remercie quand même pour ton aide...
Au fait quand tu parles de référencement d'objet tu veux dire quoi exactement ?
 
@

@+Thierry

Guest
Ben pour les référencements d'objects c'est dommage que le moteur de recherche ne soit plus actif car j'avais fait une démo... mais voici un extrait de code en multi classeurs :

Dim CurrentBook As Workbook
Dim CurWS1 As Worksheet
Dim CurWS2 As Worksheet

Dim OtherBook As Workbook
Dim OthWS1 As Worksheet

Set CurrentBook = ThisWorkbook
With CurrentBook
Set CurWS1 = .Worksheets("Sheet1")
Set CurWS2 = .Worksheets("Sheet2")
End With

Set OtherBook = Workbooks("Toto.xls")
With OtherBook
Set OthWS1 = .Worksheets("Sheet1")
End With

.................

en suit on peut faire des truc comme çà :

L = OthWS1.Range("A65536").End(xlUp).Row
Set r = OthWS1.Range("A2:A" & L)


etc etc.... C'est çà de travailler en multi classeurs....


Voilà en espérant t'éclairer, comme celà m'a beaucoup éclairé quand un jour Ti m'as suggéré de procéder ainsi.

Sinon sans faire de Set d'objet workbook / worksheet on peut aussi référencer comme c-dessous, mais celà alourdi de loin le code car il faut tout répéter à chaque manipulation d'objet :

Set r = Workbooks("Toto.xls").Sheets("Sheet1").Range("A2:" _
& ThisWorkbook("Toto.xls").Sheets("Sheet1").Range("A65536").End(xlUp).Address)


Voilà comme çà tu peux "surfer" de classeurs en classeurs !!!

@+Thierry
 
@

@+Thierry

Guest
Oups !!!

on lira :

Set r = Workbooks("Toto.xls").Sheets("Sheet1").Range("A2:" _
& Workbooks("Toto.xls").Sheets("Sheet1").Range("A65536").End(xlUp).Address)


ou on lira :

Set r = ThisWorkbook..Sheets("Sheet1").Range("A2:" _
& ThisWorkbook.Sheets("Sheet1").Range("A65536").End(xlUp).Address)

Mais on lira pas mon dernier exemple dans le post ci-dessus !


@+Thierry
 

Discussions similaires

Réponses
14
Affichages
313

Statistiques des forums

Discussions
314 647
Messages
2 111 530
Membres
111 190
dernier inscrit
clmtj