Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

La fonction MsgBox bloque Excel lorsqu'elle est appelée depuis un événement ?!

5 réponses
Avatar
Jean-Marie Pierrard
Bonjour,



Le code suivant marche impeccablement s'il est écrit dans une UserForm Excel
:



Public WithEvents Appl As Application



Private Sub Appl_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As
Boolean)

If MsgBox("D'accord pour fermer le classeur " & Wb.Name & " ?", vbYesNo) =
vbNo Then

Cancel = True

End If

End Sub



Private Sub UserForm_Initialize()

Set Appl = Application

End Sub



Private Sub UserForm_Terminate()

Set Appl = Nothing

End Sub



Par contre, si je place le code dans une Forme Visual Basic 6, tant que le
message "D'accord." est affiché, la fenêtre Excel ne se rafraîchit pas. Pour
en juger, il suffit de déplacer la fenêtre du message au-dessus de celle
d'Excel : l'image de la fenêtre du message reste affichée à son ancienne
place ! Testé avec Excel XP, 2003 et 2007, sous Windows 2000 et XP.



Pour en avoir le cour net, j'ai également tenté, mais sans plus de succès,
de séparer le code en 3 parties, comme dans les exemples fournis par M$ :



1) une classe Class1.cls pour l'événement :



Public WithEvents Appl As Excel.Application



Private Sub Appl_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, Cancel As
Boolean)

If MsgBox("D'accord pour fermer le classeur " & Wb.Name & " ?", vbYesNo) =
vbNo Then

Cancel = True

End If

End Sub



2) un module Module1.bas pour la connexion à Excel :



Dim AppExcel As Excel.Application

Dim AppEvents As New Class1



Sub InitEvents()

Set AppExcel = GetObject(, "Excel.Application")

If AppExcel Is Nothing Then Exit Sub

MsgBox AppExcel.Name

Set AppEvents.Appl = AppExcel.Application

End Sub



3) une forme Form1.frm pour établir la connexion via un bouton de commande
Command1 :



Private Sub Command1_Click()

InitEvents

End Sub



Bon, j'ai aussi essayé vainement de me passer de Form1.frm, et de démarrer
depuis une procédure Main placée dans Module1.bas :



Sub main()

InitEvents

Do

DoEvents

If AppExcel.Workbooks.Count < 2 Then Exit Sub ' s'il n'y a plus que le
classeur Perso.xls, on quitte

Loop

End Sub



Et enfin, dans Class1.cls, j'ai remplacé MsgBox par l'API correspondante,
mais sans plus de succès :



Public Const MB_YESNO = &H4&



Type MSGBOXPARAMS

cbSize As Long

hwndOwner As Long

hInstance As Long

lpszText As String

lpszCaption As String

dwStyle As Long

lpszIcon As String

dwContextHelpId As Long

lpfnMsgBoxCallback As Long

dwLanguageId As Long

End Type



Declare Function MessageBoxIndirect Lib "user32" Alias "MessageBoxIndirectA"
_

(lpMsgBoxParams As MSGBOXPARAMS) As Long



Private Sub Appl_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, Cancel As
Boolean)

Dim MBP As MSGBOXPARAMS

MBP.cbSize = Len(MBP)

MBP.hInstance = App.hInstance

MBP.dwStyle = MB_YESNO

MBP.hwndOwner = Me.hwnd

MBP.lpszText = "Voulez-vous fermer " & Wb.Name & " ?"

MBP.lpszCaption = App.EXEName

If MsgBox("D'accord pour fermer le classeur " & Wb.Name & " ?", vbYesNo) =
vbNo Then

If MessageBoxIndirect(MBP) = vbNo then

Cancel = True

End If

End Sub



Auriez-vous une piste ? Merci d'avance !



Jean-Marie

5 réponses

Avatar
LE TROLL
Bonjour,

Je ne sais pas si j'ai tout ompris, mais un
msgBox prend la main, comme la constante VBmodal.
Pour rendre la main, je mettrais le message dans
une autre form, non modale, ainsi il n'y aurait
pas de blocage

--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Jean-Marie Pierrard"
a écrit
dans le message de news:

