bonjour à tous et toutes.. voila mon problème:
j'ais fait la macro suivante, qui permet d'incorporer un commentaire a
une cellule:
Sub commentaire()
'
' commentaire Macro
' Macro enregistrée le 03/09/2003 par xilam
'
'1 déclaration des variables
Dim a As Variant
'2 creation de la boite de dialogue
a = InputBox("Veuillez saisir votre commentaire svp", "SAISIE")
'3 déprotection de la feuille
ActiveCell.Select
ActiveSheet.Unprotect (code)
'4insertion du commentaire
ActiveCell.AddComment
With ActiveCell.Comment
.Visible = False
.Text Text:=a
.Shape.Height = 90
.Shape.Width = 250
End With
'5 reprotection de la feuille
ActiveSheet.Protect (code)
End Sub
Cette macro fonctionne tres bien à une chose pret... si je clique sur
annulation sur l'input box, ma protection est supprimée...
quelle est donc la solution.
Merci d'avance.
Fred Bacquet
Et les réponses à tes précédentes questions....?? Si on répond dans le vide, c'est pas très stimulant....
AV
f_bacquet
et bien... desolé... mais je n'avais eu la confirmation que mon premier message avait ete envoyé... c'est pourquoi j'en avais poste un second... Malgré tout et sans vouloir en rajouter une couche... cela ne me dit pas comment interdire le bouton annulation sur ma boite de dialogue..lol. En fait, je suis allé faire un tour sur la page de Frédéric Sigonneau, mais je n'ais pas trouvé mon bonheur. Je me permet donc de rappeler mon problème: en fait, je donne la possibilité de créer un commentaire dans une fueille protégée... Pour ce faire, l'utilisateur du fichier doit d'abord selectionner une cellule puis appuyer sur le bouton commentaire. Malheureusement, s'il clique sur Annuler dans la boite de dialogue, cela plante moncode (la macro retire la protection... mais ne se termine pas. Donc elle ne reprotège pas la feuille...) En fait, ma question est la suivante: comment supprimer le bouton annulation de la boite de dialogue .. et si ça n'est pas possible..; comment faire pour que malgré l'annulation, ma feuille se reprotège.. Merci à tous F Bacquet
et bien... desolé... mais je n'avais eu la confirmation que mon
premier message avait ete envoyé... c'est pourquoi j'en avais poste un
second...
Malgré tout et sans vouloir en rajouter une couche... cela ne me dit
pas comment interdire le bouton annulation sur ma boite de
dialogue..lol.
En fait, je suis allé faire un tour sur la page de Frédéric Sigonneau,
mais je n'ais pas trouvé mon bonheur.
Je me permet donc de rappeler mon problème:
en fait, je donne la possibilité de créer un commentaire dans une
fueille protégée... Pour ce faire, l'utilisateur du fichier doit
d'abord selectionner une cellule puis appuyer sur le bouton
commentaire. Malheureusement, s'il clique sur Annuler dans la boite de
dialogue, cela plante moncode (la macro retire la protection... mais
ne se termine pas. Donc elle ne reprotège pas la feuille...)
En fait, ma question est la suivante: comment supprimer le bouton
annulation de la boite de dialogue .. et si ça n'est pas possible..;
comment faire pour que malgré l'annulation, ma feuille se reprotège..
Merci à tous
F Bacquet
et bien... desolé... mais je n'avais eu la confirmation que mon premier message avait ete envoyé... c'est pourquoi j'en avais poste un second... Malgré tout et sans vouloir en rajouter une couche... cela ne me dit pas comment interdire le bouton annulation sur ma boite de dialogue..lol. En fait, je suis allé faire un tour sur la page de Frédéric Sigonneau, mais je n'ais pas trouvé mon bonheur. Je me permet donc de rappeler mon problème: en fait, je donne la possibilité de créer un commentaire dans une fueille protégée... Pour ce faire, l'utilisateur du fichier doit d'abord selectionner une cellule puis appuyer sur le bouton commentaire. Malheureusement, s'il clique sur Annuler dans la boite de dialogue, cela plante moncode (la macro retire la protection... mais ne se termine pas. Donc elle ne reprotège pas la feuille...) En fait, ma question est la suivante: comment supprimer le bouton annulation de la boite de dialogue .. et si ça n'est pas possible..; comment faire pour que malgré l'annulation, ma feuille se reprotège.. Merci à tous F Bacquet
Lydya
Bonjour Frédéric,
Après : a = InputBox("Veuillez saisir votre commentaire svp", "SAISIE") Ajouter : If a = "" Then Exit Sub
Lydia
"Frédéric Bacquet" a écrit dans le message de news:
et bien... desolé... mais je n'avais eu la confirmation que mon premier message avait ete envoyé... c'est pourquoi j'en avais poste un second... Malgré tout et sans vouloir en rajouter une couche... cela ne me dit pas comment interdire le bouton annulation sur ma boite de dialogue..lol. En fait, je suis allé faire un tour sur la page de Frédéric Sigonneau, mais je n'ais pas trouvé mon bonheur. Je me permet donc de rappeler mon problème: en fait, je donne la possibilité de créer un commentaire dans une fueille protégée... Pour ce faire, l'utilisateur du fichier doit d'abord selectionner une cellule puis appuyer sur le bouton commentaire. Malheureusement, s'il clique sur Annuler dans la boite de dialogue, cela plante moncode (la macro retire la protection... mais ne se termine pas. Donc elle ne reprotège pas la feuille...) En fait, ma question est la suivante: comment supprimer le bouton annulation de la boite de dialogue .. et si ça n'est pas possible..; comment faire pour que malgré l'annulation, ma feuille se reprotège.. Merci à tous F Bacquet
Bonjour Frédéric,
Après :
a = InputBox("Veuillez saisir votre commentaire svp", "SAISIE")
Ajouter :
If a = "" Then Exit Sub
Lydia
"Frédéric Bacquet" <f_bacquet@yahoo.fr> a écrit dans le message de
news:28feaa3c.0309110042.5736264e@posting.google.com...
et bien... desolé... mais je n'avais eu la confirmation que mon
premier message avait ete envoyé... c'est pourquoi j'en avais poste un
second...
Malgré tout et sans vouloir en rajouter une couche... cela ne me dit
pas comment interdire le bouton annulation sur ma boite de
dialogue..lol.
En fait, je suis allé faire un tour sur la page de Frédéric Sigonneau,
mais je n'ais pas trouvé mon bonheur.
Je me permet donc de rappeler mon problème:
en fait, je donne la possibilité de créer un commentaire dans une
fueille protégée... Pour ce faire, l'utilisateur du fichier doit
d'abord selectionner une cellule puis appuyer sur le bouton
commentaire. Malheureusement, s'il clique sur Annuler dans la boite de
dialogue, cela plante moncode (la macro retire la protection... mais
ne se termine pas. Donc elle ne reprotège pas la feuille...)
En fait, ma question est la suivante: comment supprimer le bouton
annulation de la boite de dialogue .. et si ça n'est pas possible..;
comment faire pour que malgré l'annulation, ma feuille se reprotège..
Merci à tous
F Bacquet
Après : a = InputBox("Veuillez saisir votre commentaire svp", "SAISIE") Ajouter : If a = "" Then Exit Sub
Lydia
"Frédéric Bacquet" a écrit dans le message de news:
et bien... desolé... mais je n'avais eu la confirmation que mon premier message avait ete envoyé... c'est pourquoi j'en avais poste un second... Malgré tout et sans vouloir en rajouter une couche... cela ne me dit pas comment interdire le bouton annulation sur ma boite de dialogue..lol. En fait, je suis allé faire un tour sur la page de Frédéric Sigonneau, mais je n'ais pas trouvé mon bonheur. Je me permet donc de rappeler mon problème: en fait, je donne la possibilité de créer un commentaire dans une fueille protégée... Pour ce faire, l'utilisateur du fichier doit d'abord selectionner une cellule puis appuyer sur le bouton commentaire. Malheureusement, s'il clique sur Annuler dans la boite de dialogue, cela plante moncode (la macro retire la protection... mais ne se termine pas. Donc elle ne reprotège pas la feuille...) En fait, ma question est la suivante: comment supprimer le bouton annulation de la boite de dialogue .. et si ça n'est pas possible..; comment faire pour que malgré l'annulation, ma feuille se reprotège.. Merci à tous F Bacquet
Alain CROS
Bonjour.
Copie d'un post du 31/03/03
Alain CROS.
-------------------------------------------début de copie Bonjour.
Si tu travaille sur PC, essaye comme ça.
Tu créer un bouton sur une feuille de calcul issue de la barre d'outils Formulaire. Tu lui affecte la macro InputBoxToujoursOK.
Dans un module standard tu copie ce qui suis.
Option Explicit
Private Declare Function EnableWindow Lib "user32" _ (ByVal hwnd As Long, _ ByVal fEnable As Long) As Long
Private Declare Function FindWindowExA Lib "user32" _ (ByVal hWnd1 As Long, _ ByVal hWnd2 As Long, _ ByVal lpsz1 As String, _ ByVal lpsz2 As String) As Long
Private Declare Function GetWindowLongA Lib "user32" _ (ByVal hwnd As Long, _ ByVal nIndex As Long) As Long
Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
Private Declare Function SetWindowsHookExA Lib "user32" _ (ByVal idHook As Long, _ ByVal lpfn As Long, _ ByVal hmod As Long, _ ByVal dwThreadId As Long) As Long
Private lgHook As Long
Private Declare Function GetSystemMenu Lib "user32" _ (ByVal hwnd As Long, _ ByVal bRevert As Long) As Long
Private Declare Function DeleteMenu Lib "user32" _ (ByVal hMenu As Long, _ ByVal nPosition As Long, _ ByVal wFlags As Long) As Long
Private Declare Function GetWindowTextLengthA Lib "user32" _ (ByVal hwnd As Long) As Long
Private Declare Function GetWindowTextA Lib "user32" _ (ByVal hwnd As Long, _ ByVal lpString As String, _ ByVal cch As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" _ (ByVal hHook As Long) As Long
Sub InputBoxToujoursOK()
Const WH_CBT As Long = &H5 Const GWL_HINSTANCE As Long = -6 Dim lgInst As Long
lgInst = GetWindowLongA(FindWindowExA(0, 0, "XLMAIN", _ Application.Caption), GWL_HINSTANCE) #If VBA6 Then lgHook = SetWindowsHookExA(WH_CBT, AddressOf InputBoxToujoursOKProc, _ lgInst, GetCurrentThreadId) #Else lgHook = SetWindowsHookExA(WH_CBT, AddrOf("InputBoxToujoursOKProc"), _ lgInst, GetCurrentThreadId) #End If MsgBox "Les Données saisies sont : " & InputBox("Saisissez vos données")
End Sub
Private Function InputBoxToujoursOKProc(ByVal lMsg As Long, _ ByVal wParam As Long, _ ByRef lParam As Long) As Long
If lMsg = HCBT_ACTIVATE Then ' Empécher la fermeture par la croix DeleteMenu GetSystemMenu(wParam, False), SC_CLOSE, MF_BYCOMMAND Do ' Rechercher le handle des boutons BWND = FindWindowExA(wParam, BWND, "BUTTON", vbNullString) If BWND <> 0 Then ' Lire le texte du bouton MYSTR = String(GetWindowTextLengthA(BWND) + 1, Chr$(0)) GetWindowTextA BWND, MYSTR, Len(MYSTR) If MYSTR = "Annuler" & Chr$(0) Then EnableWindow BWND, False Exit Do End If End If Loop Until BWND = 0 UnhookWindowsHookEx lgHook End If InputBoxToujoursOKProc = False
End Function
Si tu travaille avec XL97
Tu créer un autre module Standard que tu appelle AddrOf_Ken_Getz_Michael_Kaplan Propriété (Name) du Module Puis dedans tu copie ce qui suis.
Option Explicit Private Declare Function GetCurrentVbaProject Lib "vba332.dll" _ Alias "EbGetExecutingProj" _ (hProject As Long) As Long Private Declare Function GetFuncID Lib "vba332.dll" _ Alias "TipGetFunctionId" _ (ByVal hProject As Long, _ ByVal strFunctionName As String, _ ByRef strFunctionID As String) As Long Private Declare Function GetAddr Lib "vba332.dll" _ Alias "TipGetLpfnOfFunctionId" _ (ByVal hProject As Long, _ ByVal strFunctionID As String, _ ByRef lpfnAddressOf As Long) As Long #If VBA6 Then #Else Public Function AddrOf(CallbackFunctionName As String) _ As Long 'AddressOf operator replacement for Office97 VBA _ Authors: Ken Getz and Michael Kaplan
'declaration of local variables Dim aResult As Long Dim CurrentVBProject As Long Dim strFunctionID As String Dim AddressOfFunction As Long Dim UnicodeFunctionName As String
'convert the name of the function to Unicode system UnicodeFunctionName = StrConv(CallbackFunctionName, _ vbUnicode) 'if the current VBProjects exists... If Not GetCurrentVbaProject(CurrentVBProject) = 0 Then 'get the function ID of the callback function, _ based on its unicode-converted name, _ in order to ensure that it exists aResult = GetFuncID(hProject:=CurrentVBProject, _ strFunctionName:=UnicodeFunctionName, _ strFunctionID:=strFunctionID) 'if the function exists indeed ... If aResult = 0 Then 'get a pointer to the callback function based on the _ strFunctionID argument of the GetFuncID function aResult = GetAddr(hProject:=CurrentVBProject, _ strFunctionID:=strFunctionID, _ lpfnAddressOf:dressOfFunction) 'if we've got the pointer pass it to the result _ of the function If aResult = 0 Then AddrOf = AddressOfFunction End If End If End If
End Function #End If
Voilà tu as une inputBox qui ne se ferme que par le bouton OK.
Alain CROS. -----------------------------------------Fin de copie
"Frédéric Bacquet" a écrit dans le message de news:
et bien... desolé... mais je n'avais eu la confirmation que mon premier message avait ete envoyé... c'est pourquoi j'en avais poste un second... Malgré tout et sans vouloir en rajouter une couche... cela ne me dit pas comment interdire le bouton annulation sur ma boite de dialogue..lol. En fait, je suis allé faire un tour sur la page de Frédéric Sigonneau, mais je n'ais pas trouvé mon bonheur. Je me permet donc de rappeler mon problème: en fait, je donne la possibilité de créer un commentaire dans une fueille protégée... Pour ce faire, l'utilisateur du fichier doit d'abord selectionner une cellule puis appuyer sur le bouton commentaire. Malheureusement, s'il clique sur Annuler dans la boite de dialogue, cela plante moncode (la macro retire la protection... mais ne se termine pas. Donc elle ne reprotège pas la feuille...) En fait, ma question est la suivante: comment supprimer le bouton annulation de la boite de dialogue .. et si ça n'est pas possible..; comment faire pour que malgré l'annulation, ma feuille se reprotège.. Merci à tous F Bacquet
Bonjour.
Copie d'un post du 31/03/03
Alain CROS.
-------------------------------------------début de copie
Bonjour.
Si tu travaille sur PC, essaye comme ça.
Tu créer un bouton sur une feuille de calcul issue de la barre d'outils Formulaire.
Tu lui affecte la macro InputBoxToujoursOK.
Dans un module standard tu copie ce qui suis.
Option Explicit
Private Declare Function EnableWindow Lib "user32" _
(ByVal hwnd As Long, _
ByVal fEnable As Long) As Long
Private Declare Function FindWindowExA Lib "user32" _
(ByVal hWnd1 As Long, _
ByVal hWnd2 As Long, _
ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long
Private Declare Function GetWindowLongA Lib "user32" _
(ByVal hwnd As Long, _
ByVal nIndex As Long) As Long
Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
Private Declare Function SetWindowsHookExA Lib "user32" _
(ByVal idHook As Long, _
ByVal lpfn As Long, _
ByVal hmod As Long, _
ByVal dwThreadId As Long) As Long
Private lgHook As Long
Private Declare Function GetSystemMenu Lib "user32" _
(ByVal hwnd As Long, _
ByVal bRevert As Long) As Long
Private Declare Function DeleteMenu Lib "user32" _
(ByVal hMenu As Long, _
ByVal nPosition As Long, _
ByVal wFlags As Long) As Long
Private Declare Function GetWindowTextLengthA Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function GetWindowTextA Lib "user32" _
(ByVal hwnd As Long, _
ByVal lpString As String, _
ByVal cch As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long
Sub InputBoxToujoursOK()
Const WH_CBT As Long = &H5
Const GWL_HINSTANCE As Long = -6
Dim lgInst As Long
lgInst = GetWindowLongA(FindWindowExA(0, 0, "XLMAIN", _
Application.Caption), GWL_HINSTANCE)
#If VBA6 Then
lgHook = SetWindowsHookExA(WH_CBT, AddressOf InputBoxToujoursOKProc, _
lgInst, GetCurrentThreadId)
#Else
lgHook = SetWindowsHookExA(WH_CBT, AddrOf("InputBoxToujoursOKProc"), _
lgInst, GetCurrentThreadId)
#End If
MsgBox "Les Données saisies sont : " & InputBox("Saisissez vos données")
End Sub
Private Function InputBoxToujoursOKProc(ByVal lMsg As Long, _
ByVal wParam As Long, _
ByRef lParam As Long) As Long
If lMsg = HCBT_ACTIVATE Then
' Empécher la fermeture par la croix
DeleteMenu GetSystemMenu(wParam, False), SC_CLOSE, MF_BYCOMMAND
Do
' Rechercher le handle des boutons
BWND = FindWindowExA(wParam, BWND, "BUTTON", vbNullString)
If BWND <> 0 Then
' Lire le texte du bouton
MYSTR = String(GetWindowTextLengthA(BWND) + 1, Chr$(0))
GetWindowTextA BWND, MYSTR, Len(MYSTR)
If MYSTR = "Annuler" & Chr$(0) Then
EnableWindow BWND, False
Exit Do
End If
End If
Loop Until BWND = 0
UnhookWindowsHookEx lgHook
End If
InputBoxToujoursOKProc = False
End Function
Si tu travaille avec XL97
Tu créer un autre module Standard que tu appelle AddrOf_Ken_Getz_Michael_Kaplan
Propriété (Name) du Module
Puis dedans tu copie ce qui suis.
Option Explicit
Private Declare Function GetCurrentVbaProject Lib "vba332.dll" _
Alias "EbGetExecutingProj" _
(hProject As Long) As Long
Private Declare Function GetFuncID Lib "vba332.dll" _
Alias "TipGetFunctionId" _
(ByVal hProject As Long, _
ByVal strFunctionName As String, _
ByRef strFunctionID As String) As Long
Private Declare Function GetAddr Lib "vba332.dll" _
Alias "TipGetLpfnOfFunctionId" _
(ByVal hProject As Long, _
ByVal strFunctionID As String, _
ByRef lpfnAddressOf As Long) As Long
#If VBA6 Then
#Else
Public Function AddrOf(CallbackFunctionName As String) _
As Long
'AddressOf operator replacement for Office97 VBA _
Authors: Ken Getz and Michael Kaplan
'declaration of local variables
Dim aResult As Long
Dim CurrentVBProject As Long
Dim strFunctionID As String
Dim AddressOfFunction As Long
Dim UnicodeFunctionName As String
'convert the name of the function to Unicode system
UnicodeFunctionName = StrConv(CallbackFunctionName, _
vbUnicode)
'if the current VBProjects exists...
If Not GetCurrentVbaProject(CurrentVBProject) = 0 Then
'get the function ID of the callback function, _
based on its unicode-converted name, _
in order to ensure that it exists
aResult = GetFuncID(hProject:=CurrentVBProject, _
strFunctionName:=UnicodeFunctionName, _
strFunctionID:=strFunctionID)
'if the function exists indeed ...
If aResult = 0 Then
'get a pointer to the callback function based on the _
strFunctionID argument of the GetFuncID function
aResult = GetAddr(hProject:=CurrentVBProject, _
strFunctionID:=strFunctionID, _
lpfnAddressOf:dressOfFunction)
'if we've got the pointer pass it to the result _
of the function
If aResult = 0 Then
AddrOf = AddressOfFunction
End If
End If
End If
End Function
#End If
Voilà tu as une inputBox qui ne se ferme que par le bouton OK.
Alain CROS.
-----------------------------------------Fin de copie
"Frédéric Bacquet" <f_bacquet@yahoo.fr> a écrit dans le message de news: 28feaa3c.0309110042.5736264e@posting.google.com...
et bien... desolé... mais je n'avais eu la confirmation que mon
premier message avait ete envoyé... c'est pourquoi j'en avais poste un
second...
Malgré tout et sans vouloir en rajouter une couche... cela ne me dit
pas comment interdire le bouton annulation sur ma boite de
dialogue..lol.
En fait, je suis allé faire un tour sur la page de Frédéric Sigonneau,
mais je n'ais pas trouvé mon bonheur.
Je me permet donc de rappeler mon problème:
en fait, je donne la possibilité de créer un commentaire dans une
fueille protégée... Pour ce faire, l'utilisateur du fichier doit
d'abord selectionner une cellule puis appuyer sur le bouton
commentaire. Malheureusement, s'il clique sur Annuler dans la boite de
dialogue, cela plante moncode (la macro retire la protection... mais
ne se termine pas. Donc elle ne reprotège pas la feuille...)
En fait, ma question est la suivante: comment supprimer le bouton
annulation de la boite de dialogue .. et si ça n'est pas possible..;
comment faire pour que malgré l'annulation, ma feuille se reprotège..
Merci à tous
F Bacquet
-------------------------------------------début de copie Bonjour.
Si tu travaille sur PC, essaye comme ça.
Tu créer un bouton sur une feuille de calcul issue de la barre d'outils Formulaire. Tu lui affecte la macro InputBoxToujoursOK.
Dans un module standard tu copie ce qui suis.
Option Explicit
Private Declare Function EnableWindow Lib "user32" _ (ByVal hwnd As Long, _ ByVal fEnable As Long) As Long
Private Declare Function FindWindowExA Lib "user32" _ (ByVal hWnd1 As Long, _ ByVal hWnd2 As Long, _ ByVal lpsz1 As String, _ ByVal lpsz2 As String) As Long
Private Declare Function GetWindowLongA Lib "user32" _ (ByVal hwnd As Long, _ ByVal nIndex As Long) As Long
Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
Private Declare Function SetWindowsHookExA Lib "user32" _ (ByVal idHook As Long, _ ByVal lpfn As Long, _ ByVal hmod As Long, _ ByVal dwThreadId As Long) As Long
Private lgHook As Long
Private Declare Function GetSystemMenu Lib "user32" _ (ByVal hwnd As Long, _ ByVal bRevert As Long) As Long
Private Declare Function DeleteMenu Lib "user32" _ (ByVal hMenu As Long, _ ByVal nPosition As Long, _ ByVal wFlags As Long) As Long
Private Declare Function GetWindowTextLengthA Lib "user32" _ (ByVal hwnd As Long) As Long
Private Declare Function GetWindowTextA Lib "user32" _ (ByVal hwnd As Long, _ ByVal lpString As String, _ ByVal cch As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" _ (ByVal hHook As Long) As Long
Sub InputBoxToujoursOK()
Const WH_CBT As Long = &H5 Const GWL_HINSTANCE As Long = -6 Dim lgInst As Long
lgInst = GetWindowLongA(FindWindowExA(0, 0, "XLMAIN", _ Application.Caption), GWL_HINSTANCE) #If VBA6 Then lgHook = SetWindowsHookExA(WH_CBT, AddressOf InputBoxToujoursOKProc, _ lgInst, GetCurrentThreadId) #Else lgHook = SetWindowsHookExA(WH_CBT, AddrOf("InputBoxToujoursOKProc"), _ lgInst, GetCurrentThreadId) #End If MsgBox "Les Données saisies sont : " & InputBox("Saisissez vos données")
End Sub
Private Function InputBoxToujoursOKProc(ByVal lMsg As Long, _ ByVal wParam As Long, _ ByRef lParam As Long) As Long
If lMsg = HCBT_ACTIVATE Then ' Empécher la fermeture par la croix DeleteMenu GetSystemMenu(wParam, False), SC_CLOSE, MF_BYCOMMAND Do ' Rechercher le handle des boutons BWND = FindWindowExA(wParam, BWND, "BUTTON", vbNullString) If BWND <> 0 Then ' Lire le texte du bouton MYSTR = String(GetWindowTextLengthA(BWND) + 1, Chr$(0)) GetWindowTextA BWND, MYSTR, Len(MYSTR) If MYSTR = "Annuler" & Chr$(0) Then EnableWindow BWND, False Exit Do End If End If Loop Until BWND = 0 UnhookWindowsHookEx lgHook End If InputBoxToujoursOKProc = False
End Function
Si tu travaille avec XL97
Tu créer un autre module Standard que tu appelle AddrOf_Ken_Getz_Michael_Kaplan Propriété (Name) du Module Puis dedans tu copie ce qui suis.
Option Explicit Private Declare Function GetCurrentVbaProject Lib "vba332.dll" _ Alias "EbGetExecutingProj" _ (hProject As Long) As Long Private Declare Function GetFuncID Lib "vba332.dll" _ Alias "TipGetFunctionId" _ (ByVal hProject As Long, _ ByVal strFunctionName As String, _ ByRef strFunctionID As String) As Long Private Declare Function GetAddr Lib "vba332.dll" _ Alias "TipGetLpfnOfFunctionId" _ (ByVal hProject As Long, _ ByVal strFunctionID As String, _ ByRef lpfnAddressOf As Long) As Long #If VBA6 Then #Else Public Function AddrOf(CallbackFunctionName As String) _ As Long 'AddressOf operator replacement for Office97 VBA _ Authors: Ken Getz and Michael Kaplan
'declaration of local variables Dim aResult As Long Dim CurrentVBProject As Long Dim strFunctionID As String Dim AddressOfFunction As Long Dim UnicodeFunctionName As String
'convert the name of the function to Unicode system UnicodeFunctionName = StrConv(CallbackFunctionName, _ vbUnicode) 'if the current VBProjects exists... If Not GetCurrentVbaProject(CurrentVBProject) = 0 Then 'get the function ID of the callback function, _ based on its unicode-converted name, _ in order to ensure that it exists aResult = GetFuncID(hProject:=CurrentVBProject, _ strFunctionName:=UnicodeFunctionName, _ strFunctionID:=strFunctionID) 'if the function exists indeed ... If aResult = 0 Then 'get a pointer to the callback function based on the _ strFunctionID argument of the GetFuncID function aResult = GetAddr(hProject:=CurrentVBProject, _ strFunctionID:=strFunctionID, _ lpfnAddressOf:dressOfFunction) 'if we've got the pointer pass it to the result _ of the function If aResult = 0 Then AddrOf = AddressOfFunction End If End If End If
End Function #End If
Voilà tu as une inputBox qui ne se ferme que par le bouton OK.
Alain CROS. -----------------------------------------Fin de copie
"Frédéric Bacquet" a écrit dans le message de news:
et bien... desolé... mais je n'avais eu la confirmation que mon premier message avait ete envoyé... c'est pourquoi j'en avais poste un second... Malgré tout et sans vouloir en rajouter une couche... cela ne me dit pas comment interdire le bouton annulation sur ma boite de dialogue..lol. En fait, je suis allé faire un tour sur la page de Frédéric Sigonneau, mais je n'ais pas trouvé mon bonheur. Je me permet donc de rappeler mon problème: en fait, je donne la possibilité de créer un commentaire dans une fueille protégée... Pour ce faire, l'utilisateur du fichier doit d'abord selectionner une cellule puis appuyer sur le bouton commentaire. Malheureusement, s'il clique sur Annuler dans la boite de dialogue, cela plante moncode (la macro retire la protection... mais ne se termine pas. Donc elle ne reprotège pas la feuille...) En fait, ma question est la suivante: comment supprimer le bouton annulation de la boite de dialogue .. et si ça n'est pas possible..; comment faire pour que malgré l'annulation, ma feuille se reprotège.. Merci à tous F Bacquet