Microsoft 365 InputBox : ne pas afficher le haut

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous, re-le Forum,

Casse-neurones du dimanche lol
Peut-être (salaud que je suis lol), une question pour notre cher mapomme,
( 🤒j'en ai tout plein d'autres pour les dimanches matin à venir)

Sans passer par un UserForm, est-il possible de ne pas faire apparaître la "X" de l'InputBox ? :
1645978786897.png

J'ai cherché ... cherché... etc...
et pas trouvé :mad:

Merci à toutes et à tous,
lionel :)
 

Pièces jointes

  • 1645966492243.png
    1645966492243.png
    3.4 KB · Affichages: 149
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Je ne vois pas en quoi supprimer le title bar d'une InputBox facilite l'automatisation.
(Surtout si il faut ajouter du code VBA pour faire appel aux API Windows ou créer un Userform pour simuler un InputBox)
Mais c'est vrai que ce faisant on respecte le cahier des charges d'une usine à gaz.
(alourdir le classeur avec du code surnuméraire, rendre l'application potentiellement "instable "(cf PtrSafe 32bits/64bits))

🤣 Moi, j'aime bien les questions du Yoyo, parce que je sais pas comment vous dire, mais...

 

Staple1600

XLDnaute Barbatruc
Re

Pourquoi se compliquer la vie? ;)
VB:
Sub MDC()
Dim Bazinga As Variant
Bazinga = InputBox("Sans API, et sans me déflorer", "Lionel et ses lubies")
If Bazinga = vbNullString Then
MsgBox "Saisie obligatoire", vbCritical, "Achtung, Baby!!!"
Call Staple.MDC
End If
End Sub
NB: Faire la modification idoine pour que cela fonctionne ;)
 

Staple1600

XLDnaute Barbatruc
Bonjour Marcel32

En attendant personne (sauf moi) n'a testé le code du message#50?

NB: C'est bizarre, j'ai vu disparaitre un message de patricktoulon (avec plein d'API)
Du coup, je n'ai pas pu le tester.

=>Marcel32
Oui, mais moi je n'ai pas commis d'acte attentatoire à l'intégrité de l'InputBox. ;)
Et le but est bien de remplir l'inputBox sans pouvoir la fermer par la croix, non
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re

Pourquoi se compliquer la vie? ;)
VB:
Sub MDC()
Dim Bazinga As Variant
Bazinga = InputBox("Sans API, et sans me déflorer", "Lionel et ses lubies")
If Bazinga = vbNullString Then
MsgBox "Saisie obligatoire", vbCritical, "Achtung, Baby!!!"
Call Staple.MDC
End If
End Sub
NB: Faire la modification idoine pour que cela fonctionne ;)

@Staple1600 : je crois que ça ne fait pas 100 % la même chose. ;)

Toi tu boucles tant qu'on n'a rien saisi.
Yoyo, qu'on ai fait une saisi ou non, ne veut pas qu'on ferme par la croix.

Enfin... si j'ai bien compris.
exact mon poteau :)
 

patricktoulon

XLDnaute Barbatruc
je le remet le cas echeant
VB:
'event feuille
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If TimerID = 0 Then TimerID = SetTimer(0, 0, 50, AddressOf ShootbuttonCloseOfInputbox)
    Dim V$, nom$
    V = CStr(Target.value)
    If Not Intersect(Target, Range("a1:zz10000")) Is Nothing Then
        nom = InputBox("Saisir ou modifier", "", V)
        If StrPtr(nom) > 0 Then Target.value = nom
    End If

    
End Sub


'dans un module standard
'
'MODELE PATRICKTOULON
'======================================================
'       !! TEMPORISER LE VRAI MSGBOX DE VBA !!
'catégorie boite de dialogue
'Temporisation du vrai msgbox de vba
'Auteurs:patricktoulon sur exceldownload
'Version :1.0; de patricktoulon
'Utilisation des api setTimer et KillTimer
'======================================================
'adaptation sur inputbox pour lever le bouton dans la caption
Option Explicit
#If Win64 Then
    Declare PtrSafe Function SetTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr, ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As LongPtr
    Declare PtrSafe Function KillTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As Long) As Long
    Declare PtrSafe Function GetActiveWindow Lib "user32" () As LongPtr
    Declare PtrSafe Function SetWindowLongA Lib "user32" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
#Else
    Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As Long
    Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
    Declare Function GetActiveWindow Lib "user32" () As Long
    Declare Function SetWindowLongA Lib "user32" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
#End If
'Dim MsgBoxTitle
'Dim MsgBoxCloseD As Boolean
Public TimerID&



Public Sub ShootbuttonCloseOfInputbox()
    Dim hwnd As Long
    hwnd = GetActiveWindow
    SetWindowLongA hwnd, -16, &H94C00080
    If TimerID <> 0 Then KillTimer 0, TimerID: TimerID = 0:
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 364
Messages
2 087 624
Membres
103 624
dernier inscrit
PhilduMorvan