OVH Cloud OVH Cloud

VBComponents

8 réponses
Avatar
John Fuss
Salut à tous,

j'ai récupéré une API qui supprimer la crois de fermeture d'une UserForm
passée en paramêtre. Je voudrai adapter une fonction pour que toutes les UF
de mon projets soient traitées par cette API. Voici les codes utiles :

Private Declare Function GetWindowLongA Lib "User32" (ByVal hWnd As Long,
ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib "User32" (ByVal hWnd As Long,
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function FindWindowA Lib "User32" (ByVal lpClassName As
String, ByVal lpWindowName As String) As Long

'Fonction qui passe pas à cause du
ThisWorkbook.VBProject.VBComponents(i).Properties("Caption")....
Public Sub HideX() As Integer
Dim hWnd As Long, i As Integer, USF As UserForm

For i = 1 To ThisWorkbook.VBProject.VBComponents.Count
If ThisWorkbook.VBProject.VBComponents(i).Type = vbext_ct_MSForm
Then
Set USF = ThisWorkbook.VBProject.VBComponents(i).DesignerWindow
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like
"8*", "X", "D") & "Frame",
ThisWorkbook.VBProject.VBComponents(i).Properties("Caption"))
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like
"8*", "X", "D") & "Frame", USF.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And
&HFFF7FFFF
End If
Next
End Function

'Fonction qui marche....
Sub SupprimerFermeture(USF As UserForm)
Dim hWnd As Long
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*","X",
"D") & "Frame", USF.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
End Sub


Merci d'avance.

John

8 réponses

Avatar
michdenis
Bonjour John,

Pourquoi ne pas mettre le bout de la procédure dans l'événement Userform_Initialisze() de chaque formulaire ? Il y
a-t-il une interdiction quelconque ?


Salutations!




"John Fuss" a écrit dans le message de news:ccu8di$vfs$
Salut à tous,

j'ai récupéré une API qui supprimer la crois de fermeture d'une UserForm
passée en paramêtre. Je voudrai adapter une fonction pour que toutes les UF
de mon projets soient traitées par cette API. Voici les codes utiles :

Private Declare Function GetWindowLongA Lib "User32" (ByVal hWnd As Long,
ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib "User32" (ByVal hWnd As Long,
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function FindWindowA Lib "User32" (ByVal lpClassName As
String, ByVal lpWindowName As String) As Long

'Fonction qui passe pas à cause du
ThisWorkbook.VBProject.VBComponents(i).Properties("Caption")....
Public Sub HideX() As Integer
Dim hWnd As Long, i As Integer, USF As UserForm

For i = 1 To ThisWorkbook.VBProject.VBComponents.Count
If ThisWorkbook.VBProject.VBComponents(i).Type = vbext_ct_MSForm
Then
Set USF = ThisWorkbook.VBProject.VBComponents(i).DesignerWindow
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like
"8*", "X", "D") & "Frame",
ThisWorkbook.VBProject.VBComponents(i).Properties("Caption"))
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like
"8*", "X", "D") & "Frame", USF.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And
&HFFF7FFFF
End If
Next
End Function

'Fonction qui marche....
Sub SupprimerFermeture(USF As UserForm)
Dim hWnd As Long
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*","X",
"D") & "Frame", USF.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
End Sub


Merci d'avance.

John
Avatar
John Fuss
Non, il n'y a pas de contre-indication, le collègue qui m'a 'donner' cette
API s'en sert de cette manière mais ayant déja systématiquement une fonction
que j'execute à chaque lancement de macros je voulais y rajouter une gestion
auto des UserForms avec l'API.

Je me mets en boucle pour attendre la réponse.

John

"michdenis" a écrit dans le message de
news:
Bonjour John,

Pourquoi ne pas mettre le bout de la procédure dans l'événement
Userform_Initialisze() de chaque formulaire ? Il y

a-t-il une interdiction quelconque ?


Salutations!




"John Fuss" a écrit dans le message de
news:ccu8di$vfs$

Salut à tous,

j'ai récupéré une API qui supprimer la crois de fermeture d'une UserForm
passée en paramêtre. Je voudrai adapter une fonction pour que toutes les
UF

de mon projets soient traitées par cette API. Voici les codes utiles :

