[VBA] Comment savoir si un UserForm d'un autre classeur est visible
12 réponses
JièL
Salutatousses
Z = monformulaire.Visible
Z me donne bien l'info True ou False si le formulaire du classeur actuel
est affiché ou pas.
Mais comment je peux faire la même chose à partir d'un autre classeur
(Classeur2.xlsm) ?
J'ai tenté des écritures de codes totalement improbables (genre
Z=Classeur1.xlsm.monformulaire.visible), mais je n'ai pas pu deviner
comment faire...
Hello Juste une question totalement à l'improviste: Tu ne dois pas spécifier tout le chemin du classeur, avant de lui poser la question?
Jacques " Le vin est au repas ce que le parfum est à la femme." . "JièL" a écrit dans le message de groupe de discussion : n2ifri$ae4$
Salutatousses
Z = monformulaire.Visible
Z me donne bien l'info True ou False si le formulaire du classeur actuel est affiché ou pas.
Mais comment je peux faire la même chose à partir d'un autre classeur (Classeur2.xlsm) ? J'ai tenté des écritures de codes totalement improbables (genre Z=Classeur1.xlsm.monformulaire.visible), mais je n'ai pas pu deviner comment faire...
Si vous avez la solution, merci d'avance
-- JièL pédaleur VBAiste
--- L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast. http://www.avast.com
Hello
Juste une question totalement à l'improviste:
Tu ne dois pas spécifier tout le chemin du classeur, avant de lui poser la
question?
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"JièL" a écrit dans le message de groupe de discussion :
n2ifri$ae4$1@speranza.aioe.org...
Salutatousses
Z = monformulaire.Visible
Z me donne bien l'info True ou False si le formulaire du classeur actuel
est affiché ou pas.
Mais comment je peux faire la même chose à partir d'un autre classeur
(Classeur2.xlsm) ?
J'ai tenté des écritures de codes totalement improbables (genre
Z=Classeur1.xlsm.monformulaire.visible), mais je n'ai pas pu deviner
comment faire...
Si vous avez la solution, merci d'avance
--
JièL pédaleur VBAiste
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com
Hello Juste une question totalement à l'improviste: Tu ne dois pas spécifier tout le chemin du classeur, avant de lui poser la question?
Jacques " Le vin est au repas ce que le parfum est à la femme." . "JièL" a écrit dans le message de groupe de discussion : n2ifri$ae4$
Salutatousses
Z = monformulaire.Visible
Z me donne bien l'info True ou False si le formulaire du classeur actuel est affiché ou pas.
Mais comment je peux faire la même chose à partir d'un autre classeur (Classeur2.xlsm) ? J'ai tenté des écritures de codes totalement improbables (genre Z=Classeur1.xlsm.monformulaire.visible), mais je n'ai pas pu deviner comment faire...
Si vous avez la solution, merci d'avance
-- JièL pédaleur VBAiste
--- L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast. http://www.avast.com
MichD
Bonjour,
Je crois que la seule alternative est d'utiliser ce que Laurent Longre a appelé "Nom masqué". Ces derniers n'appartiennent pas à la collection "Names" que l'on retrouve dans Excel. Dans l'exemple, La valeur de la variable "LaVar" demeure en mémoire tant et aussi longtemps qu'Excel est ouvert. Tu peux fermer tous les classeurs et si tu en ouvres un dernier, tu peux toujours extraire la valeur "LaVar".
'Pour définir la valeur de la variable : '------------------------------------------------------- Sub Définir_La_Valeur() Dim LaVar As String LaVar = "Autre Nom" Application.ExecuteExcel4Macro ("SET.NAME(""LaVal"",""" & LaVar & """)") End Sub '-------------------------------------------------------
'Pour retrouver la valeur de la variable : '------------------------------------------------------- Sub Retrouver_La_Valeur() Dim ValNom As String ValNom = Application.ExecuteExcel4Macro("GET.NAME(""LaVal"")") End Sub
MichD --------------------------------------------------------------- "JièL" a écrit dans le message de groupe de discussion : n2ifri$ae4$
Salutatousses
Z = monformulaire.Visible
Z me donne bien l'info True ou False si le formulaire du classeur actuel est affiché ou pas.
Mais comment je peux faire la même chose à partir d'un autre classeur (Classeur2.xlsm) ? J'ai tenté des écritures de codes totalement improbables (genre Z=Classeur1.xlsm.monformulaire.visible), mais je n'ai pas pu deviner comment faire...
Si vous avez la solution, merci d'avance
-- JièL pédaleur VBAiste
Bonjour,
Je crois que la seule alternative est d'utiliser ce que Laurent Longre a
appelé "Nom masqué".
Ces derniers n'appartiennent pas à la collection "Names" que l'on retrouve
dans Excel.
Dans l'exemple, La valeur de la variable "LaVar" demeure en mémoire tant
et aussi longtemps qu'Excel est ouvert. Tu peux fermer tous les classeurs et
si tu en ouvres un dernier, tu peux toujours extraire la valeur "LaVar".
'Pour définir la valeur de la variable :
'-------------------------------------------------------
Sub Définir_La_Valeur()
Dim LaVar As String
LaVar = "Autre Nom"
Application.ExecuteExcel4Macro ("SET.NAME(""LaVal"",""" & LaVar & """)")
End Sub
'-------------------------------------------------------
'Pour retrouver la valeur de la variable :
'-------------------------------------------------------
Sub Retrouver_La_Valeur()
Dim ValNom As String
ValNom = Application.ExecuteExcel4Macro("GET.NAME(""LaVal"")")
End Sub
MichD
---------------------------------------------------------------
"JièL" a écrit dans le message de groupe de discussion :
n2ifri$ae4$1@speranza.aioe.org...
Salutatousses
Z = monformulaire.Visible
Z me donne bien l'info True ou False si le formulaire du classeur actuel
est affiché ou pas.
Mais comment je peux faire la même chose à partir d'un autre classeur
(Classeur2.xlsm) ?
J'ai tenté des écritures de codes totalement improbables (genre
Z=Classeur1.xlsm.monformulaire.visible), mais je n'ai pas pu deviner
comment faire...
Je crois que la seule alternative est d'utiliser ce que Laurent Longre a appelé "Nom masqué". Ces derniers n'appartiennent pas à la collection "Names" que l'on retrouve dans Excel. Dans l'exemple, La valeur de la variable "LaVar" demeure en mémoire tant et aussi longtemps qu'Excel est ouvert. Tu peux fermer tous les classeurs et si tu en ouvres un dernier, tu peux toujours extraire la valeur "LaVar".
'Pour définir la valeur de la variable : '------------------------------------------------------- Sub Définir_La_Valeur() Dim LaVar As String LaVar = "Autre Nom" Application.ExecuteExcel4Macro ("SET.NAME(""LaVal"",""" & LaVar & """)") End Sub '-------------------------------------------------------
'Pour retrouver la valeur de la variable : '------------------------------------------------------- Sub Retrouver_La_Valeur() Dim ValNom As String ValNom = Application.ExecuteExcel4Macro("GET.NAME(""LaVal"")") End Sub
MichD --------------------------------------------------------------- "JièL" a écrit dans le message de groupe de discussion : n2ifri$ae4$
Salutatousses
Z = monformulaire.Visible
Z me donne bien l'info True ou False si le formulaire du classeur actuel est affiché ou pas.
Mais comment je peux faire la même chose à partir d'un autre classeur (Classeur2.xlsm) ? J'ai tenté des écritures de codes totalement improbables (genre Z=Classeur1.xlsm.monformulaire.visible), mais je n'ai pas pu deviner comment faire...
Si vous avez la solution, merci d'avance
-- JièL pédaleur VBAiste
JièL
Salut Alain Proviste
nan, ça ne donne rien, en fait je pense que ça n'est pas prévu tout simplement :-/
Merci pour ta participation ;-)
-- JièL
Le 18/11/2015 19:31, Jacquouille a écrit :
Hello Juste une question totalement à l'improviste: Tu ne dois pas spécifier tout le chemin du classeur, avant de lui poser la question?
Jacques " Le vin est au repas ce que le parfum est à la femme." . "JièL" a écrit dans le message de groupe de discussion : n2ifri$ae4$
Salutatousses
Z = monformulaire.Visible
Z me donne bien l'info True ou False si le formulaire du classeur actuel est affiché ou pas.
Mais comment je peux faire la même chose à partir d'un autre classeur (Classeur2.xlsm) ? J'ai tenté des écritures de codes totalement improbables (genre Z=Classeur1.xlsm.monformulaire.visible), mais je n'ai pas pu deviner comment faire...
Si vous avez la solution, merci d'avance
Salut Alain Proviste
nan, ça ne donne rien, en fait je pense que ça n'est pas prévu tout
simplement :-/
Merci pour ta participation ;-)
--
JièL
Le 18/11/2015 19:31, Jacquouille a écrit :
Hello
Juste une question totalement à l'improviste:
Tu ne dois pas spécifier tout le chemin du classeur, avant de lui poser
la question?
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"JièL" a écrit dans le message de groupe de discussion :
n2ifri$ae4$1@speranza.aioe.org...
Salutatousses
Z = monformulaire.Visible
Z me donne bien l'info True ou False si le formulaire du classeur actuel
est affiché ou pas.
Mais comment je peux faire la même chose à partir d'un autre classeur
(Classeur2.xlsm) ?
J'ai tenté des écritures de codes totalement improbables (genre
Z=Classeur1.xlsm.monformulaire.visible), mais je n'ai pas pu deviner
comment faire...
nan, ça ne donne rien, en fait je pense que ça n'est pas prévu tout simplement :-/
Merci pour ta participation ;-)
-- JièL
Le 18/11/2015 19:31, Jacquouille a écrit :
Hello Juste une question totalement à l'improviste: Tu ne dois pas spécifier tout le chemin du classeur, avant de lui poser la question?
Jacques " Le vin est au repas ce que le parfum est à la femme." . "JièL" a écrit dans le message de groupe de discussion : n2ifri$ae4$
Salutatousses
Z = monformulaire.Visible
Z me donne bien l'info True ou False si le formulaire du classeur actuel est affiché ou pas.
Mais comment je peux faire la même chose à partir d'un autre classeur (Classeur2.xlsm) ? J'ai tenté des écritures de codes totalement improbables (genre Z=Classeur1.xlsm.monformulaire.visible), mais je n'ai pas pu deviner comment faire...
Si vous avez la solution, merci d'avance
JièL
Bonjour MichD
soit j'ai rien compris ton explication (ce qui est fort possible), soit c'est toi qui n'a pas compris la question, mais avec ce code je ne vois pas comment je peux tester si un userform (affiché via un autre classeur) est visible ou pas.
Pour moi ce code créé une variable d'environnement dans le système, c'est tout.
Tu peux m'en dire plus sur ton code steuplé ?
Merci
-- JièL ri 1 compris
Le 18/11/2015 20:27, MichD a écrit :
Bonjour,
Je crois que la seule alternative est d'utiliser ce que Laurent Longre a appelé "Nom masqué". Ces derniers n'appartiennent pas à la collection "Names" que l'on retrouve dans Excel. Dans l'exemple, La valeur de la variable "LaVar" demeure en mémoire tant et aussi longtemps qu'Excel est ouvert. Tu peux fermer tous les classeurs et si tu en ouvres un dernier, tu peux toujours extraire la valeur "LaVar".
'Pour définir la valeur de la variable : '------------------------------------------------------- Sub Définir_La_Valeur() Dim LaVar As String LaVar = "Autre Nom" Application.ExecuteExcel4Macro ("SET.NAME(""LaVal"",""" & LaVar & """)") End Sub '-------------------------------------------------------
'Pour retrouver la valeur de la variable : '------------------------------------------------------- Sub Retrouver_La_Valeur() Dim ValNom As String ValNom = Application.ExecuteExcel4Macro("GET.NAME(""LaVal"")") End Sub
MichD --------------------------------------------------------------- "JièL" a écrit dans le message de groupe de discussion : n2ifri$ae4$
Salutatousses
Z = monformulaire.Visible
Z me donne bien l'info True ou False si le formulaire du classeur actuel est affiché ou pas.
Mais comment je peux faire la même chose à partir d'un autre classeur (Classeur2.xlsm) ? J'ai tenté des écritures de codes totalement improbables (genre Z=Classeur1.xlsm.monformulaire.visible), mais je n'ai pas pu deviner comment faire...
Si vous avez la solution, merci d'avance
Bonjour MichD
soit j'ai rien compris ton explication (ce qui est fort possible), soit
c'est toi qui n'a pas compris la question, mais avec ce code je ne vois
pas comment je peux tester si un userform (affiché via un autre
classeur) est visible ou pas.
Pour moi ce code créé une variable d'environnement dans le système,
c'est tout.
Tu peux m'en dire plus sur ton code steuplé ?
Merci
--
JièL ri 1 compris
Le 18/11/2015 20:27, MichD a écrit :
Bonjour,
Je crois que la seule alternative est d'utiliser ce que Laurent Longre a
appelé "Nom masqué".
Ces derniers n'appartiennent pas à la collection "Names" que l'on
retrouve dans Excel.
Dans l'exemple, La valeur de la variable "LaVar" demeure en mémoire tant
et aussi longtemps qu'Excel est ouvert. Tu peux fermer tous les
classeurs et
si tu en ouvres un dernier, tu peux toujours extraire la valeur "LaVar".
'Pour définir la valeur de la variable :
'-------------------------------------------------------
Sub Définir_La_Valeur()
Dim LaVar As String
LaVar = "Autre Nom"
Application.ExecuteExcel4Macro ("SET.NAME(""LaVal"",""" & LaVar & """)")
End Sub
'-------------------------------------------------------
'Pour retrouver la valeur de la variable :
'-------------------------------------------------------
Sub Retrouver_La_Valeur()
Dim ValNom As String
ValNom = Application.ExecuteExcel4Macro("GET.NAME(""LaVal"")")
End Sub
MichD
---------------------------------------------------------------
"JièL" a écrit dans le message de groupe de discussion :
n2ifri$ae4$1@speranza.aioe.org...
Salutatousses
Z = monformulaire.Visible
Z me donne bien l'info True ou False si le formulaire du classeur actuel
est affiché ou pas.
Mais comment je peux faire la même chose à partir d'un autre classeur
(Classeur2.xlsm) ?
J'ai tenté des écritures de codes totalement improbables (genre
Z=Classeur1.xlsm.monformulaire.visible), mais je n'ai pas pu deviner
comment faire...
soit j'ai rien compris ton explication (ce qui est fort possible), soit c'est toi qui n'a pas compris la question, mais avec ce code je ne vois pas comment je peux tester si un userform (affiché via un autre classeur) est visible ou pas.
Pour moi ce code créé une variable d'environnement dans le système, c'est tout.
Tu peux m'en dire plus sur ton code steuplé ?
Merci
-- JièL ri 1 compris
Le 18/11/2015 20:27, MichD a écrit :
Bonjour,
Je crois que la seule alternative est d'utiliser ce que Laurent Longre a appelé "Nom masqué". Ces derniers n'appartiennent pas à la collection "Names" que l'on retrouve dans Excel. Dans l'exemple, La valeur de la variable "LaVar" demeure en mémoire tant et aussi longtemps qu'Excel est ouvert. Tu peux fermer tous les classeurs et si tu en ouvres un dernier, tu peux toujours extraire la valeur "LaVar".
'Pour définir la valeur de la variable : '------------------------------------------------------- Sub Définir_La_Valeur() Dim LaVar As String LaVar = "Autre Nom" Application.ExecuteExcel4Macro ("SET.NAME(""LaVal"",""" & LaVar & """)") End Sub '-------------------------------------------------------
'Pour retrouver la valeur de la variable : '------------------------------------------------------- Sub Retrouver_La_Valeur() Dim ValNom As String ValNom = Application.ExecuteExcel4Macro("GET.NAME(""LaVal"")") End Sub
MichD --------------------------------------------------------------- "JièL" a écrit dans le message de groupe de discussion : n2ifri$ae4$
Salutatousses
Z = monformulaire.Visible
Z me donne bien l'info True ou False si le formulaire du classeur actuel est affiché ou pas.
Mais comment je peux faire la même chose à partir d'un autre classeur (Classeur2.xlsm) ? J'ai tenté des écritures de codes totalement improbables (genre Z=Classeur1.xlsm.monformulaire.visible), mais je n'ai pas pu deviner comment faire...
Si vous avez la solution, merci d'avance
Fredo P.
Comme ça d'emblé avec le gestionnaire d'erreur,: exécuter une instruction sur l'usfr, contrôler la valeur Errnumber ensuite.
"JièL" a écrit dans le message de groupe de discussion : n2ifri$ae4$
Salutatousses
Z = monformulaire.Visible
Z me donne bien l'info True ou False si le formulaire du classeur actuel est affiché ou pas.
Mais comment je peux faire la même chose à partir d'un autre classeur (Classeur2.xlsm) ? J'ai tenté des écritures de codes totalement improbables (genre Z=Classeur1.xlsm.monformulaire.visible), mais je n'ai pas pu deviner comment faire...
Si vous avez la solution, merci d'avance
-- JièL pédaleur VBAiste
Comme ça d'emblé avec le gestionnaire d'erreur,: exécuter une instruction
sur l'usfr, contrôler la valeur Errnumber ensuite.
"JièL" a écrit dans le message de groupe de discussion :
n2ifri$ae4$1@speranza.aioe.org...
Salutatousses
Z = monformulaire.Visible
Z me donne bien l'info True ou False si le formulaire du classeur actuel
est affiché ou pas.
Mais comment je peux faire la même chose à partir d'un autre classeur
(Classeur2.xlsm) ?
J'ai tenté des écritures de codes totalement improbables (genre
Z=Classeur1.xlsm.monformulaire.visible), mais je n'ai pas pu deviner
comment faire...
Comme ça d'emblé avec le gestionnaire d'erreur,: exécuter une instruction sur l'usfr, contrôler la valeur Errnumber ensuite.
"JièL" a écrit dans le message de groupe de discussion : n2ifri$ae4$
Salutatousses
Z = monformulaire.Visible
Z me donne bien l'info True ou False si le formulaire du classeur actuel est affiché ou pas.
Mais comment je peux faire la même chose à partir d'un autre classeur (Classeur2.xlsm) ? J'ai tenté des écritures de codes totalement improbables (genre Z=Classeur1.xlsm.monformulaire.visible), mais je n'ai pas pu deviner comment faire...
Si vous avez la solution, merci d'avance
-- JièL pédaleur VBAiste
JièL
heum... l'idée me plait, mais comment je m'adresse à un formulaire ouvert par un autre classeur ?
Une précision que je n'avais pas donné avant : le formulaire est non modal
-- JièL
Le 19/11/2015 10:24, Fredo P. a écrit :
Comme ça d'emblé avec le gestionnaire d'erreur,: exécuter une instruction sur l'usfr, contrôler la valeur Errnumber ensuite.
"JièL" a écrit dans le message de groupe de discussion : n2ifri$ae4$
Salutatousses
Z = monformulaire.Visible
Z me donne bien l'info True ou False si le formulaire du classeur actuel est affiché ou pas.
Mais comment je peux faire la même chose à partir d'un autre classeur (Classeur2.xlsm) ? J'ai tenté des écritures de codes totalement improbables (genre Z=Classeur1.xlsm.monformulaire.visible), mais je n'ai pas pu deviner comment faire...
Si vous avez la solution, merci d'avance
heum... l'idée me plait, mais comment je m'adresse à un formulaire
ouvert par un autre classeur ?
Une précision que je n'avais pas donné avant : le formulaire est non modal
--
JièL
Le 19/11/2015 10:24, Fredo P. a écrit :
Comme ça d'emblé avec le gestionnaire d'erreur,: exécuter une
instruction sur l'usfr, contrôler la valeur Errnumber ensuite.
"JièL" a écrit dans le message de groupe de discussion :
n2ifri$ae4$1@speranza.aioe.org...
Salutatousses
Z = monformulaire.Visible
Z me donne bien l'info True ou False si le formulaire du classeur actuel
est affiché ou pas.
Mais comment je peux faire la même chose à partir d'un autre classeur
(Classeur2.xlsm) ?
J'ai tenté des écritures de codes totalement improbables (genre
Z=Classeur1.xlsm.monformulaire.visible), mais je n'ai pas pu deviner
comment faire...
heum... l'idée me plait, mais comment je m'adresse à un formulaire ouvert par un autre classeur ?
Une précision que je n'avais pas donné avant : le formulaire est non modal
-- JièL
Le 19/11/2015 10:24, Fredo P. a écrit :
Comme ça d'emblé avec le gestionnaire d'erreur,: exécuter une instruction sur l'usfr, contrôler la valeur Errnumber ensuite.
"JièL" a écrit dans le message de groupe de discussion : n2ifri$ae4$
Salutatousses
Z = monformulaire.Visible
Z me donne bien l'info True ou False si le formulaire du classeur actuel est affiché ou pas.
Mais comment je peux faire la même chose à partir d'un autre classeur (Classeur2.xlsm) ? J'ai tenté des écritures de codes totalement improbables (genre Z=Classeur1.xlsm.monformulaire.visible), mais je n'ai pas pu deviner comment faire...
Si vous avez la solution, merci d'avance
MichD
Quand tu ouvres ledit formulaire, tu renseignes la variable d'environnement comme tu l'appelles. Si la variable contient l'expression "Ouvert", cela signifie que le formulaire est ouvert et visible. Si tu fermes toujours le même formulaire, la variable prend la valeur "Fermé". À n'importe quel moment, tu peux tester la valeur de cette variable à partir d'un autre classeur d'Excel, et ce sans problème!
Évidemment, cela suppose que tous les classeurs s'ouvrent à partir de la même instance de l'application Excel. (Je n'ai pas testé expressément le cas ou l'utilisateur utilise des instances d'Excel différentes...)
Une autre méthode serait d'utiliser un "NOM" de la collection "NAMES" en vba et recourir au même principe. Quand tu ouvres le formulaire, tu affectes au "NOM", la valeur "Ouvert" sinon, la valeur de ce "NOM" est fermé.
Un petit exemple : 'Pour créer le NOM quand tu ouvres le formulaire du classeur. 'Évidemment, ce code est dans le code d'un événement du formulaire Workbooks("Classeur1").Names.Add "toto", "Fermé", Visible:úlse OU ThisWorkbook.Names.Add "toto", "Fermé", Visible:úlse 'OUVERT OU FERMÉ SELON LE CAS!
'Pour lire la valeur de ce nom à partir d'un autre classeur... x = Workbooks("Classeur1").Names("toto")
Quand tu ouvres ledit formulaire, tu renseignes la variable d'environnement
comme
tu l'appelles. Si la variable contient l'expression "Ouvert", cela signifie
que le formulaire
est ouvert et visible. Si tu fermes toujours le même formulaire, la variable
prend la
valeur "Fermé". À n'importe quel moment, tu peux tester la valeur de cette
variable
à partir d'un autre classeur d'Excel, et ce sans problème!
Évidemment, cela suppose que tous les classeurs s'ouvrent à partir de la
même instance
de l'application Excel. (Je n'ai pas testé expressément le cas ou
l'utilisateur utilise des
instances d'Excel différentes...)
Une autre méthode serait d'utiliser un "NOM" de la collection "NAMES" en vba
et recourir
au même principe. Quand tu ouvres le formulaire, tu affectes au "NOM", la
valeur "Ouvert"
sinon, la valeur de ce "NOM" est fermé.
Un petit exemple :
'Pour créer le NOM quand tu ouvres le formulaire du classeur.
'Évidemment, ce code est dans le code d'un événement du formulaire
Workbooks("Classeur1").Names.Add "toto", "Fermé", Visible:úlse
OU
ThisWorkbook.Names.Add "toto", "Fermé", Visible:úlse 'OUVERT OU FERMÉ
SELON LE CAS!
'Pour lire la valeur de ce nom à partir d'un autre classeur...
x = Workbooks("Classeur1").Names("toto")
Quand tu ouvres ledit formulaire, tu renseignes la variable d'environnement comme tu l'appelles. Si la variable contient l'expression "Ouvert", cela signifie que le formulaire est ouvert et visible. Si tu fermes toujours le même formulaire, la variable prend la valeur "Fermé". À n'importe quel moment, tu peux tester la valeur de cette variable à partir d'un autre classeur d'Excel, et ce sans problème!
Évidemment, cela suppose que tous les classeurs s'ouvrent à partir de la même instance de l'application Excel. (Je n'ai pas testé expressément le cas ou l'utilisateur utilise des instances d'Excel différentes...)
Une autre méthode serait d'utiliser un "NOM" de la collection "NAMES" en vba et recourir au même principe. Quand tu ouvres le formulaire, tu affectes au "NOM", la valeur "Ouvert" sinon, la valeur de ce "NOM" est fermé.
Un petit exemple : 'Pour créer le NOM quand tu ouvres le formulaire du classeur. 'Évidemment, ce code est dans le code d'un événement du formulaire Workbooks("Classeur1").Names.Add "toto", "Fermé", Visible:úlse OU ThisWorkbook.Names.Add "toto", "Fermé", Visible:úlse 'OUVERT OU FERMÉ SELON LE CAS!
'Pour lire la valeur de ce nom à partir d'un autre classeur... x = Workbooks("Classeur1").Names("toto")
Merci MichD, mais je ne maitrise pas l'autre classeur... donc je ne peux pas le modifier.
Le 19/11/2015 11:49, MichD a écrit :
Si tu trouves une autre méthode, je suis preneur!
j'ai trouvé ça Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Sub test() Application.Run "C:TempClasseur1.xlsm!AffForm" Handle = FindWindow(vbNullString, "UserForm1") If Handle <> 0 Then FermeForm = SendMessage(HandleForm, &H10, 2&, ByVal 0&) End if End Sub
Ca fonctionne, mais SendMessage(HandleForm, &H10, 2&, ByVal 0&) plante AffForm sur l'instruction UserForm1.Show lors de la troisième fois ou on lance Test()
Pourquoi la 3ème, ça c'est le mystère.
Merci
-- JièL
Merci MichD, mais je ne maitrise pas l'autre classeur... donc je ne peux
pas le modifier.
Le 19/11/2015 11:49, MichD a écrit :
Si tu trouves une autre méthode, je suis preneur!
j'ai trouvé ça
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA"
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA"
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As
Any) As Long
Sub test()
Application.Run "C:TempClasseur1.xlsm!AffForm"
Handle = FindWindow(vbNullString, "UserForm1")
If Handle <> 0 Then
FermeForm = SendMessage(HandleForm, &H10, 2&, ByVal 0&)
End if
End Sub
Ca fonctionne, mais SendMessage(HandleForm, &H10, 2&, ByVal 0&) plante
AffForm sur l'instruction UserForm1.Show lors de la troisième fois ou on
lance Test()
Merci MichD, mais je ne maitrise pas l'autre classeur... donc je ne peux pas le modifier.
Le 19/11/2015 11:49, MichD a écrit :
Si tu trouves une autre méthode, je suis preneur!
j'ai trouvé ça Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Sub test() Application.Run "C:TempClasseur1.xlsm!AffForm" Handle = FindWindow(vbNullString, "UserForm1") If Handle <> 0 Then FermeForm = SendMessage(HandleForm, &H10, 2&, ByVal 0&) End if End Sub
Ca fonctionne, mais SendMessage(HandleForm, &H10, 2&, ByVal 0&) plante AffForm sur l'instruction UserForm1.Show lors de la troisième fois ou on lance Test()
Pourquoi la 3ème, ça c'est le mystère.
Merci
-- JièL
Fredo P.
un lien de mes recherches: http://silkyroad.developpez.com/VBA/VisualBasicEditor/#LVI
"JièL" a écrit dans le message de groupe de discussion : n2k7ol$tki$
heum... l'idée me plait, mais comment je m'adresse à un formulaire ouvert par un autre classeur ?
Une précision que je n'avais pas donné avant : le formulaire est non modal
-- JièL
Le 19/11/2015 10:24, Fredo P. a écrit :
Comme ça d'emblé avec le gestionnaire d'erreur,: exécuter une instruction sur l'usfr, contrôler la valeur Errnumber ensuite.
"JièL" a écrit dans le message de groupe de discussion : n2ifri$ae4$
Salutatousses
Z = monformulaire.Visible
Z me donne bien l'info True ou False si le formulaire du classeur actuel est affiché ou pas.
Mais comment je peux faire la même chose à partir d'un autre classeur (Classeur2.xlsm) ? J'ai tenté des écritures de codes totalement improbables (genre Z=Classeur1.xlsm.monformulaire.visible), mais je n'ai pas pu deviner comment faire...
Si vous avez la solution, merci d'avance
un lien de mes recherches:
http://silkyroad.developpez.com/VBA/VisualBasicEditor/#LVI
"JièL" a écrit dans le message de groupe de discussion :
n2k7ol$tki$1@speranza.aioe.org...
heum... l'idée me plait, mais comment je m'adresse à un formulaire
ouvert par un autre classeur ?
Une précision que je n'avais pas donné avant : le formulaire est non modal
--
JièL
Le 19/11/2015 10:24, Fredo P. a écrit :
Comme ça d'emblé avec le gestionnaire d'erreur,: exécuter une
instruction sur l'usfr, contrôler la valeur Errnumber ensuite.
"JièL" a écrit dans le message de groupe de discussion :
n2ifri$ae4$1@speranza.aioe.org...
Salutatousses
Z = monformulaire.Visible
Z me donne bien l'info True ou False si le formulaire du classeur actuel
est affiché ou pas.
Mais comment je peux faire la même chose à partir d'un autre classeur
(Classeur2.xlsm) ?
J'ai tenté des écritures de codes totalement improbables (genre
Z=Classeur1.xlsm.monformulaire.visible), mais je n'ai pas pu deviner
comment faire...
un lien de mes recherches: http://silkyroad.developpez.com/VBA/VisualBasicEditor/#LVI
"JièL" a écrit dans le message de groupe de discussion : n2k7ol$tki$
heum... l'idée me plait, mais comment je m'adresse à un formulaire ouvert par un autre classeur ?
Une précision que je n'avais pas donné avant : le formulaire est non modal
-- JièL
Le 19/11/2015 10:24, Fredo P. a écrit :
Comme ça d'emblé avec le gestionnaire d'erreur,: exécuter une instruction sur l'usfr, contrôler la valeur Errnumber ensuite.
"JièL" a écrit dans le message de groupe de discussion : n2ifri$ae4$
Salutatousses
Z = monformulaire.Visible
Z me donne bien l'info True ou False si le formulaire du classeur actuel est affiché ou pas.
Mais comment je peux faire la même chose à partir d'un autre classeur (Classeur2.xlsm) ? J'ai tenté des écritures de codes totalement improbables (genre Z=Classeur1.xlsm.monformulaire.visible), mais je n'ai pas pu deviner comment faire...
Si vous avez la solution, merci d'avance
MichD
On peut toujours afficher un formulaire à partir d'un autre formulaire en appelant une macro dans le fichier où se retrouve le formulaire
'pour appeler la macro à partir d'un classeur ouvert '----------------------------- Sub test() Application.Run "Classeur1!Afficher_Formulaire" End Sub '-----------------------------
Dans le module standard où est le formulaire '----------------------------- Sub Afficher_Formulaire() UserForm1.Show 0 UserForm1.TextBox1 = "toto" End Sub '-----------------------------
Mais ceci ne te dit pas expressément si le formulaire est visible ou non si c'est ce que tu veux savoir...
Deuxièmement, un formulaire est fait pour traiter les données des feuilles de calcul du classeur dans lequel il se retrouve.
Tu peux questionner une base de données même d'un classeur fermé en utilisant ADO (Activex Data Object) en passant des requêtes... Je ne connais pas de moyen d'accéder au contrôle d'un formulaire ouvert à partir d'un autre classeur.
On peut toujours afficher un formulaire à partir d'un autre formulaire
en appelant une macro dans le fichier où se retrouve le formulaire
'pour appeler la macro à partir d'un classeur ouvert
'-----------------------------
Sub test()
Application.Run "Classeur1!Afficher_Formulaire"
End Sub
'-----------------------------
Dans le module standard où est le formulaire
'-----------------------------
Sub Afficher_Formulaire()
UserForm1.Show 0
UserForm1.TextBox1 = "toto"
End Sub
'-----------------------------
Mais ceci ne te dit pas expressément si le formulaire est visible ou non
si c'est ce que tu veux savoir...
Deuxièmement, un formulaire est fait pour traiter les données des feuilles
de
calcul du classeur dans lequel il se retrouve.
Tu peux questionner une base de données même d'un classeur fermé en
utilisant
ADO (Activex Data Object) en passant des requêtes... Je ne connais pas de
moyen
d'accéder au contrôle d'un formulaire ouvert à partir d'un autre classeur.
On peut toujours afficher un formulaire à partir d'un autre formulaire en appelant une macro dans le fichier où se retrouve le formulaire
'pour appeler la macro à partir d'un classeur ouvert '----------------------------- Sub test() Application.Run "Classeur1!Afficher_Formulaire" End Sub '-----------------------------
Dans le module standard où est le formulaire '----------------------------- Sub Afficher_Formulaire() UserForm1.Show 0 UserForm1.TextBox1 = "toto" End Sub '-----------------------------
Mais ceci ne te dit pas expressément si le formulaire est visible ou non si c'est ce que tu veux savoir...
Deuxièmement, un formulaire est fait pour traiter les données des feuilles de calcul du classeur dans lequel il se retrouve.
Tu peux questionner une base de données même d'un classeur fermé en utilisant ADO (Activex Data Object) en passant des requêtes... Je ne connais pas de moyen d'accéder au contrôle d'un formulaire ouvert à partir d'un autre classeur.