IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Discussion :

Redimensionnement automatique des controls dans un userform


Sujet :

VBA

  1. #21
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Légère ammélioration
    Bonjour a tous,

    Tout d'abord, un grand merci a pratricktoulon pour ce code fort utile.

    Cependant, je vous propose de déclarer les variable old_largeur, handle et old_hauteur en tant que Curency et non comme Long car cela limite les effets de l'arrondi des résultats des divisions : lancer le code et effectuer un redimensionnement continu a grande vitesse et voir la surprise...


    Bonne journée.


    Damienmeister.
      0  0

  2. #22
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour Damien meister

    cette contribution commence a dater tu en a des plus récentes qui sont beaucoup plus performantes cela dit je regarderais ca et en ferait une beaucoup plus simple

    merci pour ta contribution
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      0  1

  3. #23
    Futur Membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 9
    Points : 5
    Points
    5
    Par défaut userform redimensionnement
    Bonjour Patrick,

    Merci pour ce superbe travail, cela me permet de faire franchir un cap à mon outil !!

    Il me reste néanmoins plus qu'un problème que je n’arrive pas à identifier.

    Mon userform n'est composé que de label et de commandbutton. Pour une raison qui m’échappe, ils ne se redimensionnes pas avec le userform.
    Je suis donc obligé de tagger tous les label et commandbutton pour que redimensionnement s'effectue correctement (alors qu'ils on une caption !)

    Le fichier est presque parfait comme cela, mais c'est maintenant le texte des commandbuttons et labels qui reste dans la même police lors des redimensionnement de la fenêtre userform ??

    Je suis complétement perdu car mon code est exactement le même que le votre et je ne trouve pas le détail qui m’échappe.(surement car je ne comprend pas la totalité du code)

    Un petit coup de main serai le top.... Merci d'avance.

    Pierre
      0  0

  4. #24
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    envoie ton fichier sans les données confidentielles je regarderais
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      0  1

  5. #25
    Futur Membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Fichier de travail
    Voici mon fichier.

    Merci beaucoup pour la réponse.

    Pierre
      0  0

  6. #26
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour

    alors surprise chez moi ca fonctionne parfaitement bien

    il est fort possible que tu travaille avec un office 64 bit si c'est le cas il faut modifier les déclarations des apis

    ensuite le font size m'a donné du fil a retordre alors j'ai modifieé mon code

    voila change tout le code dans le module standard par celui ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    '**********************************************************************************************************************
    '*                                     CREATEUR :Patricktoulon Alias chamalin1@msn.com                               *
    '*                                                    DATE :23/09/2010                                                *
    '*                                       UTILISATION D'UNE SEULE API LE "USER32.DLL"                                  *
    '*                                    EXEMPLE DE USERFORM REDIMENTIONNABLE NOUVELLE VERSION                           *
    '*                                      LES CONTROLS SONT REDIMENTIONNES EN MEME TEMPS                                *
    '*                                               AINSI QUE LES FONT SIZE                                              *
    '**********************************************************************************************************************
     
    #If Win64 Then
       public Declare PtrSafe Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongLong
       Public Declare PtrSafe Function ShowWindow Lib "User32" (ByVal hWnd As LongLong, ByVal nCmdShow As LongLong) As LongLong
       Public Declare PtrSafe Function SWLg Lib "User32" Alias "SetWindowLongA" (ByVal hWnd As LongLong, ByVal nIndex As LongLong, ByVal dwNewLong As LongLong) As LongLong
     
    #Else
       'Public Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
       Public Declare Function ShowWindow Lib "User32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
       Public Declare Function SWLg Lib "User32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
     
    #End If
     
    #If VBA6 Then
        'si on travaille avec office 32 bits
        Public Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
        'Public Declare Function ShowWindow Lib "User32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
        'Public Declare Function SWLg Lib "User32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
     
    #ElseIf VBA7 Then
        'si on travaille avec office 64 bits
        public Declare PtrSafe Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
        Public Declare PtrSafe Function SWLg Lib "User32" Alias "SetWindowLongA" (ByVal hWnd As Longptr, ByVal nIndex As Long, ByVal dwNewLong As Long) As Longptr
        Public Declare PtrSafe Function ShowWindow Lib "User32" (ByVal hWnd As Longptr, ByVal nCmdShow As Longptr) As Longptr
     
    #End If
     
    Public old_largeur As Long, handle As Long, old_hauteur As Long, newhauteur As Single, newlargeur As Single
    Public Ctl As Object
     
     
     
    Sub trois_boutons(uf As Object)    'on va ajouter les deux boutons manquants et l'élasticité a l'userform
    '*****************************************************************
    '*ici on memorise les dimention de depart de l'userform          *
        old_largeur = uf.InsideWidth: old_hauteur = uf.InsideHeight    '*
    '*****************************************************************
    '***************************************************************************************************************
    ' ici on determine le handle                                                                                   *
        handle = FindWindow(vbNullString, uf.Caption)    '                                                         *
    ' ici on applique les changement (&H84CF0080= les trois bouton et l'elasticité)                                *
        SWLg handle, -16, &H84CF0080                                                                              '*
    '***************************************************************************************************************
    '***********************************************************************************************************************************************************
    'on memorise a l'interieur du tag du control ses propriétés ainsi que son son font size                                                                   '*
        For Each ctrl In uf.Controls                                                                                                                          '*
            ctrl.Tag = ctrl.Left & ";" & ctrl.Top & ";" & ctrl.Width & ";" & ctrl.Height                                                                      '*
            If TypeName(ctrl) <> "SpinButton" And TypeName(ctrl) <> "Image" And TypeName(ctrl) <> "ScrollBar" Then ctrl.Tag = ctrl.Tag & ";" & ctrl.Font.Size '*
        Next                                                                                                                                                  '*
    '***********************************************************************************************************************************************************
    End Sub
    Sub plein_ecran()
    ' on affiche le userform en plein ecran avec l'api showwindowa de la user32.dll  bien moins lourd que mes versions precedente de maximisation de l'userform et plus rapide et plus propre
    '1= mode normal:3 =maximiser:6 =minimiser
    'le handle du userform a été declaré en public au debut du module et  identifié dans la routine des trois boutons il n'est donc plus necessaire de l'identifier
    ShowWindow handle, 3
     
    End Sub
    Sub maForm_Resize(usf As UserForm)
    'ici on determine le multiplicateur qui differenci la dimention de base a celle actuelle de l'userform
        newlargeur = usf.InsideWidth / old_largeur: newhauteur = usf.InsideHeight / old_hauteur
        'ici on boucle sur tout les controls
        For Each Ctl In usf.Controls
            ppe = Split(Ctl.Tag, ";")    'on coupe le tag par les ";"
            'et on applique le multiplicateur au controls pour la largeur et la hauteur en une seule ligne
            Ctl.Move ppe(0) * newlargeur, ppe(1) * newhauteur, ppe(2) * newlargeur, ppe(3) * newhauteur
            'l'element(4) de ppe contient le font size du controls
            If UBound(ppe) = 4 Then Ctl.Font.Size = ppe(4) * newlargeur
        Next
    End Sub
    le code dans le userform n'a pas changer chez moi
    Comme tu peut le voir maintenant les déclarations des apis sont compatible en "32/64" bits

    j'ai aussi modifié le mode de traitement des propriétés des controls et surtout des fontsize afin que l'on ne soit pas obligé d'avoir un fontsize général et identique pour tous

    si tu veux je t'envoie un exemplaire mais le code est identique a celui que je viens de te donner
    ps:
    je constate des choses du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UserForm1_resizible.Hide
    Unload UserForm1_resizible
    Load UserForm2_resizible
    UserForm2_resizible.Show
    je remplacerais par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Unload UserForm1_resizible
    UserForm2_resizible.Show 0
    le zero apres show le rend nonmodal ce qui evite des blocage si tu travail sur des cellules et peut etre ainsi eviter les select et autre barbarerie de code
    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      1  1

  7. #27
    Futur Membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci c'est super !!

    Content de voir que la solidarité est encore de mise sur le net.

    Je comprend pas vraiment les modifications mais ça fonctionne nikel..

    Merci aussi pour la remarque sur mon code. Si tu remplacerais, je remplace

    Sujet résolu
      0  0

  8. #28
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 9
    Points : 14
    Points
    14
    Par défaut Redimensionner un USF
    Bonjour Patrick,
    J'ai regardé le travail que tu as entrepris sur ces redimensionnements c'est extra.
    Je voudrai connaître un peu plus sur le redimensionnement d'un USF;
    A savoir si on peu avec une fenêtre MsgBox de pouvoir donner une dimension pour pouvoir redimensionner mon USF.
    Je te remercie du travail fait et te remercie d'avance de l'aide que tu m'apporteras.
    Amicalement
    Noel
      0  0

  9. #29
    Membre régulier
    Femme Profil pro
    retraitée
    Inscrit en
    Juin 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : retraitée

    Informations forums :
    Inscription : Juin 2006
    Messages : 147
    Points : 80
    Points
    80
    Par défaut Redimensionnement des formulaires
    Merci beaucoup pour ce code, c'est formidable cela m'a permis de résoudre un problème par rapport aux différents types d'écran devant utiliser mon application.

    bravo et merci encore !
      0  0

  10. #30
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 169
    Points : 54
    Points
    54
    Par défaut
    Bonjour à tous,
    Merci à Patrick pour son code ! J'aurais une question : serait-il possible de modifier le code pour n'avoir aucun des 3 boutons (réduire, agrandir, fermer) et empêcher l'utilisateur de déplacer l'userform ?
    Je précise que l'userform est maximisé à l'ouverture.

    Edit : est-il également possible d'avoir les codes de redimensionnement et overbouton (http://www.developpez.net/forums/d10...serform-apis/) pour un même fichier ?
    Merci beaucoup de votre aide,
    Bien amicalement
      0  0

  11. #31
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour

    pour la question 1 c'est oui! en supprimant la caption complètement

    pour la question 2 oui il te suffit de mettre le module classe dans ton fichier

    pour la question 1 c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    '**********************************************************************************************************************
    '*                                     CREATEUR :Patricktoulon Alias <a href="mailto:chamalin1@msn.com">chamalin1@msn.com</a>                               *
    '*                                                    DATE :23/09/2010                                                *
    '*                                       UTILISATION D'UNE SEULE API LE "USER32.DLL"                                  *
    '*                                    EXEMPLE DE USERFORM REDIMENTIONNABLE NOUVELLE VERSION                           *
    '*                                      LES CONTROLS SONT REDIMENTIONNES EN MEME TEMPS                                *
    '*                                               AINSI QUE LES FONT SIZE                                              *
    '**********************************************************************************************************************
    #If VBA6 Then
        'si on travaille avec office 32 bits
        Public Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
        Public Declare Function ShowWindow Lib "User32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
        Public Declare Function SWLg Lib "User32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
        Public Declare Function DrawMenuBar Lib "User32" (ByVal hwnd As Long) As Long
    #ElseIf VBA7 Then
        'si on travaille avec office 64 bits
        public Declare PtrSafe Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
        Public Declare PtrSafe Function SWLg Lib "User32" Alias "SetWindowLongA" (ByVal hWnd As Longptr, ByVal nIndex As Long, ByVal dwNewLong As Long) As Longptr
        Public Declare PtrSafe Function ShowWindow Lib "User32" (ByVal hWnd As Longptr, ByVal nCmdShow As Longptr) As Longptr
        Public Declare PtrSafe Function DrawMenuBar Lib "User32" (ByVal hwnd As Long) As Long
    #End If
    Public old_largeur As Long, handle As Long, old_hauteur As Long, newhauteur As Single, newlargeur As Single
    Public Ctl As Object
     
    Sub sans_caption(uf As Object)    'on va ajouter les deux boutons manquants et l'élasticité a l'userform
    '*****************************************************************
    '*ici on memorise les dimention de depart de l'userform          *
        old_largeur = uf.InsideWidth: old_hauteur = uf.InsideHeight    '*
    '*****************************************************************
    '***************************************************************************************************************
    ' ici on determine le handle                                                                                   *
        handle = FindWindow(vbNullString, uf.Caption)    '                                                         *
    'plus de caption                              *
        SWLg handle, -16, &H94080080: SWLg handle, -20, 0: DrawMenuBar handle                                                                            '*
    '***************************************************************************************************************
    '***********************************************************************************************************************************************************
    'on memorise a l'interieur du tag du control ses propriétés ainsi que son son font size                                                                   '*
        For Each ctrl In uf.Controls                                                                                                                          '*
            ctrl.Tag = ctrl.Left & ";" & ctrl.Top & ";" & ctrl.Width & ";" & ctrl.Height                                                                      '*
            If TypeName(ctrl) <> "SpinButton" And TypeName(ctrl) <> "Image" And TypeName(ctrl) <> "ScrollBar" Then ctrl.Tag = ctrl.Tag & ";" & ctrl.Font.Size    '*
        Next                                                                                                                                                  '*
    '***********************************************************************************************************************************************************
    End Sub
    Sub plein_ecran()
    ' on affiche le userform en plein ecran avec l'api showwindowa de la user32.dll  bien moins lourd que mes versions precedente de maximisation de l'userform et plus rapide et plus propre
    '1= mode normal:3 =maximiser:6 =minimiser
    'le handle du userform a été declaré en public au debut du module et  identifié dans la routine des trois boutons il n'est donc plus necessaire de l'identifier
        ShowWindow handle, 3
    End Sub
    Sub maForm_Resize(usf As UserForm)
    'ici on determine le multiplicateur qui differenci la dimention de base a celle actuelle de l'userform
        newlargeur = usf.InsideWidth / old_largeur: newhauteur = usf.InsideHeight / old_hauteur
        'ici on boucle sur tout les controls
        For Each Ctl In usf.Controls
            ppe = Split(Ctl.Tag, ";")    'on coupe le tag par les ";"
            'et on applique le multiplicateur au controls pour la largeur et la hauteur en une seule ligne
            Ctl.Move ppe(0) * newlargeur, ppe(1) * newhauteur, ppe(2) * newlargeur, ppe(3) * newhauteur
            'l'element(4) de ppe contient le font size du controls
            If UBound(ppe) = 4 Then Ctl.Font.Size = ppe(4) * newlargeur
        Next
    End Sub


    on peut dire aussi que l'on pourrait faire tout dans un module classe aussi
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      1  1

  12. #32
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 169
    Points : 54
    Points
    54
    Par défaut
    Bonjour Patrick,
    MERCI beaucoup de ta réponse ! Pour la question 2, c'est ce que j'avais fait, mais j'obtiens une erreur : le "Ctrl.Tag" du module de classe "overbouton" renvoit les infos sur la dimension du bouton et non sur sa couleur !
    Merci beaucoup !
    Bonne journée,
    Amicalement
      0  0

  13. #33
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 169
    Points : 54
    Points
    54
    Par défaut
    Re,
    J'ai testé le code que tu m'as gentiment donné et j'obtiens une erreur d'execution 9 sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ctl.Move ppe(0) * newlargeur, ppe(1) * newhauteur, ppe(2) * newlargeur, ppe(3) * newhauteur
    de la sub Sub maForm_Resize(usf As UserForm)... Saurais-tu d'où viens mon erreur ?
    Merci beaucoup !
      0  0

  14. #34
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    exemple en pièce jointe
    Fichiers attachés Fichiers attachés
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      0  1

  15. #35
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 169
    Points : 54
    Points
    54
    Par défaut
    Merci beaucoup Patrick !
    Est-il possible d'avoir l'userform en grand (maximise) et non en plein écran ?
    J'aurais également une autre question : j'avais essayé de remplacer les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ''***************************************************************************************************************
    '' ici on determine le handle                                                                                   *
    '    handle = FindWindow(vbNullString, uf.Caption)    '                                                         *
    '' ici on applique les changement (&H84CF0080= les trois bouton et l'elasticité)                                *
    '    SWLg handle, -16, &H84CF0080                                                                              '*
    ''***************************************************************************************************************
    de la sub trois_boutons par les lignes suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Private Declare Function Public FindWindowA Lib "User32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Public Declare Function GetSystemMenu Lib "User32" (ByVal hWnd As Long, ByVal bRevert As Long) As Long
    Public  Declare Function DeleteMenu Lib "User32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
    Public Declare Function RemoveMenu Lib "User32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
     
    Const SC_CLOSE = &HF060&
    Const SC_MOVE As Long = &HF010&
    Const MF_BYCOMMAND As Long = &H0&
    Dim HndlUSF&
    Dim HndlMenu&
    If Userform1.Caption = "" Then Userform1.Caption = Space(10)
        handle = FindWindow(vbNullString, uf.Caption)
        HndlMenu& = GetSystemMenu(HndlUSF&, False)
        DeleteMenu HndlMenu&, SC_MOVE, MF_BYCOMMAND
        RemoveMenu HndlMenu&, SC_CLOSE, MF_BYCOMMAND
    Ce code devrait retirer les boutons du caption et empêcher le déplacement.

    Résultat : les boutons minimiser et agrandir sont absents, en revanche la croix rouge est présente et il est possible de déplacer l'userform !
    Saurais-tu pourquoi ?
    Merci encore pour tout !


    Edit : mon objectif serait de redimensionner automatiquement l'userform quelle que soient les dimensions de l'écran mais aussi d'empêcher son redimensionnement par l'utilisateur...
      0  0

  16. #36
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    tiens on va aller au plus simple car il est vraiment difficile de bloquer vraiment la caption averc les api indows le double click reste actif donc walouh

    on travaille avec les menu le bouton close reste apparent mais inactif
    et on ne maximise pas mais on dimension a la taille de l'écran moins la taskbar le userform
    et la comme ca il est vraiment bloqué

    dans le module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     Public Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
     Public Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, ByVal bRevert As Long) As Long
     Public Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
     Public Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
     Public Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
     Const NO_CLOSE = &HF060&
     Const NO_MOVE As Long = &HF010&
     Const MF_BYCOMMAND As Long = &H0&
     Const pxtopoint As Double = 0.6
     Const heighttaskbar As Long = 26
     
     Sub bloque_usf_maximisé(usf)
    usf.Top = 1: usf.Left = 0
    usf.Width = GetSystemMetrics(0) * pxtopoint
     usf.Height = GetSystemMetrics(1) * pxtopoint - heighttaskbar
     Dim HndlUSF&
     Dim HndlMenu&
     If UserForm1.Caption = "" Then UserForm1.Caption = Space(10)
     Handle = FindWindowA(vbNullString, usf.Caption)
     HndlMenu& = GetSystemMenu(Handle, False)
     DeleteMenu HndlMenu&, NO_MOVE, MF_BYCOMMAND
     RemoveMenu HndlMenu&, NO_CLOSE, MF_BYCOMMAND
    End Sub
    et le activate du userform

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Activate()
    bloque_usf_maximisé Me
    End Sub
    voila maintenant tu a ton userform plein écran on garde la caption mais le bouton fermer est inactif et le height du userform s'arrête a la taskbar

    c'est bien ca que tu voulais ?
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      0  1

  17. #37
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 169
    Points : 54
    Points
    54
    Par défaut
    Bonjour Patrick,
    Merci de ta réponse ! Je viens de tester ton code, il remplit parfaitement son rôle mais malheureusement ce n'est pas ce que je cherche... Désolé de mon manque de clarté mais je crois que ma demande n'est pas possible.
    Le code de redimensionnement que tu as fait est juste parfait pour mon besoin. J'ai testé sur différents écrans, avec des résolutions variables et le redimensionnement est automatique, c'est parfait ! Cependant, il me faudrait empêcher le redimensionnement et le déplacement de l'userform par l'utilisateur et là je ne pense pas que ce soit possible.
    Merci beaucoup de ton aide,
    Bonne journée
      0  0

  18. #38
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour Patrick,
    Merci de ta réponse ! Je viens de tester ton code, il remplit parfaitement son rôle mais malheureusement ce n'est pas ce que je cherche... Désolé de mon manque de clarté mais je crois que ma demande n'est pas possible.
    Le code de redimensionnement que tu as fait est juste parfait pour mon besoin. J'ai testé sur différents écrans, avec des résolutions variables et le redimensionnement est automatique, c'est parfait ! Cependant, il me faudrait empêcher le redimensionnement et le déplacement de l'userform par l'utilisateur et là je ne pense pas que ce soit possible.
    Merci beaucoup de ton aide,
    Bonne journée
    *
    et oui c'est toi qui n'a pas compris ce que j'ai voulu dire
    je vais etre plus clair !!
    a partir du moment ou tu utilise les api window et donc que tu change le getwindowlong qui est l'etat de la fenetre on ne peut plus manipuler le menu donc le nomove et no close walouh!!!!!
    il reste le double clic sur la caption qui fonctionne et donc te remet le userform a sa taille initiale

    donc voila pourquoi je t'ai proposé cette solution elle fait la même chose sans modifier le getwindowlong de la fenêtre
    voila une version plus pro
    tu peut toujours essayer de bouger ou redimensionner le userform avec ta souris tu sera fatigué avant que j'ai fini mon café

    version plus pro!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Public Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
     Public Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
     Public Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
     Public Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
     Public Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
    Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
    Type RECT
         Left As Long
         Top As Long
         Right As Long
         Bottom As Long
     End Type
     Const NO_CLOSE = &HF060&
     Const NO_MOVE As Long = &HF010&
     Const MF_BYCOMMAND As Long = &H0&
     Const pxtopoint As Double = 0.6
     Const heighttaskbar As Long = 26
     
     Sub bloque_usf_maximisé(usf)
    Dim r As RECT, rectangle As Long, handletask As Long, HndlMenu&
    usf.Top = 1: usf.Left = 0 'on met le top et left a 0
    usf.Width = GetSystemMetrics(0) * pxtopoint 'on dimention le width a la largeur de l'ecran (conversion pxtopoint)
     handletask = FindWindowA("Shell_TrayWnd", "") 'on capte le handle de la taskbar
      rectangle = GetWindowRect(handletask, r) 'on créé un rectangle en memoire  correspondant au coordonées de la taskbar
     usf.Height = r.Top * pxtopoint 'le height du userform correspond au top de la taskbar(conversion pxtopoint)
     If UserForm1.Caption = "" Then UserForm1.Caption = Space(10)
     Handle = FindWindowA(vbNullString, usf.Caption) 'on capte le hadle du userform
     HndlMenu& = GetSystemMenu(Handle, False) ' on capte le getwindowlong du menu
     DeleteMenu HndlMenu&, SC_MOVE, MF_BYCOMMAND 'on bloque le deplacement
     RemoveMenu HndlMenu&, SC_CLOSE, MF_BYCOMMAND ' on hinibe le bouton fermer
    End Sub
    voila
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      0  1

  19. #39
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 169
    Points : 54
    Points
    54
    Par défaut
    Re-,
    Merci Patrick ! Je vais garder ta version initiale qui me permet de faire l'essentiel.
    Pour la question 2, c'est ce que j'avais fait, mais j'obtiens une erreur : le "Ctrl.Tag" du module de classe "overbouton" renvoit les infos sur la dimension du bouton et non sur sa couleur !
    Je vais encore t'embêter, mais saurais-tu stp comment contourner ce problème ?
    Merci beaucoup,
    Bon dimanche
      0  0

  20. #40
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 169
    Points : 54
    Points
    54
    Par défaut
    Bonsoir,
    Je n'y parviens pas... Je suis désolé, mon niveau vba n'est pas élevé.
    J'utilise ce fichier de Patrick, il permet de redimensionner les contrôles comme je le souhaite.
    http://www.developpez.net/forums/att...1-02-2013.xls/

    Cependant, j'aimerais obtenir ça
    Nom : Test.jpg
Affichages : 586
Taille : 108,8 Ko...
    Est-ce possible ?
    Merci beaucoup et encore toutes mes excuses
      0  0

Discussion fermée
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/04/2011, 17h12
  2. Erreur 800a9cf1 lors de l'insertion des controles dans un userform
    Par lahroussi dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 19/01/2010, 09h40
  3. Réponses: 0
    Dernier message: 05/02/2009, 15h10
  4. Réponses: 3
    Dernier message: 22/01/2009, 09h07
  5. [VB]inserer automatiquement des controls dans un listbox
    Par oumarsaw dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 05/04/2006, 18h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo