Pb avec USF modale

coco_lapin

XLDnaute Impliqué
Bonjour le forum.

C'est la première fois que j'utilise la propriété modale d'une USF. L'exemple en annexe ne fonctionne pas et je ne comprends pas pourquoi.

Pour résumer je voudrais que les utilisateurs sélectionnent un onglet à traiter. Pour cela je suis passé par une USF avec propriété modale.
Le comportement est bizarre et de plus en plaçant un point d'arrêt après l'ouverture de la userforme la macro s'arrête sur ce point d'arrêt sans avoir ouvert la USF !!!

Quelqu'un pourrait-il m'éclairer sur le fonctionnement des USF modales? [file name=modale.zip size=12129]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/modale.zip[/file]
 

Pièces jointes

  • modale.zip
    11.8 KB · Affichages: 21

Luki

XLDnaute Accro
Salut Coco_lapin

C'est normal que ça ne marche pas chez toi, car Xl 97 ne gère pas le userform modal/ unmodal.
Ca marche très bien chez moi par contre!

Donc, soit tu change pour xl 2000 au minimum, soit tu cherches une autre solution!

A+ :)
 

coco_lapin

XLDnaute Impliqué
Merci Luki et jmps pour vos réponses.

Luki, ta remarque est pertinente. Par contre je suis sous Excel 2000 au travail et sous Excel 97 à la maison. Je dois passer en Excel 2000 à la maison.
Par contre ce classeur a été construis avec Excel 97 et maintenant il est utilisé sous Excel 2000. C'est peut être cela qui dois poser un pb.

Je suis à la maison, demain j'essaierai sous Excel 2000 avec un classeur neuf.

jmps, je vais fouiller dans les archives pour ma culture personnelle. Mais des gros mots comme 'APIs' me font déjà bien peur.

Je vais voir si je m'en sort sous Excel 2000. Si oui je vous tiendrais au courant de ma conclusion, sinon je vous demanderais de l'aide.
 

Luki

XLDnaute Accro
Coco, Salut Jmps

Non, non, je t'assure que Jmps est resté très poli!

Petite subtilité sous 2000, Passer l'argument à 'show':
Userform.Show(1) ou userform.show : il modal (par défaut), tu n'as pas la main

userform.Show(0) : il n'est pas modal, tu gardes la main.

Autre chose, j'ai vu dans ton code que tu le cache, ton Uform,mais as tu pensé à le décharger quand tu n'en as plus besoin? (l'exemple zippé n'est peut-être pas complet)

A+
edition!!!
Je corrige les 0 et 1

C'est fait

Message édité par: Luki, à: 14/02/2006 18:41
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Coco, Luki, Eric, José, le Forum

La notion Modal / Non Modal signifie :

Mode Modal :
Un objet UserForm est toujours modal par défaut, il en résulte que l'utilisateur doit toujours répondre avant d'utiliser une autre partie de l'application. Aucun autre code ne s'exécutera tant que l'objet UserForm ne sera pas masqué ou déchargé. Bien que les autres feuilles de l'application soient désactivées pendant l'affichage d'un objet UserForm, les autres applications ne le sont pas.


Mode NON Modal :
Lorsqu'un objet UserForm n'est pas modal, le code suivant est exécuté dès qu'il apparait. Il résulte aussi que l'utilisateur peut toujours utiliser une autre partie de l'application (par exemple saisir sur une feuille) sans avoir à répondre en premier au UserForm. Ce mode permet aussi de lancer plusieurs UserForms en même temps et de permetre à l'utilisateur de répondre indifféremment à chachun d'eux. (Etc...)

Dans ton cas Coco, je pense que le fait que maintenant le Mode Non modal soit accepté sous Excel 2000 déclenche ta message box immédiatement... Alors que sous 97 le UserForm était tout de même en mode Modal... Ce devait pouvoir passer puique cette propriété est faite en mode Design dans ton exemple (en Run Time ce ne serait pas passé avec Excel 97)

En Run Time, voici les codes :

Mode Modal :
exemples depuis un Bouton ActiveX sur Feuille en Private Module de Sheet
Private Sub CommandButton1_Click()
UserForm1.Show vbModal
End Sub

Mais en fait, vu que c'est par défaut, il est inutile de le préciser, ceci est équivalent :
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub

Ou encore :
Mode Modal :
Private Sub CommandButton1_Click()
UserForm1.Show 1
End Sub


Mode NON Modal : 'Non supporté par Excel 97

Private Sub CommandButton1_Click()
UserForm1.Show vbModeless
End Sub

Ou encore :
Private Sub CommandButton1_Click()
UserForm1.Show 0
End Sub


Pour l'API pour Excel 97 je vois qu'Eric à fouillé les archives...

Bonne Soirée
[ol]@+Thierry[/ol]

EDITION !!!

Et en fouillant encore plus loin dans les 'entrailles d'XLD' :

Lien supprimé

Message édité par: _Thierry, à: 14/02/2006 19:05
 

coco_lapin

XLDnaute Impliqué
Bonjour Luki, jmps, Eric C, _Thierry et le forum.

Merci pour vos interventions.

Le classeur initial que j'avais envoyé a été réalisé sous Excel 2000.
En lisant les infos de _Thierry ('Lorsqu'un objet UserForm n'est pas modal, le code suivant est exécuté dès qu'il apparait. ') j'ai compris que mon code n'était pas adapté à ce que je voulais faire ou du moins c'est parce que je n'avais pas compris l'utilisation des USF non modales.

J'ai modifié mon code et maintenant ma msgbox s'affiche bien (voir classeur en annexe).

Merci à tous. [file name=modal.zip size=10723]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/modal.zip[/file]
 

Pièces jointes

  • modal.zip
    10.5 KB · Affichages: 33

Statistiques des forums

Discussions
312 500
Messages
2 089 005
Membres
104 003
dernier inscrit
adyady__