Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
tiens ton fichier de la ressource avec mes deux feuilles suplémentaires
tout est fait y a plus qu'a tester
tu verra que ta fonction objectpane avec le fractionnement non figé ne fonctionne pas

et c'est aussi pour ça que tu crois que topleftcell donne la pane (ce qui est faux) tout du moins pas en toute circonstance (ca n'est donc pas une méthode a retenir )

tout simplement par ce que dans une feuille figé le topleftcell d'une shape il ne peut y en avoir qu'une
tandis que dans une feuille fractionnée et non figé le topleftcell(visuellement parlant) il y en a 4 identique
 

Pièces jointes

  • VBA Positionner un Objet sur un Objet.xlsm
    99.3 KB · Affichages: 2
Dernière édition:

Dudu2

XLDnaute Barbatruc
Oui mais là je me demande s'il n'y a pas un effet d'optique car les CommandButtons ont des marges assez larges aussi.
Pour y voir clair il faut caler parfaitement les CommandButtons sur une cellule pour pouvoir se répérer avec le quadrillage en centrant parfaitement le leur petit rond haut gauche bien au milieur des lignes, et ça tu peux le faire aisément avec les flèches à droite du clavier.


Chez moi je n'ai aucun problème particulier, que ce soit en volets figés ou non car je pense que le décalage dû à l'épaisseur de la ligne de séparation des volets est parfaitement géré par Pan.PointsToScreenPixelsX / Y car je ne fais aucune correction là-dessus.



Refais le test avec ce fichier où j'ai calé tes boutons pour voir ce qu'il en est.
 

Pièces jointes

  • VBA Positionner un Objet sur un Objet.xlsm
    101.3 KB · Affichages: 2

Dudu2

XLDnaute Barbatruc
Et tout lecteur qui ne s'est pas lassé après ce 168ème Post est cordialement invité à tester également car les configs sont différentes et tout retour est le bienvenu avec info sur la version Windows et Office.
 

patricktoulon

XLDnaute Barbatruc
re
oui moi je dois avoir un peu l'ombre noire transparente visible qui est prise en compte
mais la correction que tu a faite semble faire l'affaire (visuellement parlant)
mais bon ce décalage n'est pas trop grave

c'est ton soucis de détection de panne pour les object qui est plus gênant dans une feuille fractionné

a ce jour je n'ai trouvé qu'une seule astuce efficace à 100% j'en ai 2 autres un peu bancales