Private Declare Function GetWindowLongA Lib "User32" (ByVal hWnd As Long,
ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib "User32" (ByVal hWnd As Long,
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function FindWindowA Lib "User32" (ByVal lpClassName As
String, ByVal lpWindowName As String) As Long

'Fonction qui passe pas à cause du
ThisWorkbook.VBProject.VBComponents(i).Properties("Caption")....
Public Sub HideX() As Integer
Dim hWnd As Long, i As Integer, USF As UserForm

For i = 1 To ThisWorkbook.VBProject.VBComponents.Count
If ThisWorkbook.VBProject.VBComponents(i).Type = vbext_ct_MSForm
Then
Set USF ThisWorkbook.VBProject.VBComponents(i).DesignerWindow
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like
"8*", "X", "D") & "Frame",
ThisWorkbook.VBProject.VBComponents(i).Properties("Caption"))
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like
"8*", "X", "D") & "Frame", USF.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And
&HFFF7FFFF
End If
Next
End Function

'Fonction qui marche....
Sub SupprimerFermeture(USF As UserForm)
Dim hWnd As Long
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*","X",
"D") & "Frame", USF.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
End Sub


Merci d'avance.

John





Avatar
Misange
Bonjour
La réponse de laurent Longre à ta question :
http://www.excelabo.net/xl/userforms.php#croixuser (avec un exemple à
télécharger.
Une simple ligne de code dans chaque userform_initialize :
SupprimerFermeture Me
qui fait appel à la macro placée dans un module ordinaire

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 13/07/2004 09:21:
Non, il n'y a pas de contre-indication, le collègue qui m'a 'donner' cette
API s'en sert de cette manière mais ayant déja systématiquement une fonction
que j'execute à chaque lancement de macros je voulais y rajouter une gestion
auto des UserForms avec l'API.

Je me mets en boucle pour attendre la réponse.

John

"michdenis" a écrit dans le message de
news:

Bonjour John,

Pourquoi ne pas mettre le bout de la procédure dans l'événement


Userform_Initialisze() de chaque formulaire ? Il y

a-t-il une interdiction quelconque ?


Salutations!




"John Fuss" a écrit dans le message de


news:ccu8di$vfs$

Salut à tous,

j'ai récupéré une API qui supprimer la crois de fermeture d'une UserForm
passée en paramêtre. Je voudrai adapter une fonction pour que toutes les


UF

de mon projets soient traitées par cette API. Voici les codes utiles :

Private Declare Function GetWindowLongA Lib "User32" (ByVal hWnd As Long,
ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib "User32" (ByVal hWnd As Long,
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function FindWindowA Lib "User32" (ByVal lpClassName As
String, ByVal lpWindowName As String) As Long

'Fonction qui passe pas à cause du
ThisWorkbook.VBProject.VBComponents(i).Properties("Caption")....
Public Sub HideX() As Integer
Dim hWnd As Long, i As Integer, USF As UserForm

For i = 1 To ThisWorkbook.VBProject.VBComponents.Count
If ThisWorkbook.VBProject.VBComponents(i).Type = vbext_ct_MSForm
Then
Set USF >
ThisWorkbook.VBProject.VBComponents(i).DesignerWindow


hWnd = FindWindowA("Thunder" & IIf(Application.Version Like
"8*", "X", "D") & "Frame",
ThisWorkbook.VBProject.VBComponents(i).Properties("Caption"))
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like
"8*", "X", "D") & "Frame", USF.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And
&HFFF7FFFF
End If
Next
End Function

'Fonction qui marche....
Sub SupprimerFermeture(USF As UserForm)
Dim hWnd As Long
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*","X",
"D") & "Frame", USF.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
End Sub


Merci d'avance.

John










Avatar
John Fuss
Je suis parti de cette fonction, mais je voudrai que ça se fasse directement
pour toutes les UserForms de mon projet.

John

"Misange" a écrit dans le message de
news:
Bonjour
La réponse de laurent Longre à ta question :
http://www.excelabo.net/xl/userforms.php#croixuser (avec un exemple à
télécharger.
Une simple ligne de code dans chaque userform_initialize :
SupprimerFermeture Me
qui fait appel à la macro placée dans un module ordinaire

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 13/07/2004 09:21:
Non, il n'y a pas de contre-indication, le collègue qui m'a 'donner'
cette


API s'en sert de cette manière mais ayant déja systématiquement une
fonction


que j'execute à chaque lancement de macros je voulais y rajouter une
gestion


auto des UserForms avec l'API.

Je me mets en boucle pour attendre la réponse.

John

"michdenis" a écrit dans le message de
news:

Bonjour John,

Pourquoi ne pas mettre le bout de la procédure dans l'événement


