Bonsoir à tous,
Je fais encore à vous pour obtenir de l'aide.
je voudrais rendre obligatoire la réponse demandée par un inputbox, c'est-a
dire que tant que l'utilisateur n'aurait pas répondu, chaque fois l'inputbox
réapparaitrais et la suite de la macro ne se déroulerait pas.
voici la partie de la macro concernée:
zzzz = InputBox("IMPORTANT" _
& Chr(13) & "VOUS DEVEZ OBLIGATOIREMENT RENOMMER CETTE FEUILLE" _
& Chr(13) & Chr(13) & "Indiquer ci-dessous le nom choisi" _
& Chr(13) & "(choix libre)", "Listing")
If zzzz = "" Then
MsgBox "VOUS DEVEZ OBLIGATOIREMENT METTRE UN NOM"
...................
End If
Quelle instruction mettre vant le "end if " pour que l'inputbox revienne
tant que l'utilisteur n'aura pas mis de nom ?
et en vraiment subsidiaire, existe t'il un moyen pour que le bouton "annuler
de l'inputbox ne soit pas apparent ?
grand merci d'avance pour l'attention que vous porterez à mon problème
Alain ROUSSEL
Bonsoir à tous,
Je fais encore à vous pour obtenir de l'aide.
je voudrais rendre obligatoire la réponse demandée par un inputbox, c'est-a
dire que tant que l'utilisateur n'aurait pas répondu, chaque fois l'inputbox
réapparaitrais et la suite de la macro ne se déroulerait pas.
voici la partie de la macro concernée:
zzzz = InputBox("IMPORTANT" _
& Chr(13) & "VOUS DEVEZ OBLIGATOIREMENT RENOMMER CETTE FEUILLE" _
& Chr(13) & Chr(13) & "Indiquer ci-dessous le nom choisi" _
& Chr(13) & "(choix libre)", "Listing")
If zzzz = "" Then
MsgBox "VOUS DEVEZ OBLIGATOIREMENT METTRE UN NOM"
...................
End If
Quelle instruction mettre vant le "end if " pour que l'inputbox revienne
tant que l'utilisteur n'aura pas mis de nom ?
et en vraiment subsidiaire, existe t'il un moyen pour que le bouton "annuler
de l'inputbox ne soit pas apparent ?
grand merci d'avance pour l'attention que vous porterez à mon problème
Alain ROUSSEL
Bonsoir à tous,
Je fais encore à vous pour obtenir de l'aide.
je voudrais rendre obligatoire la réponse demandée par un inputbox, c'est-a
dire que tant que l'utilisateur n'aurait pas répondu, chaque fois l'inputbox
réapparaitrais et la suite de la macro ne se déroulerait pas.
voici la partie de la macro concernée:
zzzz = InputBox("IMPORTANT" _
& Chr(13) & "VOUS DEVEZ OBLIGATOIREMENT RENOMMER CETTE FEUILLE" _
& Chr(13) & Chr(13) & "Indiquer ci-dessous le nom choisi" _
& Chr(13) & "(choix libre)", "Listing")
If zzzz = "" Then
MsgBox "VOUS DEVEZ OBLIGATOIREMENT METTRE UN NOM"
...................
End If
Quelle instruction mettre vant le "end if " pour que l'inputbox revienne
tant que l'utilisteur n'aura pas mis de nom ?
et en vraiment subsidiaire, existe t'il un moyen pour que le bouton "annuler
de l'inputbox ne soit pas apparent ?
grand merci d'avance pour l'attention que vous porterez à mon problème
Alain ROUSSEL
bonsoir alain
il te suffit de rajouter le nom de ta sub avant le end if et le tour est
joué...
jps
alroussel a écrit:Bonsoir à tous,
Je fais encore à vous pour obtenir de l'aide.
je voudrais rendre obligatoire la réponse demandée par un inputbox,
c'est-a
dire que tant que l'utilisateur n'aurait pas répondu, chaque fois
l'inputbox
réapparaitrais et la suite de la macro ne se déroulerait pas.
voici la partie de la macro concernée:
zzzz = InputBox("IMPORTANT" _
& Chr(13) & "VOUS DEVEZ OBLIGATOIREMENT RENOMMER CETTE FEUILLE" _
& Chr(13) & Chr(13) & "Indiquer ci-dessous le nom choisi" _
& Chr(13) & "(choix libre)", "Listing")
If zzzz = "" Then
MsgBox "VOUS DEVEZ OBLIGATOIREMENT METTRE UN NOM"
...................
End If
Quelle instruction mettre vant le "end if " pour que l'inputbox revienne
tant que l'utilisteur n'aura pas mis de nom ?
et en vraiment subsidiaire, existe t'il un moyen pour que le bouton
"annuler
de l'inputbox ne soit pas apparent ?
grand merci d'avance pour l'attention que vous porterez à mon problème
Alain ROUSSEL
bonsoir alain
il te suffit de rajouter le nom de ta sub avant le end if et le tour est
joué...
jps
alroussel a écrit:
Bonsoir à tous,
Je fais encore à vous pour obtenir de l'aide.
je voudrais rendre obligatoire la réponse demandée par un inputbox,
c'est-a
dire que tant que l'utilisateur n'aurait pas répondu, chaque fois
l'inputbox
réapparaitrais et la suite de la macro ne se déroulerait pas.
voici la partie de la macro concernée:
zzzz = InputBox("IMPORTANT" _
& Chr(13) & "VOUS DEVEZ OBLIGATOIREMENT RENOMMER CETTE FEUILLE" _
& Chr(13) & Chr(13) & "Indiquer ci-dessous le nom choisi" _
& Chr(13) & "(choix libre)", "Listing")
If zzzz = "" Then
MsgBox "VOUS DEVEZ OBLIGATOIREMENT METTRE UN NOM"
...................
End If
Quelle instruction mettre vant le "end if " pour que l'inputbox revienne
tant que l'utilisteur n'aura pas mis de nom ?
et en vraiment subsidiaire, existe t'il un moyen pour que le bouton
"annuler
de l'inputbox ne soit pas apparent ?
grand merci d'avance pour l'attention que vous porterez à mon problème
Alain ROUSSEL
bonsoir alain
il te suffit de rajouter le nom de ta sub avant le end if et le tour est
joué...
jps
alroussel a écrit:Bonsoir à tous,
Je fais encore à vous pour obtenir de l'aide.
je voudrais rendre obligatoire la réponse demandée par un inputbox,
c'est-a
dire que tant que l'utilisateur n'aurait pas répondu, chaque fois
l'inputbox
réapparaitrais et la suite de la macro ne se déroulerait pas.
voici la partie de la macro concernée:
zzzz = InputBox("IMPORTANT" _
& Chr(13) & "VOUS DEVEZ OBLIGATOIREMENT RENOMMER CETTE FEUILLE" _
& Chr(13) & Chr(13) & "Indiquer ci-dessous le nom choisi" _
& Chr(13) & "(choix libre)", "Listing")
If zzzz = "" Then
MsgBox "VOUS DEVEZ OBLIGATOIREMENT METTRE UN NOM"
...................
End If
Quelle instruction mettre vant le "end if " pour que l'inputbox revienne
tant que l'utilisteur n'aura pas mis de nom ?
et en vraiment subsidiaire, existe t'il un moyen pour que le bouton
"annuler
de l'inputbox ne soit pas apparent ?
grand merci d'avance pour l'attention que vous porterez à mon problème
Alain ROUSSEL
Bonsoir à tous,
Je fais encore à vous pour obtenir de l'aide.
je voudrais rendre obligatoire la réponse demandée par un inputbox,
c'est-a
dire que tant que l'utilisateur n'aurait pas répondu, chaque fois
l'inputbox
réapparaitrais et la suite de la macro ne se déroulerait pas.
voici la partie de la macro concernée:
zzzz = InputBox("IMPORTANT" _
& Chr(13) & "VOUS DEVEZ OBLIGATOIREMENT RENOMMER CETTE FEUILLE" _
& Chr(13) & Chr(13) & "Indiquer ci-dessous le nom choisi" _
& Chr(13) & "(choix libre)", "Listing")
If zzzz = "" Then
MsgBox "VOUS DEVEZ OBLIGATOIREMENT METTRE UN NOM"
...................
End If
Quelle instruction mettre vant le "end if " pour que l'inputbox revienne
tant que l'utilisteur n'aura pas mis de nom ?
et en vraiment subsidiaire, existe t'il un moyen pour que le bouton
"annuler
de l'inputbox ne soit pas apparent ?
grand merci d'avance pour l'attention que vous porterez à mon problème
Alain ROUSSEL
Bonsoir à tous,
Je fais encore à vous pour obtenir de l'aide.
je voudrais rendre obligatoire la réponse demandée par un inputbox,
c'est-a
dire que tant que l'utilisateur n'aurait pas répondu, chaque fois
l'inputbox
réapparaitrais et la suite de la macro ne se déroulerait pas.
voici la partie de la macro concernée:
zzzz = InputBox("IMPORTANT" _
& Chr(13) & "VOUS DEVEZ OBLIGATOIREMENT RENOMMER CETTE FEUILLE" _
& Chr(13) & Chr(13) & "Indiquer ci-dessous le nom choisi" _
& Chr(13) & "(choix libre)", "Listing")
If zzzz = "" Then
MsgBox "VOUS DEVEZ OBLIGATOIREMENT METTRE UN NOM"
...................
End If
Quelle instruction mettre vant le "end if " pour que l'inputbox revienne
tant que l'utilisteur n'aura pas mis de nom ?
et en vraiment subsidiaire, existe t'il un moyen pour que le bouton
"annuler
de l'inputbox ne soit pas apparent ?
grand merci d'avance pour l'attention que vous porterez à mon problème
Alain ROUSSEL
Bonsoir à tous,
Je fais encore à vous pour obtenir de l'aide.
je voudrais rendre obligatoire la réponse demandée par un inputbox,
c'est-a
dire que tant que l'utilisateur n'aurait pas répondu, chaque fois
l'inputbox
réapparaitrais et la suite de la macro ne se déroulerait pas.
voici la partie de la macro concernée:
zzzz = InputBox("IMPORTANT" _
& Chr(13) & "VOUS DEVEZ OBLIGATOIREMENT RENOMMER CETTE FEUILLE" _
& Chr(13) & Chr(13) & "Indiquer ci-dessous le nom choisi" _
& Chr(13) & "(choix libre)", "Listing")
If zzzz = "" Then
MsgBox "VOUS DEVEZ OBLIGATOIREMENT METTRE UN NOM"
...................
End If
Quelle instruction mettre vant le "end if " pour que l'inputbox revienne
tant que l'utilisteur n'aura pas mis de nom ?
et en vraiment subsidiaire, existe t'il un moyen pour que le bouton
"annuler
de l'inputbox ne soit pas apparent ?
grand merci d'avance pour l'attention que vous porterez à mon problème
Alain ROUSSEL
Bonsoir à tous,
Je fais encore à vous pour obtenir de l'aide.
je voudrais rendre obligatoire la réponse demandée par un inputbox, c'est-a
dire que tant que l'utilisateur n'aurait pas répondu, chaque fois l'inputbox
réapparaitrais et la suite de la macro ne se déroulerait pas.
voici la partie de la macro concernée:
zzzz = InputBox("IMPORTANT" _
& Chr(13) & "VOUS DEVEZ OBLIGATOIREMENT RENOMMER CETTE FEUILLE" _
& Chr(13) & Chr(13) & "Indiquer ci-dessous le nom choisi" _
& Chr(13) & "(choix libre)", "Listing")
If zzzz = "" Then
MsgBox "VOUS DEVEZ OBLIGATOIREMENT METTRE UN NOM"
...................
End If
Quelle instruction mettre vant le "end if " pour que l'inputbox revienne
tant que l'utilisteur n'aura pas mis de nom ?
et en vraiment subsidiaire, existe t'il un moyen pour que le bouton "annuler
de l'inputbox ne soit pas apparent ?
grand merci d'avance pour l'attention que vous porterez à mon problème
Alain ROUSSEL
Bonsoir à tous,
Je fais encore à vous pour obtenir de l'aide.
je voudrais rendre obligatoire la réponse demandée par un inputbox, c'est-a
dire que tant que l'utilisateur n'aurait pas répondu, chaque fois l'inputbox
réapparaitrais et la suite de la macro ne se déroulerait pas.
voici la partie de la macro concernée:
zzzz = InputBox("IMPORTANT" _
& Chr(13) & "VOUS DEVEZ OBLIGATOIREMENT RENOMMER CETTE FEUILLE" _
& Chr(13) & Chr(13) & "Indiquer ci-dessous le nom choisi" _
& Chr(13) & "(choix libre)", "Listing")
If zzzz = "" Then
MsgBox "VOUS DEVEZ OBLIGATOIREMENT METTRE UN NOM"
...................
End If
Quelle instruction mettre vant le "end if " pour que l'inputbox revienne
tant que l'utilisteur n'aura pas mis de nom ?
et en vraiment subsidiaire, existe t'il un moyen pour que le bouton "annuler
de l'inputbox ne soit pas apparent ?
grand merci d'avance pour l'attention que vous porterez à mon problème
Alain ROUSSEL
Bonsoir à tous,
Je fais encore à vous pour obtenir de l'aide.
je voudrais rendre obligatoire la réponse demandée par un inputbox, c'est-a
dire que tant que l'utilisateur n'aurait pas répondu, chaque fois l'inputbox
réapparaitrais et la suite de la macro ne se déroulerait pas.
voici la partie de la macro concernée:
zzzz = InputBox("IMPORTANT" _
& Chr(13) & "VOUS DEVEZ OBLIGATOIREMENT RENOMMER CETTE FEUILLE" _
& Chr(13) & Chr(13) & "Indiquer ci-dessous le nom choisi" _
& Chr(13) & "(choix libre)", "Listing")
If zzzz = "" Then
MsgBox "VOUS DEVEZ OBLIGATOIREMENT METTRE UN NOM"
...................
End If
Quelle instruction mettre vant le "end if " pour que l'inputbox revienne
tant que l'utilisteur n'aura pas mis de nom ?
et en vraiment subsidiaire, existe t'il un moyen pour que le bouton "annuler
de l'inputbox ne soit pas apparent ?
grand merci d'avance pour l'attention que vous porterez à mon problème
Alain ROUSSEL
Bonjour.
Une petite recherche sur Google t'aurais donné ...
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
Const HCBT_ACTIVATE = &O5
Const SC_CLOSE = &HF060
Const MF_BYCOMMAND = &H0
Dim BWND As Long, MYSTR As String
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.
"alroussel" a écrit dans le message de news: 3fc65816$0$26793$Bonsoir à tous,
Je fais encore à vous pour obtenir de l'aide.
je voudrais rendre obligatoire la réponse demandée par un inputbox, c'est-a
dire que tant que l'utilisateur n'aurait pas répondu, chaque fois l'inputbox
réapparaitrais et la suite de la macro ne se déroulerait pas.
voici la partie de la macro concernée:
zzzz = InputBox("IMPORTANT" _
& Chr(13) & "VOUS DEVEZ OBLIGATOIREMENT RENOMMER CETTE FEUILLE" _
& Chr(13) & Chr(13) & "Indiquer ci-dessous le nom choisi" _
& Chr(13) & "(choix libre)", "Listing")
If zzzz = "" Then
MsgBox "VOUS DEVEZ OBLIGATOIREMENT METTRE UN NOM"
...................
End If
Quelle instruction mettre vant le "end if " pour que l'inputbox revienne
tant que l'utilisteur n'aura pas mis de nom ?
et en vraiment subsidiaire, existe t'il un moyen pour que le bouton "annuler
de l'inputbox ne soit pas apparent ?
grand merci d'avance pour l'attention que vous porterez à mon problème
Alain ROUSSEL
Bonjour.
Une petite recherche sur Google t'aurais donné ...
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
Const HCBT_ACTIVATE = &O5
Const SC_CLOSE = &HF060
Const MF_BYCOMMAND = &H0
Dim BWND As Long, MYSTR As String
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.
"alroussel" <alroussel@wanadoo.fr> a écrit dans le message de news: 3fc65816$0$26793$636a55ce@news.free.fr...
Bonsoir à tous,
Je fais encore à vous pour obtenir de l'aide.
je voudrais rendre obligatoire la réponse demandée par un inputbox, c'est-a
dire que tant que l'utilisateur n'aurait pas répondu, chaque fois l'inputbox
réapparaitrais et la suite de la macro ne se déroulerait pas.
voici la partie de la macro concernée:
zzzz = InputBox("IMPORTANT" _
& Chr(13) & "VOUS DEVEZ OBLIGATOIREMENT RENOMMER CETTE FEUILLE" _
& Chr(13) & Chr(13) & "Indiquer ci-dessous le nom choisi" _
& Chr(13) & "(choix libre)", "Listing")
If zzzz = "" Then
MsgBox "VOUS DEVEZ OBLIGATOIREMENT METTRE UN NOM"
...................
End If
Quelle instruction mettre vant le "end if " pour que l'inputbox revienne
tant que l'utilisteur n'aura pas mis de nom ?
et en vraiment subsidiaire, existe t'il un moyen pour que le bouton "annuler
de l'inputbox ne soit pas apparent ?
grand merci d'avance pour l'attention que vous porterez à mon problème
Alain ROUSSEL
Bonjour.
Une petite recherche sur Google t'aurais donné ...
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
Const HCBT_ACTIVATE = &O5
Const SC_CLOSE = &HF060
Const MF_BYCOMMAND = &H0
Dim BWND As Long, MYSTR As String
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.
"alroussel" a écrit dans le message de news: 3fc65816$0$26793$Bonsoir à tous,
Je fais encore à vous pour obtenir de l'aide.
je voudrais rendre obligatoire la réponse demandée par un inputbox, c'est-a
dire que tant que l'utilisateur n'aurait pas répondu, chaque fois l'inputbox
réapparaitrais et la suite de la macro ne se déroulerait pas.
voici la partie de la macro concernée:
zzzz = InputBox("IMPORTANT" _
& Chr(13) & "VOUS DEVEZ OBLIGATOIREMENT RENOMMER CETTE FEUILLE" _
& Chr(13) & Chr(13) & "Indiquer ci-dessous le nom choisi" _
& Chr(13) & "(choix libre)", "Listing")
If zzzz = "" Then
MsgBox "VOUS DEVEZ OBLIGATOIREMENT METTRE UN NOM"
...................
End If
Quelle instruction mettre vant le "end if " pour que l'inputbox revienne
tant que l'utilisteur n'aura pas mis de nom ?
et en vraiment subsidiaire, existe t'il un moyen pour que le bouton "annuler
de l'inputbox ne soit pas apparent ?
grand merci d'avance pour l'attention que vous porterez à mon problème
Alain ROUSSEL
Bonsoir à tous,
Je fais encore à vous pour obtenir de l'aide.
je voudrais rendre obligatoire la réponse demandée par un inputbox,
c'est-a
dire que tant que l'utilisateur n'aurait pas répondu, chaque fois
l'inputbox
réapparaitrais et la suite de la macro ne se déroulerait pas.
voici la partie de la macro concernée:
zzzz = InputBox("IMPORTANT" _
& Chr(13) & "VOUS DEVEZ OBLIGATOIREMENT RENOMMER CETTE FEUILLE" _
& Chr(13) & Chr(13) & "Indiquer ci-dessous le nom choisi" _
& Chr(13) & "(choix libre)", "Listing")
If zzzz = "" Then
MsgBox "VOUS DEVEZ OBLIGATOIREMENT METTRE UN NOM"
...................
End If
Quelle instruction mettre vant le "end if " pour que l'inputbox revienne
tant que l'utilisteur n'aura pas mis de nom ?
et en vraiment subsidiaire, existe t'il un moyen pour que le bouton
"annuler
de l'inputbox ne soit pas apparent ?
grand merci d'avance pour l'attention que vous porterez à mon problème
Alain ROUSSEL
Bonsoir à tous,
Je fais encore à vous pour obtenir de l'aide.
je voudrais rendre obligatoire la réponse demandée par un inputbox,
c'est-a
dire que tant que l'utilisateur n'aurait pas répondu, chaque fois
l'inputbox
réapparaitrais et la suite de la macro ne se déroulerait pas.
voici la partie de la macro concernée:
zzzz = InputBox("IMPORTANT" _
& Chr(13) & "VOUS DEVEZ OBLIGATOIREMENT RENOMMER CETTE FEUILLE" _
& Chr(13) & Chr(13) & "Indiquer ci-dessous le nom choisi" _
& Chr(13) & "(choix libre)", "Listing")
If zzzz = "" Then
MsgBox "VOUS DEVEZ OBLIGATOIREMENT METTRE UN NOM"
...................
End If
Quelle instruction mettre vant le "end if " pour que l'inputbox revienne
tant que l'utilisteur n'aura pas mis de nom ?
et en vraiment subsidiaire, existe t'il un moyen pour que le bouton
"annuler
de l'inputbox ne soit pas apparent ?
grand merci d'avance pour l'attention que vous porterez à mon problème
Alain ROUSSEL
Bonsoir à tous,
Je fais encore à vous pour obtenir de l'aide.
je voudrais rendre obligatoire la réponse demandée par un inputbox,
c'est-a
dire que tant que l'utilisateur n'aurait pas répondu, chaque fois
l'inputbox
réapparaitrais et la suite de la macro ne se déroulerait pas.
voici la partie de la macro concernée:
zzzz = InputBox("IMPORTANT" _
& Chr(13) & "VOUS DEVEZ OBLIGATOIREMENT RENOMMER CETTE FEUILLE" _
& Chr(13) & Chr(13) & "Indiquer ci-dessous le nom choisi" _
& Chr(13) & "(choix libre)", "Listing")
If zzzz = "" Then
MsgBox "VOUS DEVEZ OBLIGATOIREMENT METTRE UN NOM"
...................
End If
Quelle instruction mettre vant le "end if " pour que l'inputbox revienne
tant que l'utilisteur n'aura pas mis de nom ?
et en vraiment subsidiaire, existe t'il un moyen pour que le bouton
"annuler
de l'inputbox ne soit pas apparent ?
grand merci d'avance pour l'attention que vous porterez à mon problème
Alain ROUSSEL
Bonsoir,
De mon point de vue, InputBox est un héritage des anciens Basic dont il
vaut mieux se passer.
InputBox manque de souplesse :
http://www.gaboly.com/VBA/VBMAJPLafond.html
Nous disposons maintenant des UserForms, qui permettent de gérer les
événements, contrairement aux InputBoxes.
Un UserForm avec un seul bouton OK et un contrôle de saisie,
http://www.gaboly.com/VBA/FonctionControle.html
C'est effectivement plus long de construire un UserForm, mais une fois
que c'est fait, il est facile de l'adapter pour remplacer n'importe quel
InputBox. Rien n'empêche de toujours utiliser le même UserForm,
en utilisant une variable pour le texte à afficher.
Cela me paraît beaucoup moins lourd que l'emploi de diverses librairies
"user32" , réservées aux versions d'Excel PC de surcroît.Bonjour.
Une petite recherche sur Google t'aurais donné ...
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
Const HCBT_ACTIVATE = &O5
Const SC_CLOSE = &HF060
Const MF_BYCOMMAND = &H0
Dim BWND As Long, MYSTR As String
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.
"alroussel" a écrit dans le message de news: 3fc65816$0$26793$Bonsoir à tous,
Je fais encore à vous pour obtenir de l'aide.
je voudrais rendre obligatoire la réponse demandée par un inputbox, c'est-a
dire que tant que l'utilisateur n'aurait pas répondu, chaque fois l'inputbox
réapparaitrais et la suite de la macro ne se déroulerait pas.
voici la partie de la macro concernée:
zzzz = InputBox("IMPORTANT" _
& Chr(13) & "VOUS DEVEZ OBLIGATOIREMENT RENOMMER CETTE FEUILLE" _
& Chr(13) & Chr(13) & "Indiquer ci-dessous le nom choisi" _
& Chr(13) & "(choix libre)", "Listing")
If zzzz = "" Then
MsgBox "VOUS DEVEZ OBLIGATOIREMENT METTRE UN NOM"
...................
End If
Quelle instruction mettre vant le "end if " pour que l'inputbox revienne
tant que l'utilisteur n'aura pas mis de nom ?
et en vraiment subsidiaire, existe t'il un moyen pour que le bouton "annuler
de l'inputbox ne soit pas apparent ?
grand merci d'avance pour l'attention que vous porterez à mon problème
Alain ROUSSEL
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Bonsoir,
De mon point de vue, InputBox est un héritage des anciens Basic dont il
vaut mieux se passer.
InputBox manque de souplesse :
http://www.gaboly.com/VBA/VBMAJPLafond.html
Nous disposons maintenant des UserForms, qui permettent de gérer les
événements, contrairement aux InputBoxes.
Un UserForm avec un seul bouton OK et un contrôle de saisie,
http://www.gaboly.com/VBA/FonctionControle.html
C'est effectivement plus long de construire un UserForm, mais une fois
que c'est fait, il est facile de l'adapter pour remplacer n'importe quel
InputBox. Rien n'empêche de toujours utiliser le même UserForm,
en utilisant une variable pour le texte à afficher.
Cela me paraît beaucoup moins lourd que l'emploi de diverses librairies
"user32" , réservées aux versions d'Excel PC de surcroît.
Bonjour.
Une petite recherche sur Google t'aurais donné ...
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
Const HCBT_ACTIVATE = &O5
Const SC_CLOSE = &HF060
Const MF_BYCOMMAND = &H0
Dim BWND As Long, MYSTR As String
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.
"alroussel" <alroussel@wanadoo.fr> a écrit dans le message de news: 3fc65816$0$26793$636a55ce@news.free.fr...
Bonsoir à tous,
Je fais encore à vous pour obtenir de l'aide.
je voudrais rendre obligatoire la réponse demandée par un inputbox, c'est-a
dire que tant que l'utilisateur n'aurait pas répondu, chaque fois l'inputbox
réapparaitrais et la suite de la macro ne se déroulerait pas.
voici la partie de la macro concernée:
zzzz = InputBox("IMPORTANT" _
& Chr(13) & "VOUS DEVEZ OBLIGATOIREMENT RENOMMER CETTE FEUILLE" _
& Chr(13) & Chr(13) & "Indiquer ci-dessous le nom choisi" _
& Chr(13) & "(choix libre)", "Listing")
If zzzz = "" Then
MsgBox "VOUS DEVEZ OBLIGATOIREMENT METTRE UN NOM"
...................
End If
Quelle instruction mettre vant le "end if " pour que l'inputbox revienne
tant que l'utilisteur n'aura pas mis de nom ?
et en vraiment subsidiaire, existe t'il un moyen pour que le bouton "annuler
de l'inputbox ne soit pas apparent ?
grand merci d'avance pour l'attention que vous porterez à mon problème
Alain ROUSSEL
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Bonsoir,
De mon point de vue, InputBox est un héritage des anciens Basic dont il
vaut mieux se passer.
InputBox manque de souplesse :
http://www.gaboly.com/VBA/VBMAJPLafond.html
Nous disposons maintenant des UserForms, qui permettent de gérer les
événements, contrairement aux InputBoxes.
Un UserForm avec un seul bouton OK et un contrôle de saisie,
http://www.gaboly.com/VBA/FonctionControle.html
C'est effectivement plus long de construire un UserForm, mais une fois
que c'est fait, il est facile de l'adapter pour remplacer n'importe quel
InputBox. Rien n'empêche de toujours utiliser le même UserForm,
en utilisant une variable pour le texte à afficher.
Cela me paraît beaucoup moins lourd que l'emploi de diverses librairies
"user32" , réservées aux versions d'Excel PC de surcroît.Bonjour.
Une petite recherche sur Google t'aurais donné ...
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
Const HCBT_ACTIVATE = &O5
Const SC_CLOSE = &HF060
Const MF_BYCOMMAND = &H0
Dim BWND As Long, MYSTR As String
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.
"alroussel" a écrit dans le message de news: 3fc65816$0$26793$Bonsoir à tous,
Je fais encore à vous pour obtenir de l'aide.
je voudrais rendre obligatoire la réponse demandée par un inputbox, c'est-a
dire que tant que l'utilisateur n'aurait pas répondu, chaque fois l'inputbox
réapparaitrais et la suite de la macro ne se déroulerait pas.
voici la partie de la macro concernée:
zzzz = InputBox("IMPORTANT" _
& Chr(13) & "VOUS DEVEZ OBLIGATOIREMENT RENOMMER CETTE FEUILLE" _
& Chr(13) & Chr(13) & "Indiquer ci-dessous le nom choisi" _
& Chr(13) & "(choix libre)", "Listing")
If zzzz = "" Then
MsgBox "VOUS DEVEZ OBLIGATOIREMENT METTRE UN NOM"
...................
End If
Quelle instruction mettre vant le "end if " pour que l'inputbox revienne
tant que l'utilisteur n'aura pas mis de nom ?
et en vraiment subsidiaire, existe t'il un moyen pour que le bouton "annuler
de l'inputbox ne soit pas apparent ?
grand merci d'avance pour l'attention que vous porterez à mon problème
Alain ROUSSEL
--
Cordialement,
Michel Gaboly
http://www.gaboly.com