| Bonjour,
|
|
|
| Le code suivant marche impeccablement s'il est
écrit dans une UserForm Excel
| :
|
|
|
| Public WithEvents Appl As Application
|
|
|
| Private Sub Appl_WorkbookBeforeClose(ByVal Wb As
Workbook, Cancel As
| Boolean)
|
| If MsgBox("D'accord pour fermer le classeur " &
Wb.Name & " ?", vbYesNo) | vbNo Then
|
| Cancel = True
|
| End If
|
| End Sub
|
|
|
| Private Sub UserForm_Initialize()
|
| Set Appl = Application
|
| End Sub
|
|
|
| Private Sub UserForm_Terminate()
|
| Set Appl = Nothing
|
| End Sub
|
|
|
| Par contre, si je place le code dans une Forme
Visual Basic 6, tant que le
| message "D'accord." est affiché, la fenêtre
Excel ne se rafraîchit pas. Pour
| en juger, il suffit de déplacer la fenêtre du
message au-dessus de celle
| d'Excel : l'image de la fenêtre du message reste
affichée à son ancienne
| place ! Testé avec Excel XP, 2003 et 2007, sous
Windows 2000 et XP.
|
|
|
| Pour en avoir le cour net, j'ai également tenté,
mais sans plus de succès,
| de séparer le code en 3 parties, comme dans les
exemples fournis par M$ :
|
|
|
| 1) une classe Class1.cls pour l'événement :
|
|
|
| Public WithEvents Appl As Excel.Application
|
|
|
| Private Sub Appl_WorkbookBeforeClose(ByVal Wb As
Excel.Workbook, Cancel As
| Boolean)
|
| If MsgBox("D'accord pour fermer le classeur " &
Wb.Name & " ?", vbYesNo) | vbNo Then
|
| Cancel = True
|
| End If
|
| End Sub
|
|
|
| 2) un module Module1.bas pour la connexion à
Excel :
|
|
|
| Dim AppExcel As Excel.Application
|
| Dim AppEvents As New Class1
|
|
|
| Sub InitEvents()
|
| Set AppExcel = GetObject(, "Excel.Application")
|
| If AppExcel Is Nothing Then Exit Sub
|
| MsgBox AppExcel.Name
|
| Set AppEvents.Appl = AppExcel.Application
|
| End Sub
|
|
|
| 3) une forme Form1.frm pour établir la connexion
via un bouton de commande
| Command1 :
|
|
|
| Private Sub Command1_Click()
|
| InitEvents
|
| End Sub
|
|
|
| Bon, j'ai aussi essayé vainement de me passer de
Form1.frm, et de démarrer
| depuis une procédure Main placée dans
Module1.bas :
|
|
|
| Sub main()
|
| InitEvents
|
| Do
|
| DoEvents
|
| If AppExcel.Workbooks.Count < 2 Then Exit Sub
' s'il n'y a plus que le
| classeur Perso.xls, on quitte
|
| Loop
|
| End Sub
|
|
|
| Et enfin, dans Class1.cls, j'ai remplacé MsgBox
par l'API correspondante,
| mais sans plus de succès :
|
|
|
| Public Const MB_YESNO = &H4&
|
|
|
| Type MSGBOXPARAMS
|
| cbSize As Long
|
| hwndOwner As Long
|
| hInstance As Long
|
| lpszText As String
|
| lpszCaption As String
|
| dwStyle As Long
|
| lpszIcon As String
|
| dwContextHelpId As Long
|
| lpfnMsgBoxCallback As Long
|
| dwLanguageId As Long
|
| End Type
|
|
|
| Declare Function MessageBoxIndirect Lib "user32"
Alias "MessageBoxIndirectA"
| _
|
| (lpMsgBoxParams As MSGBOXPARAMS) As Long
|
|
|
| Private Sub Appl_WorkbookBeforeClose(ByVal Wb As
Excel.Workbook, Cancel As
| Boolean)
|
| Dim MBP As MSGBOXPARAMS
|
| MBP.cbSize = Len(MBP)
|
| MBP.hInstance = App.hInstance
|
| MBP.dwStyle = MB_YESNO
|
| MBP.hwndOwner = Me.hwnd
|
| MBP.lpszText = "Voulez-vous fermer " & Wb.Name
& " ?"
|
| MBP.lpszCaption = App.EXEName
|
| If MsgBox("D'accord pour fermer le classeur " &
Wb.Name & " ?", vbYesNo) | vbNo Then
|
| If MessageBoxIndirect(MBP) = vbNo then
|
| Cancel = True
|
| End If
|
| End Sub
|
|
|
| Auriez-vous une piste ? Merci d'avance !
|
|
|
| Jean-Marie
|
|
|
|
Avatar
LE TROLL
Bonsoir,

