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
non sérieux tout les matins tu va m'en sortir une ? 🤣

alors pour que les choses soient claires une bonne fois pour toute

la position Théorique du shape en pixel par rapport à l’écran c'est

le left= une pane.pointstoscreenpixelsX(ta shape.left)
le top= une pane.pointstoscreenpixelsY(ta shap.top)

"une pane " peut être la 1,2,3 ou 4 selon ou elle est placé visuellement à l'ecran dans le fractionnement (freezepane ou pas)

je dis Théorique
justement par ce que excel a son propre zoom et que quand tu zoom forcement l'object ne sera plus a la même place PAR RAPPORT 0 L ECRAN!!! car après pour la conversion en point il faut faire intervenir le coeff zoom dans le calcul

je pense que tu n'a pas tout compris dans la fonction pointstoscreenpixels c'est pour ça que j'avais commencé un tuto d'ailleurs

démonstration
VB:
Private Sub CommandButton1_Click()
Set shap = ActiveSheet.Shapes("DUDU2")
With ActiveWindow
l1 = .Panes(1).PointsToScreenPixelsX(shap.Left)
T1 = .Panes(1).PointsToScreenPixelsY(shap.Top)

l2 = .Panes(4).PointsToScreenPixelsX(shap.Left)
T2 = .Panes(4).PointsToScreenPixelsY(shap.Top)
End With

MsgBox "en pane1 la position théorique en pixel de dudu2 est " & l1 & " de left " & T1 & " de top" & vbCrLf & _
"en pane4 la position théorique en pixel de dudu2 est " & l2 & " de left " & T2 & " de top"
End Sub

demo.gif
 

patricktoulon

XLDnaute Barbatruc
alors maintenant je vais t'apprendre une chose importante je t'en ai parler précédemment mais en vitesse

parlons du zoom de excel maintenant
je te fait une petite démonstration assez parlante
je vais partir de zoom 50 à 250 avec un pas de 5%
et je vais prendre le pointtoscreenpixel de la [b2] et je note les coordonée en E:F
demo.gif


voyons voir le resultat
on va pas aller bien loin il suffit de regarder le zoom de 50 à75 pour ce rendre compte de excel a un zoom assez particulier par exemple (tres flagrant) de 70 à 75 le left c'est le même
ou tout simplement de 50 à 55 soit 5% de plus de zoom on va de 79 à 86 de left en pixel
je suis pas super fortiche en math mais suffisement pour me rendre compte que 79 + 5% ca fait pas 86

d’ailleurs pendant l'animation on voit dans le mouvement comme des ratés (qui n'en sont pas) c'est simplement l'arrangement du zoom d'excel qui modifie a sa convenance
on vois ce même phénomène (et même plus flagrant) dans les table html
1666251550071.png


tu as encore pas mal de chose a maîtriser
avant de bien te servir de (pane , pointstoscreenpixels , zoom,window) etc....

je te donne le fichier pour que tu en fasse ta propre analyse
peut être que ça va t'éclairer sur certain points
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
le left= une pane.pointstoscreenpixelsX(ta shape.left)
le top= une pane.pointstoscreenpixelsY(ta shap.top)
Oui, et ça c'est moi qui te l'ai fait savoir parce que tu n'avais pas compris qu'il faut aller sur le TopLeftCell de la Shape pour trouver le bon Pane.

Mais avec tes bricolages de Point To Pixel Zoomesques je sais pas trop ce que ça peut donner.
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
parlons du zoom de excel maintenant
Ah oui parlons-en !
Dans mon code je n'ai pas besoin d'utiliser le coefficient du Zoom parce que j'utilise justement les bonnes instructions et alors ça marche.
Toi je sais pas ce que tu fais dans ta cuisine d'usine à gaz avec le zoom. Tu complexifies à loisir pour rien. En fait je suis pas sûr que tu comprennes bien tout ce que tu fais.

1666256014707.gif
 

patricktoulon

XLDnaute Barbatruc
Oui, et ça c'est moi qui te l'ai fait savoir parce que tu n'avais pas compris qu'il faut aller sur le TopLeftCell de la Shape pour trouver le bon Pane.

Et en plus avec tes bricolages de Point To Pixel foireux
heu .....tu m'a fait savoir rien du tout y a longtemps que j'utilise pointstoscreenpixels je ne t'ai pas attendu
🤣 et tu ne trouvera jamais le pane avec le topleftcell
le topleftcell te donne la cellule du shape C EST TOUT


