Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Contribuez
Contribuez Placez ici vos codes, sources, trucs et astuces que vous souhaitez partager avec les membres du club.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/07/2011, 12h44   #1
Expert Confirmé
 
Philippe Tulliez
Développeur et formateur VBA, Excel et Word.
Inscription : janvier 2010
Messages : 1 310
Détails du profil
Informations personnelles :
Nom : Philippe Tulliez
Localisation : Belgique

Informations professionnelles :
Activité : Développeur et formateur VBA, Excel et Word.

Informations forums :
Inscription : janvier 2010
Messages : 1 310
Points : 2 665
Points : 2 665
Par défaut VBA / UserForm - Positionnement automatique des boutons Ok & Cancel

Bonjour,
Agacé par le temps passé à positionner les boutons OK et Cancel de mes UserForm, j'avais il y a quelques temps développé une petite procédure qui gérait cela automatiquement.
Il y a deux jours, j'ai rajouté des constantes pour pouvoir mieux encore paramétrer cette procédure.
Je me suis dit que cela pourrait peut-être profiter à d'autres.
Voici donc le code.
Les boutons sont nommés cbOK et cbCancel
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Private Sub UserForm_Initialize()
 PosButton ' Positionne les boutons Ok/Cancel
End Sub
Private Sub cbOK_Click()
 ' Call Mise à jour données
 Unload Me
End Sub
Private Sub cbCancel_Click()
 Unload Me
End Sub
Private Sub PosButton()
 ' Positionnement automatique des boutons cbOk & cbCancel
 ' Philippe Tulliez - 2009/04/20
 ' Update
 ' 2011-07-27 - Ajouté constantes
 ' Const
 ' Title - Propriété Caption de UserForm
 ' Marge - distance entre btns et bord droit/bas de Userform
 ' bWidth - Largeur des boutons
 ' sOk & sCancel - Propriété Caption des btns
 Const Title As String = "Ecran Auto"
 Const Marge As Byte = 10
 Const bWidth As Byte = 60
 Const sOk As String = "Confirmer"
 Const sCancel As String = "Annuler"
 '
 With Me ' Init Button
 .Caption = Title
 .cbOK.Width = bWidth: .cbCancel.Width = bWidth
 .cbOK.Left = .Width - (Marge + .cbOK.Width)
 .cbOK.Top = .Height - (20 + Marge + .cbOK.Height)
 .cbCancel.Top = .Height - (20 + Marge + .cbCancel.Height)
 .cbCancel.Left = .Width - ((Marge + .cbOK.Width) + (Marge + .cbCancel.Width))
 .cbOK.Caption = sOk: .cbCancel.Caption = sCancel
 .cbOK.TabIndex = 0: .cbCancel.TabIndex = 1
 '.Caption = mVbGenFun.ExtName(ActiveDocument.AttachedTemplate) & " - " & mVbGenFun.ExtName(ActiveDocument.Name)
 End With
End Sub
Vos remarques et/ou suggestions sont les bienvenues
__________________
Philippe Tulliez
http://philippe.tulliez.be
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)

Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
corona est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/07/2011, 13h07   #2
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 620
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 620
Points : 30 954
Points : 30 954
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Salut Philippe

J'ai déjà réalisé ce genre de choses, mais sur Access pour avoir des paramètres propres à chaque utilisateur (notamment des couleurs).

Pour rendre ton code plus générique (dans le cas de plusieurs UserForm), je placerais la procédure PosButton dans un module et je passerai en paramètre le nom de l'UserForm au lieu d'utiliser le me qui est propre à l'UserForm qui contient le code.

Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/07/2011, 13h31   #3
Expert Confirmé
 
Philippe Tulliez
Développeur et formateur VBA, Excel et Word.
Inscription : janvier 2010
Messages : 1 310
Détails du profil
Informations personnelles :
Nom : Philippe Tulliez
Localisation : Belgique

Informations professionnelles :
Activité : Développeur et formateur VBA, Excel et Word.