Hum, oui, mais tout ce que tu fais à partir de
ton programme, je pense qu'il est bloqué avec le
msgBox, il faudrait faire un test, mais je n'ai
pas le temps ce soir. Il faudrait par exemple dans
un fichier, écrire toutes les secondes, l'heure,
et ensuite, sur commandbutton, lancer un msgBox,
attendre quelque seconde, le fermer, puis relire
le fichier et tester s'il y a un trou dans le
temps, ainsi, on verrait si ça tourne en arrière
main, moi je n'en suis pas certain, je pense même
que non, si j'ai le temps demain, je ferai le test
(curiosité), en vb6.

Mais pour toi, de toute façon, une form pour
les message je trouve ça mieux, c'est beaucoup
plus souple que le msgBox, généralement je fais
ça, dès que je conçois un logiciel un peu gros. Ou
encore, tu masques un choix visuel, sur la form,
et tu le démasque au moment voulu. Ces deux
méthodes ne perturberont rien...

--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Jean-Marie Pierrard" a
écrit dans le message de news:
%
| Merci de ta réponse !
|
| Effectivement, la fenêtre de MsgBox est modale,
et il est normal qu'elle le
| soit puisque de la réponse de l'utilisateur
dépend la fermeture du classeur.
| En ce sens, Excel est bien "bloqué" dans
l'attente de la réponse, et il doit
| l'être.
|
| Mais ce "blocage" partiel ne devrait pas
l'empêcher de recevoir les messages
| WM_xxx de Windows réclamant la mise à jour de sa
fenêtre lorsque
| l'utilisateur change la boîte modale de place,
et c'est pourtant ce qui se
| passe chez moi, comme le montre la copie d'écran
que j'ai jointe.
|
| Et ce phénomène ne se produit que si je place
mon code dans une application
| VB externe, et pas si je l'exécute en tant que
macro depuis l'éditeur VBA.
| Le malheur est que, pour des raisons techniques,
je ne peux pas utiliser une
| macro dans ce cas-ci...
|
| Jean-Marie
|
| "LE TROLL" <le a écrit dans le
message de news:
|
| > Bonjour,
| >
| > Je ne sais pas si j'ai tout ompris, mais
un
| > msgBox prend la main, comme la constante
VBmodal.
| > Pour rendre la main, je mettrais le message
dans
| > une autre form, non modale, ainsi il n'y
aurait
| > pas de blocage
| >
| > --
| > Romans, logiciels, email, site personnel
| > http://irolog.free.fr/joe.htm
|
|
|
|
Avatar
Jean-Marie Pierrard
Eh bien , je crois que les grands esprits se rencontrent :-))) Car j'ai eu
la même idée de remplacer la message box par une forme non modale, et -
c'est délirant - le résultat est identique !!!
Toujours dans le gestionnaire de l'événement, j'affiche Form2 en mode non
modal, et je capture les messages tant que Form2 est visible (c'est-à-dire
tant que l'utilisateur n'a pas pris sa décision) :

Private Sub Appl_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, Cancel As
Boolean)
Form2.Show vbModeless
Do While Form2.Visible
DoEvents
Loop
End Sub

Or, quand je déplace la fenêtre de Form2 au-dessus de celle d'Excel, Excel
réagit exactement de la même façon qu'avec MsgBox : superposition d'images
de Form2, avec une image supplémentaire à chaque déplacement !

