tester si un form est ouvert

titcoeur

XLDnaute Occasionnel
Bonjour à tous

Pouvez-vous me dire s'il existe un moyen de tester dans une macro si un form quelconque est ouvert.

Je m'explique :

Une macro de type
Private Sub Worksheet_Change(ByVal Target As Excel.Range)

se lance dès qu'une cellule est modifiée.

mais j'aimerais que cette macro se lance dès que la cellule est modifiée ET qu'aucun form n'est ouvert à ce moment là.

j'aimerais donc faire :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
if aucun form ouvert alors
code
endif
endsub

Merci d'avance pour vos réponses
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour TitCoeur, le Forum

C'est assez tordu comme histoire...

Disons que je ne vois pas vraiment de syntax usant d'une propriété spécififique pour tester si un UserForm est résidant en mémoire ou pas...(A moins que... ?)

Mais on peut facilement détourner le problème à la seule condition sine qua none que tu utilises 'Unload' et pas 'Hide' lors de ta procédure de supression de ce UserForm.

Dans ce Cas, un simple TextBox, ou autre, hors champs visible du UserForm peut faire l'affaire...

A l'initialise du UserForm en RunTime tu envoie par exemple une string 'Open' :
TextBoxX = 'Open'...

Et lors de ton évènementielle tu fais
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If UserFormX.TexboxX <> '' Then Exit Sub
'Etc....

Ce devrait le faire
Bon Appétit
[ol]@+Thierry[/ol]
 

titcoeur

XLDnaute Occasionnel
Merci Thierry pour ta réponse,

Ce n'est pas si tordu (ou du moins je pense :eek: ).

Je t'explique en gros :

1) sheet dans laquelle on encode des paramètres.

soit directement pour les initiés; soit par USF successifs.

2) ma macro fait en sorte que si on modifie le param X (zone A1) dans la sheet, alors Excel met un défaut différent dans le param Y (zone A25). et sélectionne la zone y pour attirer l'attention de l'utilisateur sur celle-ci.

3) ceci sert dans le cas où la sheet est modifiée directement

mais quand les param sont modifiés via usf, alors ma macro se lance et plante lors du range('A25').select car usf active.

mon idée était donc de ne lancer la macro que lorsque la sheet est modifiée manuellement et non via USF.

Ta solution me semble compliquée à mettre en oeuvre car j'ai bcp de usf.

Mais peut-être que c'est mon idée de départ qui est trop compliquée ?

:unsure:
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Bonjour JOsé et TitCoeur, le Forum


Non non c'est simple vous ne m'avez pas capté.. LOL

Pas besoin de variables publiques non plus...

Etape Number One
Tu planques simplement un TextBox (Exemple 'TexBoxHidden' en dehors de la taille affichée de ton UserForm1 OK ?

Etape Number Two
Dans l'initialise du même UserForm1 tu mets en plus ceci :

Private Sub UserForm_Initialize()
TexBoxHidden = 'Toto'
End Sub


Etape Number Three
Dans le début de ton évènementielle tu mets
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If UserForm1.TexBoxHidden <> '' Then Exit Sub


Processus
La TextBoxHidden n'est uniquement non vide que si le UserForm a été initialisé... Si tu le décharges avec 'Unload UserForm1' , cette TextBoxHidden sera de nouveau Vide...

That's All Folk !!!

Bon Je file j'ai faim


Bon App
[ol]@+Thierry[/ol]

EDITION !!!
Wouarf le Nombre de Coquilles de frappe, c'est que j'ai l'estomac dans les talons !

Message édité par: _Thierry, à: 17/08/2005 12:36
 

Minick

XLDnaute Impliqué
re,

Heuuu merci pour les Duvel mais pour moi ce sera plutot sans alcool
(désolé personne n'est parfait ;) )

jmps ca tombe bien que tu sois en wacance tu va pouvoir faire peter le score sur Demolition...
mais attention quand meme hein je connais pas les effets secondaires ...


@+
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Wouarf !

Bravo Minick !!!

Heureusement que j'ai eu le temps de faire une dizaine d'Extractions ADO SQL avec les mails qui sont générés avec, avant de revenir sur ce Post :

UserForms.Count

Sinon j'aurai eu le hoquet sur ma digestion !

Heureusement j'avais bien dit à 11:56 : ...(A moins que... ?)

Mais franchement ça fait partie des trucs qui sont vraiment pas très utile pour la programmation que je fais habituellement.

Par contre j'ai voulu savoir si à partir de là on pouvait aussi identifier ce méchant UserForm ouvert... Cà n'a pas l'air 'livré' avec...

Il semble qu'il faille faire : 'You can use the UserForms collection to iterate through all loaded user forms in an application. It identifies an intrinsic global variable named UserForms. You can pass UserForms(index) to a function whose argument is specified as a UserForm class.' (Sorry je bosse en version américaine...)

Enfin le principal c'est que ça puisse répondre aux besoins de Val.

Merci donc Minick !

Sinon de la Duvel sans alcool, impossible c'est une bière naturelle en triple fermentation, et pas de la Buckler !!!

Et sinon (bis) non non José, juste une Buckler pour toi !!! lol

Bon Aprèm
[ol]@+Thierry[/ol]
 

Discussions similaires

Statistiques des forums

Discussions
312 367
Messages
2 087 651
Membres
103 628
dernier inscrit
rou37x