Informations forums :
Inscription : janvier 2010
Messages : 1 310
Points : 2 665
Points : 2 665
Bonjour Philippe
Merci pour ton intervention qui est très pertinente.
En fait depuis quelques temps, j'ai tendance pour faciliter la portabilité des UserForm et la transparence du code, à placer les variables et modules propre à la UserForm dans celle-ci.
Ainsi, en important simplement le module frm, je peux faire tourner la UserForm sans avoir à me tracasser de l'importation d'autres modules.
De toute manière, je retiens cette suggestion et je vais placer un paramètre à ce module qui pourrait ainsi être placé soit dans l'objet UserForm lui-même soit dans un module extérieur.
Belle journée
Philippe
__________________
Philippe Tulliez
http://philippe.tulliez.be
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)

Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
corona est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/07/2011, 21h47   #4
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut heu

bonsoir corona et philippe jochmans


je rejoint l'idée de philippe pour une portabilité et utilisation pour plusieurs userforms

et pourquoi pas en faire un tout petit xla

et l'utilisé quand on veux

bien en tout cas ce petit module

bonsoir a tout les deux

au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 23h15   #5
Expert Confirmé
 
Philippe Tulliez
Développeur et formateur VBA, Excel et Word.
Inscription : janvier 2010
Messages : 1 310
Détails du profil
Informations personnelles :
Nom : Philippe Tulliez
Localisation : Belgique

Informations professionnelles :
Activité : Développeur et formateur VBA, Excel et Word.

Informations forums :
Inscription : janvier 2010
Messages : 1 310
Points : 2 665
Points : 2 665
Bonsoir Patrick,
Merci pour ton message.
J'ai donc adapté ma procédure qui peut indifféremment être placée dans un autre module ou dans le UserForm.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Option Explicit
Dim usf As ufStd
Private Sub UserForm_Initialize()
 ' Set usf = Me: mUsfModule.PosButton usf ' Si Procedure ds module mUsfModule
 Set usf = Me: Me.PosButton usf ' Si Préocédure ds la UserForm
End Sub
Private Sub cmdOk_Click()
 ' Call Mise à jour données
 Unload Me
End Sub
Private Sub cmdCancel_Click()
 Unload Me
End Sub
Sub PosButton(Frm)
 ' Positionnement automatique des boutons cmdOk & cmdCancel
 ' Philippe Tulliez - 2009/04/20
 ' Update
 ' 2011-07-27 - Ajouté constantes
 ' 2011-07-29 - Ajouté argument Frm
 ' Const
 ' Title - Propriété Caption de UserForm
 ' Marge - distance entre btns et bord droit/bas de Userform
 ' bWidth - Largeur des boutons
 ' sOk & sCancel - Propriété Caption des btns
 Const Title As String = "Ecran Auto"
 Const Marge As Byte = 10
 Const bWidth As Byte = 60
 Const sOk As String = "Confirmer"
 Const sCancel As String = "Annuler"
 '
 With Frm ' Init Button
 .Caption = Title
 .cmdOK.Width = bWidth: .cmdCancel.Width = bWidth
 .cmdOK.Left = .Width - (Marge + .cmdOK.Width)
 .cmdOK.Top = .Height - (20 + Marge + .cmdOK.Height)
 .cmdCancel.Top = .Height - (20 + Marge + .cmdCancel.Height)
 .cmdCancel.Left = .Width - ((Marge + .cmdOK.Width) + (Marge + .cmdCancel.Width))
 .cmdOK.Caption = sOk: .cmdCancel.Caption = sCancel
 .cmdOK.TabIndex = 0: .cmdCancel.TabIndex = 1
 '.Caption = mVbGenFun.ExtName(ActiveDocument.AttachedTemplate) & " - " & mVbGenFun.ExtName(ActiveDocument.Name)
 End With
End Sub
__________________
Philippe Tulliez
http://philippe.tulliez.be
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)

Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
corona est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2011, 02h16   #6
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut re

bonsoir corona


pour plus de clarté

dans le module de l'userform
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
Private Sub UserForm_Initialize()
 
     PosButton Me   'on appelle la procedure suivi de l'object userform a prendre en compte
End Sub
Private Sub cmdOk_Click()
' Call Mise à jour données
    Unload Me
End Sub
Private Sub cmdCancel_Click()
    Unload Me