Là, ça commence à me perturber sérieusement !!! Tout le problème est de
laisser l'utilisateur prendre la décision de fermer le classeur ou non.
Resterait bien sûr la "solution" d'empêcher tout déplacement de Form2
(théoriquement c'est faisable), mais ce n'est pas vraiment joli-joli. En
plus, ce ne sera pas une vraie solution, car toute fenêtre (même d'un autre
programme) qui va venir se placer devant Excel aboutira au même résultat
délirant.

Merci en tout cas pour l'intérêt que tu portes à ce problème, et à
bientôt...

J.M.


"LE TROLL" <le a écrit dans le message de news:

Bonsoir,

Hum, oui, mais tout ce que tu fais à partir de
ton programme, je pense qu'il est bloqué avec le
msgBox, il faudrait faire un test, mais je n'ai
pas le temps ce soir. Il faudrait par exemple dans
un fichier, écrire toutes les secondes, l'heure,
et ensuite, sur commandbutton, lancer un msgBox,
attendre quelque seconde, le fermer, puis relire
le fichier et tester s'il y a un trou dans le
temps, ainsi, on verrait si ça tourne en arrière
main, moi je n'en suis pas certain, je pense même
que non, si j'ai le temps demain, je ferai le test
(curiosité), en vb6.

Mais pour toi, de toute façon, une form pour
les message je trouve ça mieux, c'est beaucoup
plus souple que le msgBox, généralement je fais
ça, dès que je conçois un logiciel un peu gros. Ou
encore, tu masques un choix visuel, sur la form,
et tu le démasque au moment voulu. Ces deux
méthodes ne perturberont rien...

--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
--------------------------------------------------------------------------
----------

"Jean-Marie Pierrard" a
écrit dans le message de news:
%
| Merci de ta réponse !
|
| Effectivement, la fenêtre de MsgBox est modale,
et il est normal qu'elle le
| soit puisque de la réponse de l'utilisateur
dépend la fermeture du classeur.
| En ce sens, Excel est bien "bloqué" dans
l'attente de la réponse, et il doit
| l'être.
|
| Mais ce "blocage" partiel ne devrait pas
l'empêcher de recevoir les messages
| WM_xxx de Windows réclamant la mise à jour de sa
fenêtre lorsque
| l'utilisateur change la boîte modale de place,
et c'est pourtant ce qui se
| passe chez moi, comme le montre la copie d'écran
que j'ai jointe.
|
| Et ce phénomène ne se produit que si je place
mon code dans une application
| VB externe, et pas si je l'exécute en tant que
macro depuis l'éditeur VBA.
| Le malheur est que, pour des raisons techniques,
je ne peux pas utiliser une
| macro dans ce cas-ci...
|
| Jean-Marie
|
| "LE TROLL" <le a écrit dans le
message de news:
|
| > Bonjour,
| >
| > Je ne sais pas si j'ai tout ompris, mais
un
| > msgBox prend la main, comme la constante
VBmodal.
| > Pour rendre la main, je mettrais le message
dans
| > une autre form, non modale, ainsi il n'y
aurait
| > pas de blocage
| >
| > --
| > Romans, logiciels, email, site personnel
| > http://irolog.free.fr/joe.htm
|
|
|
|




Avatar
LE TROLL
Hum, je n'aurais pas fait ainsi
exactement, je vais le faire en VB, car je ne
connais pas le vbA

Déjà, VBmodeless, c'est par défaut, donc en vb ça
ne se met pas... voir en vbA ?

En lançant form2.show , Me
La form devrait rester au 1er plan sans être
modal.

Tu n'as plus qu'a déposer sur ta form 2, une
message (label), et deux commandButton "oui",
"non".

dans la procédure du commandButton "non" :
unload form2

Et dans la procédure du command button "oui"
Ce que tu veux que ça fasse + unload form2

Si, par contre, tu ne veux pas que l'on touche à
la form1 pendant que la 2 est affichée, ben,
suffit de mettre à form1.hide + form2.show, et le
contraire dans l'autre sens, soit form1.show +
form2.unload (ça tourne, tant que chargé (load)).

Mais, si tu n'as en fait que deux forms, tu peux
aussi n'en prendre qu'une et mettre des frame
(est-ce que ça existe en vbA ?). Sur une frame tu
mets tout ce que tu as sur ta feuille1
actuellement, et sur la frame 2, le choix oui/non,
ainsi, tu affiche simplement l'une ou l'autre sur
la même form.

Reste le problème de l'arrêt utilisateur par la
croix système [X], si c'est possible, tu laisses,
sinon, il faut dans la procédure évènementielle
sub Unload(cancel as integer) ' je crois de
mémoire, ou ce qui y correspond en vba, gérer le
pointeur cancel, ainsi:

Tu mets un flag (drapeau), une variable globale
Dim okfermer as boolean
tu l'initialises quand tu rentre dans le programme
à false (procédure évènement load)
Et, seulement, si tu clique sur le bouton fermer,
tu la mets a true, donc:

Dans le procédure de fermeture, désormais tu va
comprendre, le pointeur cancel doit être à 0, se
met à 0 pour fermer, s'il a une autre valeur, il
ne ferme pas la feuille, tu pourras donc faire:

sub Unload(cancel as integer) " de la form à
fermer
cancel = 0
if okfermer <> true then
cancel = -1
exit sub
end if
'
' si tu as associé ton programme à des
application, faut décharger (nothing)
unload form2 ' si y a...
End ' fin programme
end sub

Pour terminer, le problème est que tu veux
faire de la programmation en vbA, c'est le cas de
beaucoup de gens qui connaissent bien ce langage,
ils vont de plus en plus loin, logique, mais plus
on va loin, moins vbA est prévu pour ça. A
l'origine c'est du paramétrage pour faciliter les
actions répétitives, le rendre plus conviviale
dans les suite office de MS, mais ça ne va pas
vite, car c'est interprété, c'est assez instable,
ça plante au moindre changement, car ça dépend de
trop de chose, et principalement d'Excel ici, voir
seulement d'un changement de paramètres, de
version... C'est moins portable, car celui qui
réceptionne doit avoir le logiciel (sauf à faire
des runtime, mais là je ne sais pas comment ils
font ça chez Microsoft)...
Alors, à ton niveau, vu à quoi tu commences à
t'attaquer, tu aurais tout intérêt à passer en
VB2005 fr initiation (qui est gratuit je crois).
Sinon, tu auras des gens qui ont l'habitude du
vbA, a contrario de moi, sur le forum
"microsoft.public.fr.vb", qui est là pour (qbasic,
vb4 16 et 32, vb5, vb6 et vbA)...

Si tu as vb6, je peux te faire un exemple,
écris-moi en dessous, pour me donner ton email :o)