Userform_Initialisze() de chaque formulaire ? Il y

a-t-il une interdiction quelconque ?


Salutations!




"John Fuss" a écrit dans le message de


news:ccu8di$vfs$

Salut à tous,

j'ai récupéré une API qui supprimer la crois de fermeture d'une UserForm
passée en paramêtre. Je voudrai adapter une fonction pour que toutes les


UF

de mon projets soient traitées par cette API. Voici les codes utiles :

Private Declare Function GetWindowLongA Lib "User32" (ByVal hWnd As
Long,



ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib "User32" (ByVal hWnd As
Long,



ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function FindWindowA Lib "User32" (ByVal lpClassName As
String, ByVal lpWindowName As String) As Long

'Fonction qui passe pas à cause du
ThisWorkbook.VBProject.VBComponents(i).Properties("Caption")....
Public Sub HideX() As Integer
Dim hWnd As Long, i As Integer, USF As UserForm

For i = 1 To ThisWorkbook.VBProject.VBComponents.Count
If ThisWorkbook.VBProject.VBComponents(i).Type = vbext_ct_MSForm
Then
Set USF > >
ThisWorkbook.VBProject.VBComponents(i).DesignerWindow


hWnd = FindWindowA("Thunder" & IIf(Application.Version Like
"8*", "X", "D") & "Frame",
ThisWorkbook.VBProject.VBComponents(i).Properties("Caption"))
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like
"8*", "X", "D") & "Frame", USF.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And
&HFFF7FFFF
End If
Next
End Function

'Fonction qui marche....
Sub SupprimerFermeture(USF As UserForm)
Dim hWnd As Long
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like
"8*","X",



"D") & "Frame", USF.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
End Sub


Merci d'avance.

John












Avatar
Misange
Je ne comprends pas bien où est ton problème. J'utilise cette fonction
dans un de mes classeurs et toutes les croix de tous les userforms sont
bien inhibées juste en rajoutant l'instruction nécessaire dans le
userform_initialize. Qu'est ce que t'appelles "se faire directement" ?
Tu voudrais que par défaut tes userforms n'aient pas de croix ??? Si
c'est ça, je ne sais pas te répondre.

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 13/07/2004 14:32:
Je suis parti de cette fonction, mais je voudrai que ça se fasse directement
pour toutes les UserForms de mon projet.

John

"Misange" a écrit dans le message de
news:

Bonjour
La réponse de laurent Longre à ta question :
http://www.excelabo.net/xl/userforms.php#croixuser (avec un exemple à
télécharger.
Une simple ligne de code dans chaque userform_initialize :
SupprimerFermeture Me
qui fait appel à la macro placée dans un module ordinaire

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 13/07/2004 09:21:

Non, il n'y a pas de contre-indication, le collègue qui m'a 'donner'



cette

API s'en sert de cette manière mais ayant déja systématiquement une



fonction

que j'execute à chaque lancement de macros je voulais y rajouter une



gestion

auto des UserForms avec l'API.

Je me mets en boucle pour attendre la réponse.

John

"michdenis" a écrit dans le message de
news:


Bonjour John,

Pourquoi ne pas mettre le bout de la procédure dans l'événement


Userform_Initialisze() de chaque formulaire ? Il y


a-t-il une interdiction quelconque ?


Salutations!




"John Fuss" a écrit dans le message de


news:ccu8di$vfs$


Salut à tous,

j'ai récupéré une API qui supprimer la crois de fermeture d'une UserForm
passée en paramêtre. Je voudrai adapter une fonction pour que toutes les


UF


de mon projets soient traitées par cette API. Voici les codes utiles :

Private Declare Function GetWindowLongA Lib "User32" (ByVal hWnd As




Long,

ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib "User32" (ByVal hWnd As




Long,

ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function FindWindowA Lib "User32" (ByVal lpClassName As
String, ByVal lpWindowName As String) As Long

'Fonction qui passe pas à cause du
ThisWorkbook.VBProject.VBComponents(i).Properties("Caption")....
Public Sub HideX() As Integer
Dim hWnd As Long, i As Integer, USF As UserForm

For i = 1 To ThisWorkbook.VBProject.VBComponents.Count
If ThisWorkbook.VBProject.VBComponents(i).Type = vbext_ct_MSForm
Then
Set USF >>>
ThisWorkbook.VBProject.VBComponents(i).DesignerWindow



hWnd = FindWindowA("Thunder" & IIf(Application.Version Like
"8*", "X", "D") & "Frame",
ThisWorkbook.VBProject.VBComponents(i).Properties("Caption"))
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like
"8*", "X", "D") & "Frame", USF.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And
&HFFF7FFFF
End If
Next
End Function

'Fonction qui marche....
Sub SupprimerFermeture(USF As UserForm)
Dim hWnd As Long
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like




"8*","X",

"D") & "Frame", USF.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
End Sub


