Aide paramétrage objets dans classeur
Bonsoir à toutes et à tous,
Je voulais vous poser une question liée à un éventuel paramétrage à faire sur mon fichier Excel pour pas que mes objets ActiveX bougent.
J'ai dans un classeur Excel plusieurs objets ActiveX qui sont placés de manière précise grâce à une subroutine avec top, left, height et width or quand je met ce classeur sur un autre PC qui détient un écran plus grand (résolution similaire) et bien mes objets ne sont plus positionnés comme sur le PC principal pour lequel j'ai codé ce classeur.
Pourriez-vous svp m'indiquez si Excel détient un paramétrage spécifique à faire pour que ces objets ne bougent pas du tout ? (Mes objets sont verrouillés)
Je vous remercie d'avance pour votre retour.
Cldmt.
Bonjour, j'ai déjà eu l'occasion de répondre à ce tye de question, mais je ne sais plus sur quel post
Vooici ce que je propose
1) tu crées un module
Function presentation(form, w, h, t, g)
With form
.Width = w
.Height = h
.Top = t
.Left = g
End With
End Function2) ensuite tu positionne des activeX en utilisant la longueur et la hauteur de l'écran surlequel ton fiichier est ouvert
' organistion des objets dans le formulaire Menu
Private Sub UserForm_Activate()
l = Application.Width ' largeur en points de la fenêtre
h = Application.Height ' hauteur en points de la fenêtre
With Menu
' agencement du Formulaire "Menu" et de ses objets
Call presentation(Menu, l, h, -20, 0)
Call presentation(Titre, 4 * l / 10, 35, h / 10, 3.5 * l / 10)
Call presentation(Image1, 5 * l / 10, 2 * h / 4, h / 4, 3 * l / 10)
Call presentation(Creation, 1.8 * l / 10, h / 14, 3.5 * h / 10, l / 14)
Call presentation(consultation, 1.8 * l / 10, h / 14, 4.5 * h / 10, l / 14)
Call presentation(utilisation, 1.8 * l / 10, h / 14, 5.5 * h / 10, l / 14)
Call presentation(Quitter, l / 10, h / 14, 7.5 * h / 10, 12 * l / 14)
Call presentation(Lb_copyright, l / 5, h / 20, 8.5 * h / 10, 0.8 * l / 14)
End With
End SubVoici un exemple
Bonjour,
Très belle approche Jacky;
J'ai eu un cas sur un de mes fichier et ma réponse a été de permettre à l'utilisateur de changer par lui même ces valeurs :
Private Sub UserForm_Activate()
Me.Width = Sheets("Paramétre").Range("I1").Value
Me.Height = Sheets("Paramétre").Range("I2").Value
mais je préfère de loin ta proposition.
Cordialement
bonjour ALSIA, salut Jacky, ghisnob,
petit détail, je préférais la sequence de VBA : .AddShape (Type, Left, Top, Width, Height), qui me semble aussi plus logique (mais les goûts et les couleurs ...)
je préférais la sequence de VBA : .AddShape (Type, Left, Top, Width, Height),
pourrais tu détailler en donnant un exemple. Je me pose la question suivante : si ton shape prendra les dimensions que tu lui donneras dans ta fonction "AddShape (Type, Left, Top, Width, Height),", qu'en est-il des objets qu'il contient ?
Bonjour ghisnob,
Merci pour ton retour et heureux que ma proposition ait pu te plaire
Bonne journée
Excuses-moi Bart, mais je crois que j'ai mal interprété ta proposition.
Si mes souvenirs sont bons, je crois que c'est avec toi que j'ai échangé sur l'utilisation des ActiceX et que tu m'aurais spécifié que tu ne les aimais pas beaucoup d'où l'utilisation des images (Shapes), est-ce bien le cas ?
Donc je comprends mieux ce que tu as écrit ci-dessus. Chacun de mes ActivesX tu le remplaces par un Shape auquel du donnes un nom et des dimensions. Mais quand tu changes d'écran (plus petit ou plus grand) comment fais tu surtout pour Left et Top. Il faut bien que ces deux dimensions soient proportionnelles à la taille de l'écran sinon tu risques d'avoir des surprises.
Au plaisir
re jacky, non, ce n'est pas ce que je voulais dire,
Vous avez maintenant "Function presentation(form, w, h, t, g)" et moi, je préférais plutôt la séquence prévue "Function presentation(form, g, t, w, h)"
Je n'avais donc pas compris
Mais pourquoi préfères tu "Function presentation(form, g, t, w, h)" à "Function presentation(form, w, h, t, g)" ?
La différence entre les deux se résume à l'ordre des variables g,t,w et h
oui, ce n'est que cà, mais c'est pour éviter la confusion, les erreurs qu j'utilise la même séquence que VBA propose pour ajouter des nouveaux formes. Uniformité.
OK, merci Bart,
Je conçois très bien ce que tu dis
Au plaisir
Bonjour à tous,
Je vous remercie pour vos retours constructifs.
Je vais me renseigner sur "Function presentation(form, g, t, w, h)" dont je n'ai pas trop de connaissances. Par contre j'ai du mal à comprendre la différence entre l'ordre des variables dans cette fonction, si vous pouviez svp apporter quelques précisions à ceci, ça m'aiderait.. Je viens de voir les codes de Jacky et c'est tout nouveau pour moi ce type de manipulation. Dans mon classeur, j'utilise des codes de base permettant de positionner simplement ces objets dans ma feuil comme ceci et non dans un userform (Je ne savais pas non plus que ça pouvait impacter les objets d'un userform si ce fichier part vers un autre PC avec une taille d'écran différente). Le de jacky semble être ultra orienté pour une interface dynamique logique. Peut-être que vous avez des liens à partager pour mieux comprendre cette "Function presentation(form, g, t, w, h)". Mon code n'a aucune incidence sur la taille de l'écran visiblement puisque les objets bougent alors que la résolution est la même. La "Function presentation(form, g, t, w, h)" assure de bloquer ces objets quelques soit la taille de l'écran ? C'est ce que je souhaite comprendre.
C'est bien dommage qu'un paramétrage automatique n'existe pas pour que chaque classeur s'adapte automatiquement en fonction de la taille de l'écran de l'utilisateur :(
Je vous remercie encore pour vos retours d'expert
Bonjour,
que se passe t il lors du changement de PC si à l'origine vous avez fait la présentation voulue puis que vous ayez "regrouper" les formes entres elles ?
le placement est il modifié dans ce cas ?
@ bientôt
LouReeD
@ALESIA
Je vais me renseigner sur "Function presentation(form, g, t, w, h)" dont je n'ai pas trop de connaissances.
Cette fonction à laquelle j'ai donné le nom de presentation est toute simple, elle ne fait que d'attribuer à "form" les coefficients largeur, hauteur, gauche et top. L'ordre de ces coefficients n'a aucune importance bien que BsAlv préfère conserver un ordre bien précis : "Function presentation(form, g, t, w, h)"
Peut-être que vous avez des liens à partager pour mieux comprendre cette "Function presentation(form, g, t, w, h)"
Il suffit de faire référence au petit fichier que j'ai joins dans un de mes posts. Avec la ligne de code, par exemple
Call presentation(Menu, l, h, -20, 0)je ne fais que demander à attribuer les valeurs l, h, -20 et 0 à la largeur, la hauteur, la gauche et le top de mon UserForm "Menu", de ce fait quelque soit l'écran il aura une largeur égale à l (largeur de l'écran), une hauteur égale à h (hauteur de l'écran) et surtout il sera positionné à -20pts à gauche et 0 pts en haut.
C'est encore plus flagrant avec la ligne
Call presentation(Titre, 4 * l / 10, 35, h / 10, 3.5 * l / 10)Cette fois ci mon textBox "Titre" aura une largeur variable en fonction de l'écran utilisé (4*l/10) et des positions que je qualifie de "proportionelles" aux dimensions de l'écran utilisé (gauche: 3,5*l/10 ; hauteur: h/10)
La "Function presentation(form, g, t, w, h)" assure de bloquer ces objets quelques soit la taille de l'écran ?
On ne peut pas dire exactement cela, les objets ne sont pas exactement bloqués, mais pour leur positionnement on peut dire oui proportionnellement à la taille de l'écran. Ce n'est pas le cas avec ce que tu écris
Call LOADLABWITHPOS(ArmStart, "ta", 22.5, 93.75, 504, 129car les valeurs, et surtout Left et Top, seront toujours les mêmes (93.75 et 504) quel que soit les dimensions de ton écran. Si tu avais choisi 1200 pour Left l'objet serait en dehors de l'écran et donc invisible
Je ne sais pas si j'ai été assez explicite, en espérant que je ne fut pas trop lourd, je te remercie d'avoir poser tes questions ce qui prouve que tu t'es interessé à ma proposition
Bonne fin de journée et aun plaisir
Jacky
Edit : LouReeD, bien à toi et au plaisir
Re,
Encore merci pour vos retours!
@LouReed - Ce qu'il se passe quand je mets ce fichier dans un autre classeur et bien les objets ne sont tout simplement décalés à cause de la taille de l'écran. J'ai basculé ce fichier vers un PC qui détient un écran de 17 " alors que je l'ai codé sur un PC avec un écran de 22 "... Et Bim! Tout se décale! C'es la raison pour laquelle j'ai bloqué ces objet avec la subroutine LOADLABWITHPOS, je pensé que ça allait régler le soucis mais non. Concrètement, je ne vois pas grand chose hors mis la taille de l'écran qui puisse bouger ces fameux objets de mon fichier. Les 2 écrans ont la même résolution.. Mais la taille de ces derniers impacte mon projet. Je n'ai aucun objet regroupé avec un autre.
@Jacky - Merci pour cette explication très détaillée que je vais mettre en application dés ce soir pour faire mes test en ce sens. Je pense qu'avec tout ce que tu expliques, je vais pouvoir m'en sortir.
Je ne suis pas un grand expert Excel, je manque de connaissance pour ce type de paramétrage à coder pour adapter une feuille avec des objets de type OLE en fonction de la taille de l'écran.
Je vous remercie encore pour vos explications.
Cordialement.