Cordialement.

--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Jean-Marie Pierrard" a
écrit dans le message de news:
%23OM8$
| Eh bien , je crois que les grands esprits se
rencontrent :-))) Car j'ai eu
| la même idée de remplacer la message box par une
forme non modale, et -
| c'est délirant - le résultat est identique !!!
| Toujours dans le gestionnaire de l'événement,
j'affiche Form2 en mode non
| modal, et je capture les messages tant que Form2
est visible (c'est-à-dire
| tant que l'utilisateur n'a pas pris sa décision)
:
|
| Private Sub Appl_WorkbookBeforeClose(ByVal Wb As
Excel.Workbook, Cancel As
| Boolean)
| Form2.Show vbModeless
| Do While Form2.Visible
| DoEvents
| Loop
| End Sub
|
| Or, quand je déplace la fenêtre de Form2
au-dessus de celle d'Excel, Excel
| réagit exactement de la même façon qu'avec
MsgBox : superposition d'images
| de Form2, avec une image supplémentaire à chaque
déplacement !
|
| Là, ça commence à me perturber sérieusement !!!
Tout le problème est de
| laisser l'utilisateur prendre la décision de
fermer le classeur ou non.
| Resterait bien sûr la "solution" d'empêcher tout
déplacement de Form2
| (théoriquement c'est faisable), mais ce n'est
pas vraiment joli-joli. En
| plus, ce ne sera pas une vraie solution, car
toute fenêtre (même d'un autre
| programme) qui va venir se placer devant Excel
aboutira au même résultat
| délirant.
|
| Merci en tout cas pour l'intérêt que tu portes à
ce problème, et à
| bientôt...
|
| J.M.
|
|
| "LE TROLL" <le a écrit dans le
message de news:
|
| > Bonsoir,
| >
| > Hum, oui, mais tout ce que tu fais à
partir de
| > ton programme, je pense qu'il est bloqué avec
le
| > msgBox, il faudrait faire un test, mais je
n'ai
| > pas le temps ce soir. Il faudrait par exemple
dans
| > un fichier, écrire toutes les secondes,
l'heure,
| > et ensuite, sur commandbutton, lancer un
msgBox,
| > attendre quelque seconde, le fermer, puis
relire
| > le fichier et tester s'il y a un trou dans le
| > temps, ainsi, on verrait si ça tourne en
arrière
| > main, moi je n'en suis pas certain, je pense
même
| > que non, si j'ai le temps demain, je ferai le
test
| > (curiosité), en vb6.
| >
| > Mais pour toi, de toute façon, une form
pour
| > les message je trouve ça mieux, c'est beaucoup
| > plus souple que le msgBox, généralement je
fais
| > ça, dès que je conçois un logiciel un peu
gros. Ou
| > encore, tu masques un choix visuel, sur la
form,
| > et tu le démasque au moment voulu. Ces deux
| > méthodes ne perturberont rien...
| >
| > --
| > Romans, logiciels, email, site personnel
| > http://irolog.free.fr/joe.htm
|
--------------------------------------------------------------------------
| ----------

| > "Jean-Marie Pierrard"
a
| > écrit dans le message de news:
| > %
| > | Merci de ta réponse !
| > |
| > | Effectivement, la fenêtre de MsgBox est
modale,
| > et il est normal qu'elle le
| > | soit puisque de la réponse de l'utilisateur
| > dépend la fermeture du classeur.
| > | En ce sens, Excel est bien "bloqué" dans
| > l'attente de la réponse, et il doit
| > | l'être.
| > |
| > | Mais ce "blocage" partiel ne devrait pas
| > l'empêcher de recevoir les messages
| > | WM_xxx de Windows réclamant la mise à jour
de sa
| > fenêtre lorsque
| > | l'utilisateur change la boîte modale de
place,
| > et c'est pourtant ce qui se
| > | passe chez moi, comme le montre la copie
d'écran
| > que j'ai jointe.
| > |
| > | Et ce phénomène ne se produit que si je
place
| > mon code dans une application
| > | VB externe, et pas si je l'exécute en tant
que
| > macro depuis l'éditeur VBA.
| > | Le malheur est que, pour des raisons
techniques,
| > je ne peux pas utiliser une
| > | macro dans ce cas-ci...
| > |
| > | Jean-Marie
| > |
| > | "LE TROLL" <le a écrit dans
le
| > message de news:
| > |
| > | > Bonjour,
| > | >
| > | > Je ne sais pas si j'ai tout ompris,
mais
| > un
| > | > msgBox prend la main, comme la constante
| > VBmodal.
| > | > Pour rendre la main, je mettrais le
message
| > dans
| > | > une autre form, non modale, ainsi il n'y
| > aurait
| > | > pas de blocage
| > | >
| > | > --
| > | > Romans, logiciels, email, site personnel
| > | > http://irolog.free.fr/joe.htm
| > |
| > |
| > |
| > |
| >
| >
|
|

Avatar
Jean-Marie Pierrard
Bonjour,

Hum, je n'aurais pas fait ainsi
exactement, je vais le faire en VB, car je ne
connais pas le vbA


En fait, la 2e partie du code que j'ai fourni (Class1.cls,
Module1.bas, Form1.frm) est précisément réalisée en VB6.

En lançant form2.show , Me
La form devrait rester au 1er plan sans être
modal.


L'idéal serait qu'elle reste à l'avant-plan, effectivement.

Si tu as vb6, je peux te faire un exemple,
écris-moi en dessous, pour me donner ton email :o)

Cordialement.


Si tu peux me créer un exemple en Vb6 avec connexion à une
version d'Excel quelconque (2000, XP, 2003, 2007), et qu'en
affichant une boîte de message de ton choix (MsgBox, Form,
etc) depuis l'événement Appl_WorkbookBeforeClose, tu arrives
à ne pas bloquer le rafraîchissement de la fenêtre Excel
même quand tu déplaces ta Form au-dessus, alors là oui, ça
m'intéresse, car j'ai déjà testé de mon côté mon code sur
plusieurs PC, Windows et Excel sans y parvenir :-(

Merci d'avance !
Voici mon e-mail perso : jeanmarie <point> pierrard <at>
belgacom <point> net

Jean-Marie