XL 2016 affichage userform avec 2 ou + ecrans

roby

XLDnaute Occasionnel
Bonjour le forum,

Lorsqu'on lance un fichier Excel sur un poste avec plusieurs écrans, à chaque fois les userform s'affichent sur un autre écran que l'écran ou est affiché excel.
y a-t-il une parade pour que cet userform s'affiche dans la même fenêtre que excel ?

je joint le même fichier solutionné dernièrement pour le test.

Merci encore.
 

Pièces jointes

  • Roby1.xlsm
    19.8 KB · Affichages: 17

patricktoulon

XLDnaute Barbatruc
alors je fait la démo comme tu pourra pas dire que je cherche a dévaloriser ton travail
seulement j'insiste(a tors visiblement car tu n'a pas compris une chose evidente) pour te montrer ton erreur
démonstration j'ai enlevé le theme aéro et me suis mis en theme W7 basic comme ca on a les getsystemmetric plein pot hein !!! d'accords;)
demo sansaero.gif


maintenant je vais te le dire plus clairement

TU NE PEUX PAS CALCULER CA AVANT AFFICHAGE ET ACTIVATION DE LA FENÊTRE
pour la simple et bonne raison que le dessin à l’écran des fenêtres se termine par la dwma.dll Qui prends le relais après la user32 ou shell pour d'autre fenêtres

je ne peux être plus clair
 

Dudu2

XLDnaute Barbatruc
Ok, il y a un petit décalage avec ton theme W7 basic. D'ailleurs j'ai regardé dans mes thèmes et je ne trouve rien de tel. Donc je ne peux ni tester ni vérifier. J'ai du mal à croire que la DLL utilise des valeurs qu'elle serait la seule à connaître et qui ne seraient pas dans l'une des options du GetSystemMetrics ou ailleurs. C'est forcément paramétré quelque part.

Tu ne m'as pas montré ce que donne l'affichage avec l'autre bouton qui utilise ta méthode.
J'aimerais bien voir si ça cadre.

Attention la valeur 21 c'est en points et je crois me souvenir qu'en pixels le total était de 35, donc plus proche de 22 points.
 

patricktoulon

XLDnaute Barbatruc
Ok, il y a un petit décalage avec ton theme W7 basic. D'ailleurs j'ai regardé dans mes thèmes et je ne trouve rien de tel. Donc je ne peux ni tester ni vérifier. J'ai du mal à croire que la DLL utilise des valeurs qu'elle serait la seule à connaître et qui ne seraient pas dans l'une des options du GetSystemMetrics ou ailleurs. C'est forcément paramétré quelque part.

Tu ne m'as pas montré ce que donne l'affichage avec l'autre bouton qui utilise ta méthode.
J'aimerais bien voir si ça cadre.

Attention la valeur 21 c'est en points et je crois me souvenir qu'en pixels le total était de 35, donc plus proche de 22 points.
J'ai du mal à croire que la DLL utilise des valeurs qu'elle serait la seule à connaître et qui ne seraient pas dans l'une des options du GetSystemMetrics ou ailleurs. C'est forcément paramétré quelque part.
tu semble avoir oublié que aéro fip 3d aeropeak etc.....et tout y cointi ont été ajouté au noyau nt pour vista et superieur
ce n'est ni plus ni moins qu'un patch faisant le même travail de uxteme le faisait sur xp
et il n'a jamais été intégré dans la user32

donc ma réponse est "et ben si !!"
c'est là ou le bas blaisse et qu'il m'a fallu 6 années pour le comprendre
la dwma.dll n'a subi q'un mise a jour depuis vista et c'est pour W11
c'est pour te dire a quel point elle est encore méconnue en vb(vba) on trouve très peu de mise en œuvre en terme de code sur la toile il faut bien chercher

et pour peu que je me serve de la dwma.dll pour modifier mon userform par exemple comme ceci ou j'agrandi ma caption
1665855652396.png


ou bien encore je modifie tout les largeurs et hauteur de caption et border
demo avec aero.gif


ben là tout tes calcul ne serviront à rien
tu me crois maintenant quand je te dis que tu pars à la chasse au DAHU avec ce petit ecart de taille et position en essayant de le prévoir

tout tes calculs te ramèneront a des dimensions originales celle que tu a dans l’éditeur vbe sur ta forme
1665856271068.png
 

patricktoulon

XLDnaute Barbatruc
re
ah et au fait le bouton utilisant ma méthode le usf ne s'affiche pas je sais pas ou il est
ne me demande pas pourquoi quand je regarde ce que tu fait de mes codes si simples je cherche même pas a chercher l'erreur

arrête de trafiquer mes code et de marquer méthode de patricktoulon
quand je te donne un code il fonctionne alors si tu le propose laisse le tel quel même si c'est pas ton style
ça fait plusieurs fois que je te le dis ;)

tu a ton style j'ai le mien ;)
 

patricktoulon

XLDnaute Barbatruc
bon j'ai fermer le fichier je l'ai ré ouvert et ma méthode marche
là si tu n'a pas ta réponse je sais plus moi ;)
demo avec aero.gif



quand je suis en theme basic il ne fonctionne plus
alors que la version original de mon fichier fonctionne
elle donne bien 0 et 0 pour le left et top en redressement avec le theme basic
1665859061098.png


voilà j'ai tout dis je crois ;)
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Ok, donc ta méthode, je ne sais pas l'utiliser.
Alors je vais rester sur la mienne sans chercher à couvrir les cas marginaux que tu as mentionnés.
Et si pour ces cas, le positionnement n'est pas parfait, ben ce sera comme ça !
 

patricktoulon

XLDnaute Barbatruc
ben le parfait n'existe pas de toute façon sinon on l'utiliserait déjà

Alors je vais rester sur la mienne sans chercher à couvrir les cas marginaux
ben c'est pas que les cas marginaux teste avec un autre W10 et un office different du tien ben là aussi walouh
tu en ai exactement ou j'en étais dans la discussion hyper longue dont je parlais ya deux ou 3 ans
a savoir ca va marcher chez toi et peut être quelques config et walouih pour le reste
alors qu'utiliser une lecture des rect effectif avec dwma.dll, reste la solution la plus sur
mais !! bien sur POST AFFICHAGE et pour moi il n'y a rien de plus logique
 

Dudu2

XLDnaute Barbatruc
Dans l'utilisation que j'ai faite de ta méthode, bien sûr que ça se passe POST AFFICHAGE. C'est obligé.
C'est pour ça que j'ai généré un affichage temporaire si le UserForm n'est pas affiché pour capter les valeurs de marges.
Mais manifestement ça ne fonctionne pas dans tous les cas. Sans doute n'ai-je pas compris ton code ou comment l'utiliser. Je ne vais pas y passer la nuit pour m'y retrouver d'autant que dans ma config ça fonctionne. Ta config dans laquelle mon utilisation de ta méthode ne fonctionne pas, je ne peux pas la tester. J'en reste là. Je ne peux rien faire de plus.
 

patricktoulon

XLDnaute Barbatruc
re
mais pourquoi voudrais tu afficher une première fois le userform en vbmodeless je ne sais ou ??
quelle est l'utilité de la manœuvre ?
c'est absolument inutile la fonction te donne la différence left et top que tu applique instantanément
point barre dans le activate tu n'a même pas le temps de voir la manœuvre
 

Discussions similaires

  • Résolu(e)
Microsoft 365 32 ou 64 bits
Réponses
46
Affichages
2 K