End Sub
et dans le module standard

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
 
Option Explicit
 
 
 
Sub PosButton(Frm As Object)
' Positionnement automatique des boutons cmdOk & cmdCancel
' Philippe Tulliez - 2009/04/20
' Update
' 2011-07-27 - Ajouté constantes
' 2011-07-29 - Ajouté argument Frm
' Const
' Title - Propriété Caption de UserForm
' Marge - distance entre btns et bord droit/bas de Userform
' bWidth - Largeur des boutons
' sOk & sCancel - Propriété Caption des btns
    Const Title As String = "Ecran Auto"
    Const Marge As Byte = 10
    Const bWidth As Byte = 60
    Const sOk As String = "Confirmer"
    Const sCancel As String = "Annuler"
    '
    With Frm    ' Init Button
        .Caption = Title
        .cmdOk.Width = bWidth: .cmdCancel.Width = bWidth
        .cmdOk.Left = .Width - (Marge + .cmdOk.Width)
        .cmdOk.Top = .Height - (20 + Marge + .cmdOk.Height)
        .cmdCancel.Top = .Height - (20 + Marge + .cmdCancel.Height)
        .cmdCancel.Left = .Width - ((Marge + .cmdOk.Width) + (Marge + .cmdCancel.Width))
        .cmdOk.Caption = sOk: .cmdCancel.Caption = sCancel
        .cmdOk.TabIndex = 0: .cmdCancel.TabIndex = 1
        '.Caption = mVbGenFun.ExtName(ActiveDocument.AttachedTemplate) & " - " & mVbGenFun.ExtName(ActiveDocument.Name)
    End With
End Sub

au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/07/2011, 08h46   #7
Expert Confirmé
 
Philippe Tulliez
Développeur et formateur VBA, Excel et Word.
Inscription : janvier 2010
Messages : 1 310
Détails du profil
Informations personnelles :
Nom : Philippe Tulliez
Localisation : Belgique

Informations professionnelles :
Activité : Développeur et formateur VBA, Excel et Word.

Informations forums :
Inscription : janvier 2010
Messages : 1 310
Points : 2 665
Points : 2 665
Bonjour Patrick,
Merci pour tes suggestions
Pour l'argument du module PosButton(Frm As Object), je suis d'accord mais en fait je voulais le typer avec le nom de l'objet exact et je n'ai pas trouvé.
Je croyais naïvement placer frm as UserForm mais cela n'a pas fonctionné. Si tu connais le nom exact de l'objet je suis preneur.
Pour l'appel à la procédure, peut-être que pour les lecteurs cela aurait été plus clair de faire un simple appel PosButton Me. C'est ce que je fais quand la procédure est dans le même module mais lorsque qu'elle se trouve dans un autre module, je fais toujours précédé l'appel à la procédure par le nom du module.
Ainsi nomModule.nomProcédure argument me permet de voir immédiatement à la lecture de mon code où se trouve cette procédure.
Quand tu fais le débogage du code, c'est plus rapide quand tu as 5, 6 modules dans ton projet. Enfin pour moi, c'est plus clair.
Alors dans tu as enlevé Set usf = Me qui précédait l'appel à la procédure et là c'est une erreur.
Donc je dirais Set usf = Me: PosButton usf
Bonne journée.
__________________
Philippe Tulliez
http://philippe.tulliez.be
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)

Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
corona est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2011, 15h32   #8
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut re

bonjour

j'ai enlever car je n'est pas penser au reste de ton code
effectivement si cette variable te sert dans une autre fonction ou sub il peut être intéressant de la garder

maintenant si cette variable te sert rien que dans cette fonction il ne sert a rien d'avoir une variable public constamment en mémoire

faisant beaucoup de module classe je l'ai appris a mes dépends"trop de fuites mémoire

pour l'objet "userform" il est préférable d'utiliser "object" bien plus permissif que MSforms......

j'ai aussi remarquer que bien que dans ce cas précis c'est juste pouvait tout simplement planter c'est du chez moi a une mise a jour d'office

au plaisir d'en débattre si tu veux
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h12.


 
 
 
 
Partenaires

Hébergement Web