🤣 🤣
sache que dans tout les cas ton module me donne les même défaut que le mien a savoir des milimili de rien du tout
par contre je ne suis pas obliger de charger moulte api qui prennent un max de mémoire pour fonctionner

ça c'est la meilleur alors 🤣🤣🤣

tu te démonte pas toi

a t'entendre c'est toi qui m'a fait découvrir ce truc
les discussions sur xld et même sur DVP(plus de 10 ans en arrière ) prouvent bien qu'avant que ty pense j'y travaillais déjà dessus

bon bref c'est vraiment n'importe quoi tu veux pas écouter Tant pis
mais surtout ne t'accorde pas ce merite tu n' a rien à m'apprendre dans ce domaine et ce sujet en tout cas
après c'est moi le manipulateur 🤣

a llez je te laisse avec ta mauvaise foie

c'est la meilleur celle là 🤣🤣🤣🤣🤣
 

patricktoulon

XLDnaute Barbatruc
oui la dessus je suis d'accords " il n'y a que des resultats fiables "
a gauche c'est toi a droite c'est moi sans api sans rect et tout y cointi
la seule chose qui est commune a nos model c'est fonction la dwmapi.dll de redressage
et ça c'est moi qui te l'ai "fait savoir" je te l'ai rabâcher pendant plus de 2 pages de ce post pour que tu l'accepte et que tu comprenne que le redressage ne pouvait pas être fait pré affichage

bref la capture parle d'elle même

1666261576013.png
 

Dudu2

XLDnaute Barbatruc
T'en remets encore une couche ? C'est maladif ! T'es dur d'oreille quand même.
Je sais PARFAITEMENT, parce que c'est une ÉVIDENCE, que l'API des RECT sur le Handle ne peut fonctionner que sur un UserForm affiché. Et je n'ai pas besoin que tu le rabâches ni même que tu le dises une seule fois.

De plus je ne sais pas ce que ton image démontre, et je ne cherche pas à savoir parce que j'ai fait vérifier mon code chez d'autres utilisateur et ça marche. C'est comme ça mon @patricktoulon. Reproductible et vérifiable (et même very fiable 🤣 ).

Et pour finir, je ne me gène plus pour te causer à ta manière, et ça va pas te plaire autant que ça ne m'a pas plu ! Mais ça non plus tu ne le comprends pas.
 

Dudu2

XLDnaute Barbatruc
D'ailleurs, pour revenir sur le sujet du pré-affichage et pour mettre les points sur les 'i', ma fonction est même capable de faire ça (avec corrections des marges bien sûr) de manière transparente (visuellement). Ce que tes morceaux de code répartis à droite à gauche ne savent pas faire.
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Unload UserForm1
    Call PositionUserFormSurObjetFeuille(UserForm1, Target)
    UserForm1.Show vbModeless
End Sub
Ça marche parfaitement et je ne veux pas même pas en discuter.
 

patricktoulon

XLDnaute Barbatruc
je n'ai jamais dis que ca ne marchait pas
je t'ai dis que je fait sans c'est tout
tu parle de droite et de gauche tu sais même pas de quoi tu parle
un rect a un left, un rigth, un top et un bottom et moi je l'exprime en francais c'est tout
tu es de tres mauvaise foie je m'en etait deja apercu mais là franchement

bref tu fait aujourd'hui moi , ça fait 10 ans que je le sais 🤣
tu parle code reparti et toi non alors tes call appellent des passerelles
en fait tu fait la même chose avec tes windowrect de mes deux mais tu regroupe l'appel dans un call
moi je ne regroupe pas car chaque fonction peut être utilisées pour autre chose(un autre contexte)
🤣 🤣
allez bonne route
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
la seule chose qui est commune a nos model c'est fonction la dwmapi.dll de redressage
et ça c'est moi qui te l'ai "fait savoir"
Oui, et ça fait un bail dans cette discussion que je l'ai reconnu et que je t'en ai remercié.
D'ailleurs toi-même tu le tenais, disais-tu, d'un autre gars qui travaillait sur le même sujet..

Et dwmapi.dll est en effet la seule chose commune dans nos 2 codes.
Chacun est libre d'en faire ce qu'il veut pour ses besoins.
Comme je l'ai déjà dit, chacun son code et tout me monde est content.
 

Discussions similaires

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

Statistiques des forums

Discussions
315 168
Messages
2 116 931
Membres
112 922
dernier inscrit
Lobo-ASTUTO