Merci d'avance.

John
















Avatar
John Fuss
Comment faire pour créer une fonction qui execute SupprimerFermeture() pour
chaque UserForm du classeur. J'ai certains classeurs avec 10 USF, je ne veux
pas avoir à mettre 'SupprimerFermeture Me' dans chaque userform_initialize
de chaque userForm.

Mais après quelques tests et une syntaxe trouvée sur le site de microsoft
(VBA.UserForms.Add ThisWorkbook.VBProject.VBComponents(i).name) je me suis
rendu compte qu'il fallait que les userforms soient chargée pour que l'API
SetWindowLongA fonctionne. Et du coup ça ne m'interesse pas de chargerr
toutes mes UserForms au chargement de la macro juste pour retirer les croix
de fermeture.

John




"Misange" a écrit dans le message de
news:
Je ne comprends pas bien où est ton problème. J'utilise cette fonction
dans un de mes classeurs et toutes les croix de tous les userforms sont
bien inhibées juste en rajoutant l'instruction nécessaire dans le
userform_initialize. Qu'est ce que t'appelles "se faire directement" ?
Tu voudrais que par défaut tes userforms n'aient pas de croix ??? Si
c'est ça, je ne sais pas te répondre.

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 13/07/2004 14:32:
Je suis parti de cette fonction, mais je voudrai que ça se fasse
directement


pour toutes les UserForms de mon projet.

John

"Misange" a écrit dans le message de
news:

Bonjour
La réponse de laurent Longre à ta question :
http://www.excelabo.net/xl/userforms.php#croixuser (avec un exemple à
télécharger.
Une simple ligne de code dans chaque userform_initialize :
SupprimerFermeture Me
qui fait appel à la macro placée dans un module ordinaire

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 13/07/2004 09:21:

Non, il n'y a pas de contre-indication, le collègue qui m'a 'donner'



cette

API s'en sert de cette manière mais ayant déja systématiquement une



fonction

que j'execute à chaque lancement de macros je voulais y rajouter une



gestion

auto des UserForms avec l'API.

Je me mets en boucle pour attendre la réponse.

John

"michdenis" a écrit dans le message de
news:


Bonjour John,

Pourquoi ne pas mettre le bout de la procédure dans l'événement


Userform_Initialisze() de chaque formulaire ? Il y


a-t-il une interdiction quelconque ?


Salutations!




"John Fuss" a écrit dans le message de


news:ccu8di$vfs$


Salut à tous,

j'ai récupéré une API qui supprimer la crois de fermeture d'une
UserForm





passée en paramêtre. Je voudrai adapter une fonction pour que toutes
les






UF


de mon projets soient traitées par cette API. Voici les codes utiles :

Private Declare Function GetWindowLongA Lib "User32" (ByVal hWnd As




Long,

ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib "User32" (ByVal hWnd As




Long,

ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function FindWindowA Lib "User32" (ByVal lpClassName
As





String, ByVal lpWindowName As String) As Long

'Fonction qui passe pas à cause du
ThisWorkbook.VBProject.VBComponents(i).Properties("Caption")....
Public Sub HideX() As Integer
Dim hWnd As Long, i As Integer, USF As UserForm

For i = 1 To ThisWorkbook.VBProject.VBComponents.Count
If ThisWorkbook.VBProject.VBComponents(i).Type vbext_ct_MSForm
Then
Set USF > >>>
ThisWorkbook.VBProject.VBComponents(i).DesignerWindow



hWnd = FindWindowA("Thunder" & IIf(Application.Version Like
"8*", "X", "D") & "Frame",
ThisWorkbook.VBProject.VBComponents(i).Properties("Caption"))
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like
"8*", "X", "D") & "Frame", USF.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And
&HFFF7FFFF
End If
Next
End Function

'Fonction qui marche....
Sub SupprimerFermeture(USF As UserForm)
Dim hWnd As Long
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like




"8*","X",

"D") & "Frame", USF.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
End Sub


Merci d'avance.

John


















