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

Autres [Résolu]Affichage userform sur cellule ou activX version simplifiée a tester

patricktoulon

XLDnaute Barbatruc
bonjour suite a deux discussions ressentes j'ai repris ma méthode et je l'ai simplifiée
normalement avec cette méthode on est dédouané du calcul et prise en charge du freezepane et des scrollbars H et V

aucune Api window ou gdi !!
aucun chiffre en dur dans le code !!!
aucun calcul des scroll ou du freezepane
et l'userform est contraint dans le périmètre de la fenêtre application si il le dépasse
vous voulez bien tester
cellule a jumeler


activx a jumeler

 

Pièces jointes

  • placement usf.xlsm
    29.4 KB · Affichages: 27
Dernière édition:

patricktoulon

XLDnaute Barbatruc
merci a tout le deux de m'avoir suivi dans mon délire
ca a porté ces fruits
j'attends ta dernière mouture roland ,après je crois que l'on en a fait le tour
ce que je retiens
panes(x)
commencer par ce qui est mobile puis déduire ce qui est immobile et non l'inverse
 

Dranreb

XLDnaute Barbatruc
Information.
En cas de fractionnement de la fenêtre, et non plus seulement de volets figés, ma dernière procédure dans l'UFmCalend du poste #153 se comporte bien aussi. Bien sûr, l'UserForm s'affiche dans le premier fractionnement trouvé où une partie de la plage est visible et non dans d'autres où elle peut être visible également.
 

Dranreb

XLDnaute Barbatruc
Et si la cellule désignée pour l'affichage ne résulte pas d'une sélection ?
Note que je pourrais faire ma vérification en priorité dans l'ActivePane et seulement envisager les autres si elle n'y est pas.
 

patricktoulon

XLDnaute Barbatruc
re
bonjour danreb
c'est vrai il faudrait alors remplacer activepane par .panes.(x) en l’occurrence ici pour revenir a droite en bas ,l'activepane ce serait .panes(.panes.count)

quand a la cellule qui ne serrait pas désigné par une sélection ben .. ce qu'il y a dans l’événement du sheets tu le met dans une sub et tu remplace target par la cellule que tu veux
mais bon la on est dans une fraction et je vois pas trop l’intérêt de vouloir placer un userform dans une cellule désignée qui pourrait être présente dans plusieurs panes
je suis curieux de savoir quel est l'activepane sans sélection ???

EDIT je viens de tester c'est la 1
 

Dranreb

XLDnaute Barbatruc
Je suis curieux de savoir quel est l'activepane sans sélection ???
Ben justement c'était bien là le problème: il est complètemernt imprévisible !
M'en foutais moi de l'ActivePane, j'avais un bouton ActiveX pour afficher un calendrier dans une plage prévue à cet effet, point barre.
J'étais à 100 lieues de me douter au début de ma recherche sur ce sujet que lorsque les volets étaient figés le positionnement avec ActivePane dépendait de la dernière action faite n'ayant rien à voir avec ça. Je n'avait pas clairement idée de ce que ça voulait dire ActivePane en fait. Maintenant j'ai compris. Mais j'en tiens compte dorénavant au cas où ça dépendrait d'une sélection :
VB:
      Set Wnw = ActiveWindow: Set Pan = Wnw.ActivePane
      If Intersect(Pan.VisibleRange, Obj) Is Nothing Then
         For P = 1 To Wnw.Panes.Count: Set Pan = Wnw.Panes(P)
            If Not Intersect(Pan.VisibleRange, Obj) Is Nothing Then Exit For
            Next P
         If P > Wnw.Panes.Count Then Exit Sub ' Abandon si la plage n'est visible nulle part.
         End If
      Px72 = GetDeviceCaps(GetDC(0), 88) ' Nombre de pixels pour 72 points.
      Lft = Obj.Left: Trnq = Int(Lft / 3) * 3
      Lft = Pan.PointsToScreenPixelsX(Trnq) * 72 / Px72 + (Lft - Trnq)
      Px72 = GetDeviceCaps(GetDC(0), 90) ' Nombre de pixels pour 72 points.
      Top = Obj.Top: Trnq = Int(Top / 3) * 3
      Top = Pan.PointsToScreenPixelsY(Trnq) * 72 / Px72 + (Top - Trnq)
      K = Wnw.Zoom / 100: Rgt = Lft + Obj.Width * K: Bot = Top + Obj.Height * K
Remarque :
Px72 = GetDeviceCaps(GetDC(0), 88) ' Nombre de pixels pour 72 points. Pourrait aussi se calculer par :
Px72 = Int(100 * (Pan.PointsToScreenPixelsX(72) - Pan.PointsToScreenPixelsX(0)) / Wnw.Zoom + 0.5)
Mais je ne vois pas l'intérêt de faire comme ça, à moins qu'ainsi ça marche aussi sur MAC, ce dont je doute de toute façon.
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
Bonjour,

Dranreb, à moins que j'ai loupé qq chose, mais plus rien ne fonctionne avec cette macro !?

EDIT: erreur de ma part c'est OK ! effectivement j'avais loupé qq chose !
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
en fait activepane c'est soit la panes de la dernière cellule cliqué soit la 1

et une fois qu'une cellule a été cliqué a moins de fermer sans sauver ca reste celle ci
et tu a raison si obj n'est pas une sélection mais une cellule injectée par code vaut mieux mettre le test out off range je te l'accorde

pour ta formule dpi rien foutre du zoom et du 0.5
debloque le "/72" et tu a le coeff point to pixel off actual screen
Sub sss()
Set pan = ActiveWindow.ActivePane
Px72 = (pan.PointsToScreenPixelsX(72) - pan.PointsToScreenPixelsX(0)) ' / 72
MsgBox Px72
End Sub
VB:
Sub sss()
Set pan = ActiveWindow.ActivePane
Px72 = (pan.PointsToScreenPixelsX(72) - pan.PointsToScreenPixelsX(0)) ' / 72
MsgBox Px72
End Su
 

Roland_M

XLDnaute Barbatruc
re

milles excuses !
j'avais interverti les vars ! Me.Top = Lft: Me.Left = Bot (j'ai fais trop vite ..)
et là c'est OK !

par contre je ne comprend pas bien !?
dans ton calendrier la macro Posit n'est du tout pareil !?
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…