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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut Redimensionnement automatique des controls dans un userform
    bonjour a tous
    apres avoir galéré a essayé de comprendre les exemples de userform a redimentionnement automatique

    j'ai trouvé une solution qui ma fois me semble tellement simple avec si peu de code que je pense qu'elle a sa place dans les sources

    j'ai utilisé la fonction redim preserve pour memoriséer les coordonnées et la taille des controls dans l'userform

    j'utilise l' api user32 pour rendre l'elasticité q'ont toutes les fenetres windows et les deux bouton manquants cruellement au cadre des userforms(reduire,et minimiser) ce qui me permet de redimensionner l'userform avec la souris
    et les trois boutons (reduire,minimiser,fermer)
    pour ce qui ont windows seven le aero snake marche aussi
    bon jusque la rien de nouveau

    ensuite dans la fonction resize de l'userform je boucle sur tout les controls
    de l'userform
    et je leur applique une operation tres simples voici le code du resize
    il faut savoir que largeur_usf et hauteur_usf sont des variables public qui sont memorisé a l'initialise de l'userform

    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
     
    Private Sub UserForm_Resize()
    On Error Resume Next
    i = 0
    For Each ctrl In Me.Controls
    i = i + 1
    'largeure du control=largeure usf actuelle divisée par entre parenthezes  largeur usf de depart divisée par largeur de depart du control
    ctrl.Width = Me.Width / (largeure_usf / largeurbouton(i))
    'hauteur du control = hauteur usf actuelle divisée par entre parenthezes  hauteur usf de depart divisée par hauteur de depart du control
    ctrl.Height = Me.Height / (hauteure_usf / hauteurbouton(i))
    'le left du control = largeur usf actuelle divisée par entre parenthezes  largeur usf de depart divisée par le left de depart du control
    ctrl.Left = Me.Width / (largeure_usf / leftbouton(i))
    'le top du control = hauteur usf actuelle divisée par entre parenthezes  hauteur usf de depart divisée par le top de depart du control
    ctrl.Top = Me.Height / (hauteure_usf / topbouton(i))
    'le top du control = hauteur usf actuelle divisée par entre parenthezes  hauteur usf de depart divisée par le top de depart du control
    ctrl.FontSize = ((Me.Height + Me.Width) / 8) / (fontbouton * 2)
    Next
    largeur = Me.Width  '////////////////////////////////////////////
                        '///affiche les dimensions dans les textbox//
    hauteur = Me.Height '////////////////////////////////////////////
     
    Me.Repaint 'repeint le userform pour effacer les traces des anciens emplacement des control(du a la puissance de la carte graphique)
    End Sub
    si on eleve les lignes vertes qui me servent a expliquer les fonctions
    vous verrez qu'il ne reste pas beaucoup de code hihihihi!!!

    je vous laisse le soin de juger
    je suis pas contre des ameliorations si le coeur vous en dis bien que le sujet a été traité tant de fois

    je met le fichier exemple avec.....
    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  2

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut

    Je viens de tester ton fichier, excellent travail

    Philippe
      0  0

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    merci depuis que je me suis inscrit pour pouvoir creer mes propre application pour mon entreprise je me suis passionné pour le vba et j'ai laisser carément tomber le html et le vbs

    en tout cas si j'ai progressé c'est grasse a dvp un site exelent pas facile avec les debutants mais en tout cas ca marche


    il me manque une seule chose dans ce fichier

    c'est de pouvoir (savoir surtout) declarer le nom de l'userform en variable de type string et toujour en public a fin de me servir des la meme macro(determine) pour nimporte quel userform
    ainsi en faire un xla
    et hop encore moins de code hihihihi!!! et tout mes userforms pourront avoir ces options en appelant simplement le la macro du xla aurait tu une idée sur la question j'ai bien essayé plein de truc mais je n'y suis pas arrivé

    ce petit fichier pourrait etre un addins interressant a mon avis



    merci....

    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
      0  2

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    salut

    Quelque-chose doit m'échapper (probablement) .
    je ne comprends pas la raison pour laquelle n'est pas tout simplement utilisée la propriété Zoom de l'userform. Elle est faite pour cela et permet non seulement d'ajuster la taille et la position des contrôles, mais également celle des polices de caractères.
    Il suffit dès lors ;
    - de relever les dimensions de l'écran de la machine de développement (et de les mémoriser en mode création)
    - de relever les dimensions (au démarrage) de l'écran de la machine cliente
    - d'en déduire un coefficient correcteur K à appliquer aux propriétés Top, Left, Width et height de l'UserForm
    - d'écrire (exemple)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub UserForm_Initialize()
      k = 0.7
      Me.Zoom = k * 100
      Me.Move Me.Left * k, Me.Top * k, Me.Width * k, Me.Height * k
    End Sub
    une autre manière de calculer K est plus astucieuse (car corrige à la fois en fonction des dimensions de l'écran et de la résolution en vigueur) et consiste :
    - à relever la position et la taille relatives (pourcentages) de l'userform sur la machine de développement, ainsi qu'une seule, à son choix, de ces données, en valeur absolue (et mémoriser en dur)
    - à relever, au démarrage sur la machine cliente, les dimensions de l'écran et appliquer à l'userform la position et la taille relatives (pourcentages mémorisés)
    - calculer le K correctif constaté
    - l'appliquer comme montré plus haut.

    Le principe à appliquer serait très sensiblement le même (même méthode mêmes calculs, mais "in vivo") dans le cas d'adaptation à une réduction des dimensions de l'userform, par code direct ou par "poignées" rajoutées par code.
      0  1

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut
    bonjour

    je ne connais pas la fonction zoom
    je vais essayé ton procédé si ca marche
    purée de purée yen a un qui a trouver un code plus leger hihihihihi!!!!


    au plaisir .....

    et puis j'oubliais


    0.7 n'est certainement pas bon puisque la resolution en vigeur c'est
    taille= resolution*0.75
    ou
    taille= resolution/1.333333333333333

    enfin cela dis je vais potassé ton idée



    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
      0  2

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    ok je revien donc

    ta solution peut etre interressante l'ors de l'initialyse de l'userform
    pour avoir l'userform plein ecran directement a la resolution de l'ecran
    apres ca aucun interret dans le sens ou le redimentionnement dans mon cas est aleatoire puisque je me sert de l api user 32 pour recuperer l'elasticité des fenetres windows avec la souris


    voila 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
      0  2

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    a la demande de spookyz je poste un exemple sans le mouse in et out

    cet exemple a les deux possibilités mode fenêtre au départ ou plein écran


    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
      0  1

  8. #8
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2
    Par défaut redimensionnement automatique des controls dans un userform
    Bonjour serait-il possible d'avoir un fichier exemple, je galère un peu pour l'utiliser dans mon UserForm.
      0  0

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    bonjour brizard


    tu peux te contenter de recopier le module standard et le module userform

    il est parfaitement fonctionel

    au plaisir



    Edit::sinon tu a aussi ma nouvelle version ici tu n'a qu'a recopier le code encore une fois

    parici:http://excel.developpez.com/contribu...newversion.zip


    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

  10. #10
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2
    Par défaut redimensionnement automatique des controls dans un userform
    Formidable.
    Merci pour ton aide précieuse, je vais travailler là dessus.
    Cordialement
      0  0

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 11
    Par défaut
    Bonjour Patrick,

    J'ai voulu essayer ce code dans une de mes applications Excel 2003 mais j'obtiens une
    erreur 11 division par zéro et ça se bloque sur cette partie du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    leftbouton(i) = maform.Width / ctrl.Left
    J'ai testé la macro dans un nouveau classeur ou je n'ai mis qu'un UserForm
    avec un bouton, la tout fonctionne parfaitement bien !

    De quoi peut bien venir cette erreur ?
    Serait-ce parque que j'utilise un UserForm dans lequel j'ai supprimé la petite
    croix rouge de fermeture ?

    Merci d'avance
      0  0

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    bonjour a tous
    jacky
    voila une version ultra simplifié
    j'ai revisé le principe du redimentionnement du font size
    en effet ils peuvent avoir un font size différent

    au plaisir
    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
      1  1

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