Avatar
Misange
Si je comprends bien, tes userforms sont déjà créés et tu voudrais
rajouter cette instruction ?
Pourquoi ne pas faire cela par macro ? Une macro qui irait chercher tous
les classeurs à modifier, rechercherait toutes les mcros truc_initialize
(si tu n'as pas d'autres _initialize() dans tes classeurs c'est sur que
c'est plus facile ...) et qui collerait la phrase magique ?

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

le 16/07/2004 09:36:
Comment faire pour créer une fonction qui execute SupprimerFermeture() pour
chaque UserForm du classeur. J'ai certains classeurs avec 10 USF, je ne veux
pas avoir à mettre 'SupprimerFermeture Me' dans chaque userform_initialize
de chaque userForm.

Mais après quelques tests et une syntaxe trouvée sur le site de microsoft
(VBA.UserForms.Add ThisWorkbook.VBProject.VBComponents(i).name) je me suis
rendu compte qu'il fallait que les userforms soient chargée pour que l'API
SetWindowLongA fonctionne. Et du coup ça ne m'interesse pas de chargerr
toutes mes UserForms au chargement de la macro juste pour retirer les croix
de fermeture.

John




"Misange" a écrit dans le message de
news:

Je ne comprends pas bien où est ton problème. J'utilise cette fonction
dans un de mes classeurs et toutes les croix de tous les userforms sont
bien inhibées juste en rajoutant l'instruction nécessaire dans le
userform_initialize. Qu'est ce que t'appelles "se faire directement" ?
Tu voudrais que par défaut tes userforms n'aient pas de croix ??? Si
c'est ça, je ne sais pas te répondre.

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 13/07/2004 14:32:

Je suis parti de cette fonction, mais je voudrai que ça se fasse



directement

pour toutes les UserForms de mon projet.

John

"Misange" a écrit dans le message de
news:


Bonjour
La réponse de laurent Longre à ta question :
http://www.excelabo.net/xl/userforms.php#croixuser (avec un exemple à
télécharger.
Une simple ligne de code dans chaque userform_initialize :
SupprimerFermeture Me
qui fait appel à la macro placée dans un module ordinaire

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 13/07/2004 09:21:


Non, il n'y a pas de contre-indication, le collègue qui m'a 'donner'



cette


API s'en sert de cette manière mais ayant déja systématiquement une



fonction


que j'execute à chaque lancement de macros je voulais y rajouter une



gestion


auto des UserForms avec l'API.

Je me mets en boucle pour attendre la réponse.

John

"michdenis" a écrit dans le message de
news:



Bonjour John,

Pourquoi ne pas mettre le bout de la procédure dans l'événement


Userform_Initialisze() de chaque formulaire ? Il y



a-t-il une interdiction quelconque ?


Salutations!




"John Fuss" a écrit dans le message de


news:ccu8di$vfs$



Salut à tous,

j'ai récupéré une API qui supprimer la crois de fermeture d'une






UserForm

passée en paramêtre. Je voudrai adapter une fonction pour que toutes






les

UF



de mon projets soient traitées par cette API. Voici les codes utiles :

Private Declare Function GetWindowLongA Lib "User32" (ByVal hWnd As




Long,


ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib "User32" (ByVal hWnd As




Long,


ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function FindWindowA Lib "User32" (ByVal lpClassName






As

String, ByVal lpWindowName As String) As Long

'Fonction qui passe pas à cause du
ThisWorkbook.VBProject.VBComponents(i).Properties("Caption")....
Public Sub HideX() As Integer
Dim hWnd As Long, i As Integer, USF As UserForm

For i = 1 To ThisWorkbook.VBProject.VBComponents.Count
If ThisWorkbook.VBProject.VBComponents(i).Type >
vbext_ct_MSForm






Then
Set USF >>>>>
ThisWorkbook.VBProject.VBComponents(i).DesignerWindow




hWnd = FindWindowA("Thunder" & IIf(Application.Version Like
"8*", "X", "D") & "Frame",
ThisWorkbook.VBProject.VBComponents(i).Properties("Caption"))
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like
"8*", "X", "D") & "Frame", USF.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And
&HFFF7FFFF
End If
Next
End Function

'Fonction qui marche....
Sub SupprimerFermeture(USF As UserForm)
Dim hWnd As Long
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like




"8*","X",


"D") & "Frame", USF.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
End Sub


Merci d'avance.

John





















Avatar
John Fuss
C'est exactement ce à quoi j'avais pensé, mettre à jour le code des
userForms de tous mes classeurs. Merci bien.

John

"Misange" a écrit dans le message de
news:
Si je comprends bien, tes userforms sont déjà créés et tu voudrais
rajouter cette instruction ?
Pourquoi ne pas faire cela par macro ? Une macro qui irait chercher tous
les classeurs à modifier, rechercherait toutes les mcros truc_initialize
(si tu n'as pas d'autres _initialize() dans tes classeurs c'est sur que
c'est plus facile ...) et qui collerait la phrase magique ?

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

le 16/07/2004 09:36:
Comment faire pour créer une fonction qui execute SupprimerFermeture()
pour


chaque UserForm du classeur. J'ai certains classeurs avec 10 USF, je ne
veux


pas avoir à mettre 'SupprimerFermeture Me' dans chaque
userform_initialize


de chaque userForm.

Mais après quelques tests et une syntaxe trouvée sur le site de
microsoft


(VBA.UserForms.Add ThisWorkbook.VBProject.VBComponents(i).name) je me
suis


rendu compte qu'il fallait que les userforms soient chargée pour que
l'API


SetWindowLongA fonctionne. Et du coup ça ne m'interesse pas de chargerr
toutes mes UserForms au chargement de la macro juste pour retirer les
croix


de fermeture.

John




"Misange" a écrit dans le message de
news:

Je ne comprends pas bien où est ton problème. J'utilise cette fonction
dans un de mes classeurs et toutes les croix de tous les userforms sont
bien inhibées juste en rajoutant l'instruction nécessaire dans le
userform_initialize. Qu'est ce que t'appelles "se faire directement" ?
Tu voudrais que par défaut tes userforms n'aient pas de croix ??? Si
c'est ça, je ne sais pas te répondre.

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 13/07/2004 14:32:

Je suis parti de cette fonction, mais je voudrai que ça se fasse



directement

pour toutes les UserForms de mon projet.

John

"Misange" a écrit dans le message de
news:


Bonjour
La réponse de laurent Longre à ta question :
http://www.excelabo.net/xl/userforms.php#croixuser (avec un exemple à
télécharger.
Une simple ligne de code dans chaque userform_initialize :
SupprimerFermeture Me
qui fait appel à la macro placée dans un module ordinaire

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 13/07/2004 09:21:


Non, il n'y a pas de contre-indication, le collègue qui m'a 'donner'



cette


API s'en sert de cette manière mais ayant déja systématiquement une



fonction


que j'execute à chaque lancement de macros je voulais y rajouter une



gestion


auto des UserForms avec l'API.

Je me mets en boucle pour attendre la réponse.

John

"michdenis" a écrit dans le message de
news:



Bonjour John,

Pourquoi ne pas mettre le bout de la procédure dans l'événement


Userform_Initialisze() de chaque formulaire ? Il y



a-t-il une interdiction quelconque ?


Salutations!




"John Fuss" a écrit dans le message de


news:ccu8di$vfs$



Salut à tous,

j'ai récupéré une API qui supprimer la crois de fermeture d'une






UserForm

passée en paramêtre. Je voudrai adapter une fonction pour que toutes






les

UF



de mon projets soient traitées par cette API. Voici les codes utiles
:








Private Declare Function GetWindowLongA Lib "User32" (ByVal hWnd As




Long,


ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib "User32" (ByVal hWnd As




Long,


ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function FindWindowA Lib "User32" (ByVal lpClassName






As

String, ByVal lpWindowName As String) As Long

'Fonction qui passe pas à cause du
ThisWorkbook.VBProject.VBComponents(i).Properties("Caption")....
Public Sub HideX() As Integer
Dim hWnd As Long, i As Integer, USF As UserForm

For i = 1 To ThisWorkbook.VBProject.VBComponents.Count
If ThisWorkbook.VBProject.VBComponents(i).Type > >
vbext_ct_MSForm






Then
Set USF > >>>>>
ThisWorkbook.VBProject.VBComponents(i).DesignerWindow




hWnd = FindWindowA("Thunder" & IIf(Application.Version
Like







"8*", "X", "D") & "Frame",
ThisWorkbook.VBProject.VBComponents(i).Properties("Caption"))
hWnd = FindWindowA("Thunder" & IIf(Application.Version
Like







"8*", "X", "D") & "Frame", USF.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And
&HFFF7FFFF
End If
Next
End Function

'Fonction qui marche....
Sub SupprimerFermeture(USF As UserForm)
Dim hWnd As Long
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like




"8*","X",


"D") & "Frame", USF.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
End Sub


Merci d'avance.

John