tout simplement par ce que de l'object cliqué on a aucune possibilité réelle de remonter jusqu'aux panes savec une fonction ou propertie ou constante existante ( ça n'existe pas)
sauf erreur de ma part en tout cas je n'en connais pas
 

patricktoulon

XLDnaute Barbatruc
fait moi un fichier avec ta version d'excel avec une feuille fractionnée et non figée
avec un seul bouton qui est apparent sur les 4 panes
par ce que si tu me dis que ça marche chez toi ça veut dire qu'il y a encore une différence entre version d'excel
mais je pense pas
 

Dudu2

XLDnaute Barbatruc
c'est ton soucis de détection de panne pour les object qui est plus gênant dans une feuille fractionné
Je ne comprends pas pourquoi tu fixes sur l'impossibilité de trouver la Pane de l'objet.
L'objet peut effectivement être dans 1 ou plusieurs Panes selon les Scrolls effectués dans les Panes.
Avec un peu d'astuce on peut même le faire apparaitre l'objet sur les 4 Panes.

Et la fonction ObjectPane() retournera le 1er (ou le seul) Pane dans lequel apparait l'objet.
Et le positionnement se fera selon ce retour, tout simplement. C'est à l'utilisateur de savoir où il place ses affaires. S'il a mis l'objet dans plusieurs Panes par ses Scrolls, on ne va pas deviner pour lui quel Pane a sa préférence. Ce sera le 1er (ou le seul) !

De toutes façons il faut absolument savoir dans quel Pane apparait l'objet pour la 1ère fois pour que le décalage calculé par Pan.PointsToScreenPixelsX / Y soit réalisé correctement sur le 1er (ou le seul) Pane dans lequel apparait l'objet.

Et aucun de mes tests ne me montre le contraire.
Après, tu as ta vision du truc. Moi ce qui m'importe c'est que le positionnement soit correct.
 

Dudu2

XLDnaute Barbatruc
C'est à l'utilisateur de savoir où il place ses affaires. S'il a mis l'objet dans plusieurs Panes par ses Scrolls, on ne va pas deviner pour lui quel Pane a sa préférence
D'ailleurs on pourrait très bien identifier TOUS les Panes où apparait l'objet et prompter pour savoir lequel l'utilisateur veut choisir. Pourquoi pas à titre d'exercice ?
Mais sans doute pas dans une fonction générique de positionnement.
 

patricktoulon

XLDnaute Barbatruc
par rapport a ce que tu me dis
c'est là ou je comprends que t u n'a visiblement pas compris le truc de panes

le calcul, il n'y en a pas d'autre a faire que celui que tu fait avec la panes(1) sauf qu'il faut le faire avec la bonne pane

ça par exemple
x=activewindow.panes(1).pointstoscreenpixelsx(obj.left)

imaginons le bouton en panes(4)
et bien c'est
x=activewindow.panes(4).pointstoscreenpixelsx(obj).left

dans le calcul l’émargement par rapport aux panes précédentes est interne ça se fait tout seul
d’où l'utilité de connaître la panes
c'est d'ailleurs pour ça que tu a fait une fonction "ObjectPane"
et que tu a bien identifié le besoin même si tu n'a pas la méthode
si c'etait pas le but tu n'aurais pas fait cette fonction

sauf que "ObjectPane" ne fonctionne pas sur fractionnée simple

c'est pas une question de points de vue
mais si tu veux placer un object sur un autre object prends le bon calque (panes)
sinon ça ne marche pas ton truc

ou alors ajoute un argument pane a ta fonction de façon a ce que si tu ne peux chopper ta panne tu l'envoie en argument là oui
c'est dommage même si c'est pas ma facon de coder tout semble fonctionner a quelque milimili près(on s'en fou) la seule chose qui ne fonctionne pas à 100% c'est cette fonction "ObjectPane"

me permet tu d'essayer de greffer une de mes méthode ?
 

Dudu2

XLDnaute Barbatruc
Mais bon, à titre d'exercice pourquoi pas. Mais franchement dans une fonction de positionnement, le 1er Pane trouvé est le bon car faire un positionnement sur un objet réparti dans tous les coins ça relève de l'infraction aux bonnes mœurs.
 

patricktoulon

XLDnaute Barbatruc
RE
je regarde ton exercice après
juste pour te dire que j'ai pu greffer ma fonction sur le tien et ca marche
j'ai juste changer la fonction "ObjectPane" dans le code
et j'ai mis la tienne en commentaire
je l'ai fait sur le fichier de la ressource
 

patricktoulon

XLDnaute Barbatruc
re
positionnement sur un objet réparti dans tous les coins ça relève de l'infraction aux bonnes mœurs
détrompe toi ça arrive plus souvent
par exemple pour avoir plusieur parti d'un grand tableau a porté de vue imediate dans le quel il y aurait des boutons ou shape pour faire des actions sur ce dit tableau
bon maintenant je regarde ton exercice je sais pas ce que tu veux faire je vais relire l’énoncé
 

patricktoulon

XLDnaute Barbatruc
Tu peux essayer ce que tu veux. Je veux bien voir car je suis curieux.
C'est quoi ton code ?
ben regarde le post 176

et en plus je te l'avais déjà donné et tu m'a dis hier
blablabla visible range j'en ai pas besoins et de tout ces calculs foireux
et je suis casiment sur que tu n'a pas testé avant de parler
il va de soit que le code dans le post je l'ai supprimé
comme tu peux le voir ta fonction "ObjectPane est bien mis en commentaire

 
Dernière édition:

Discussions similaires

  • Résolu(e)
Microsoft 365 32 ou 64 bits
Réponses
46
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…