merci l'ami
merci l'ami
Merci d'exprimer votre message le plus clairement possible pour qu'on puisse vous aider
n'oubliez pas de cliquer sur et si cela vous a aidé pensez à voter
a ben mince alors je croyais que l'unité de mesure était en "pied" a ben ca alorsDésolé pour toi, mais pour VBA, les coordonnées de l'activeWindow sont établies, elles, en POINTS et par rapport non à l'angle supérieur gauche de l'écran, mais à celui de la fenêtre application.
Exactement comme sont établies, par exemple, les coordonnées d'un contrôle d'un userform.
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
Mais tu ne sais pas appliquera ben mince alors je croyais que l'unité de mesure était en "pied" a ben ca alors
Voilà l'image réduite et moins gourmande
Si tu la comprends (elle "parle") tu ne devrais avoir aucune difficulté à placer un userform sans passer par les pixels et des positions par rapport au desktop.
Je n'ai montré là que l'aspect concernant les ordonnées. Celui des abscisses est mille fois moins complexe.
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
Je vais de bon matin laintenant revenir sur ce que tu as écrit sans sourciller, patricktoulon, à savoir :
Ce ne peut être nickel , patricktoulon, qu'avec un facteur de zomm à 100 %, et ce : quelle que soit la résolution de l'écran.c'était une expression "au millimètre prêt"
bref chez moi c'est nickel
Il y a à cela une raison fort simple : -->>
L'l'homothétie parfaite n'existe qu'en mathématiques (géométrie) du seul fait que le point n'est pas matériel et n'a aucune dimension minimum.
-- Un pantographe, une loupe, un projecteur, des verres optiques, etc ... respectent parfaitement cette homothétie
-- Il ne saurait en aller de même avec l'utilisation d'un écran, dont la plus petite partie n'est pas, elle, élastique et a donc des dimensions minimums (celles d'un pixel). Il se trouve que par exemple et entre autres, certaines bordures ont une épaisseur de 1 pixel. Comment penses-tu passer à 0,75 pixels (cela n'existe pas) en facteur de zomm de 75% ? C'est d'ailleurs également un problème dans l'autre sens, en facteur de zoom non multiple entier de 100 .
Alors ? Il y a forcément un décalage (tout l'art est de le rendre le moins significatif possible) dans certains cas. Mais il n'y aura pas le "nickel" que tu dis.
Ce décalage sera plus ou moins important en fonction de la résolution de l'écran (puisque les dimensions d'un pixel en dépendent), mais il, sera toujours présent.
Que se passe-t-il selon toi en arrière plan lorsqu'est utilisé activepane ? Comment sont "estimées" les "corrections" à apporter pour avoir un meilleur "rendu". Que se passe-t-il par ailleurs lorsque l'on passe de conversion en conversion, sinon ce qui se passe en mathématiques lorsque l'on divise, puis multiplie par un facteur ?
Je te laisse à toutes ces réflexions et tes tâtonnements et attends maintenant ton code "corrigé" par "tâtonnements" pour te mettre en face d'une évidence.
A plus.
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
Bonjour unparia
alors tout ce que tu dis je l'entends bien
ta formule de calcul y a bien longtemps que je l'ai comprise bien avant que tu intervienne même
je sais très bien qu'un pixel n'est pas divisible
et chez moi avec un zoom de 30% a 200% j'ai un résultat visuel nikel
et ma formule est toujours la même
sauf que j'ai une!!!! ligne de code en plus pour la rendre universelle
cette ligne est ajouté car j'ai enfin trouvé le paramètre que toi visiblement ignore encore
ce paramètre est la raison du pourquoi ca marche chez l'un et pas chez l'autre
ce paramètre devra être aussi appliqué a ta formule pour être universel
j'attends d'autre retours(capture d'écran )que j'ai demandé sur un autre forum
une fois tous ces retours reçu je pourrais confirmer mais j'en suis déjà bien convaincu
c'est tellement bête que quand tu saura tu comprendra pourquoi j'ais dis précédemment regarder les capture chez moi et celle de Nicolas
et la c'est pas une puce que je t'ai mis a l'oreille c'est un gros scarabée bien bruyant tu peu pas le rater
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
Bonjour les copains,
un petit code qui fonctionne nickel pour ma pars et qui permet de remplacer l'api qui fonctionnait aussi, en attendant votre suite
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Const x As Double = 57 Const y As Double = 12.5 With UserForm1 .Show 0 .StartUpPosition = 0 .Left = ActiveWindow.PointsToScreenPixelsX(ActiveCell.Left) - y .Top = ActiveWindow.PointsToScreenPixelsY(ActiveCell.Top) - x End With End Sub
Merci d'exprimer votre message le plus clairement possible pour qu'on puisse vous aider
n'oubliez pas de cliquer sur et si cela vous a aidé pensez à voter
Ben ...
Il se trouve que je n'ai pas de problèmes non plus. Et sans conversions, avec juste les points de VBA !
J'attends ton "scarabée", donc ... Et le code "universel", dont je passerai les résultats à la loupe, puisque tu dis qu'il est "universel"...
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
Bonjour Nicolas JACQUIN
Que sont les valeurs en dur que tu indiques ?
EDIT : non, Nicolas : ton code ne fonctionne pas comme attendu du tout, y compris avec zoom 100%
Tout est décalé, surtout horizontalement (énormément)
Avec un zoom autre que 100% -->> pire
Et si la première cellule visible n'est pas la A1 -->> pire encore
Et si on n'affiche pas la barre des titres -->> un décalage de plus encore
Et si on a fait flotter et déplacer la grille (activewindow) -->> la catastrophe totale
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
Elles n'ont hélas pas grand chose à voir avec de tels décalages (vraiment énormes y compris en situation normale : sans déplacer et sans zoomer)vu qu'il y aurait des variantes selon les versions excel
On est loin de petites corrections nécessaires, là
Amitiés
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
selon les object que tu utilise ca devrait donner ceci
sauf que plus je montele zoom plus le décalage est important pas de quoi fouetter un chat comme on dit chez nous
je n'ai pas prévu les non displaybar comme c'est juste un exercice et que je préfère de loin ma formule
mais je l'ai fait pour que tu vois que j'ai bien compris le principe
quand j'aurais tous mes retours et si tout ce que j'ai remarquer est exact ( je viens d'avoir encore 3 confirmations ce matin)
je donnerais la mienne et tu comprendra pourquoi cette méthode ne peut pas être universelle
mais avec ma formule le décalage est tellement imperceptible
si tout se passe bien tu devrais etre bon et nicolas décalé si ca c'est pas un indice hein
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Sub test24() With UserForm1 Dim BarFormul#, BarHeading#, UsableW#, Ruban#, Rattrapage#, Zooom# BarFormul = .Height - .InsideHeight BarHeading = (.Height - .InsideHeight) UsableW = (Application.Width - Application.UsableWidth) Ruban = (Application.Height - Application.UsableHeight) - BarFormul Rattrapage = (.Width - .InsideWidth) Zooom = (ActiveWindow.Zoom / 100) .Show 0 .Left = Application.Left + ActiveWindow.Left + UsableW + ((BarHeading + 2) * Zooom) + ([b3].Left * Zooom) .Top = Application.Top + ActiveWindow.Top + Ruban + BarFormul + (BarHeading * Zooom) - Rattrapage + ([b3].Top * Zooom) End With
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
Ah bon ! Heureux de l'apprendre ...mais avec ma formule le décalage est tellement imperceptible
Il se trouve qu'il est très nettement visible (pas du tout "imperceptible") sur ma machine, tant horizontalement que verticalement (plus de 5 fois supérieur au mien !)
Tu expliques cela comment ? Avec un autre "scarabée" ?
Tu sais quoi, patricktoulon ? tu as pigé (et appliqué) une partie (la hauteur "intouchable" qui n'est pas QUE le "ruban") de ce que je t'ai dit et du dessin que je t'ai fait, mais a "zappé" tout le reste !
Il y a des flèches partout, sur mon dessin ... et des commentaires à bien lire.
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
autant pour moi
c'est toi qui doit avoir le décalage et Nicolas qui doit être bon
je n'en dis pas plus pour le moment j'attend la fin des test avec toutes versions confondues
ce serait bien que nicolas passe par la et fasse le test pour voir
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
avec ton code tel quel ça me donne ça, capture plein écran
Merci d'exprimer votre message le plus clairement possible pour qu'on puisse vous aider
n'oubliez pas de cliquer sur et si cela vous a aidé pensez à voter
oui j'avais pigé depuis longtemps
app.top+ruban =intouchable
displaybar =oui ou non
si displayheading=non alors pas de colonne de numéro de ligne pour le left
c'est pas compliqué
mais tout ca avec ma formule je le fait en une fois
mais selon un cas très précis de configuration logiciel il faut rattraper
et la je viens de te le donner l'indice
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
Je vois que ce scarabée a des difficultés à sortir de sa bouse ...
On va l'y aider :
Commencer par mettre les propriétés qui ne faussent pas :
les deux les plus évidentes --->>
BorderStyle = fmBorderStyleNone
SpecialEffect = fmSpecialEffectFlat
(Et ce n'est pas tout).
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
non je suis pas dans la bouz j'au eu une inter toute la journée samedi pouurri!!!!!
j'ai testé élément par élément avant de faire l'assemblage et tout ce qui doivent être touché par le zomm ne répondent pas correctement en fonction du pourcentage
et avant que tu réponde sache que j'ai très bien compris la logique
ta beau tourner ca dans tout les sens c'est pas une solution universelle
un seul bemol et de taille celui la c'est que tu utilise les cotes userform pour trouver une cote qui est dans l'activewindow
parti de la ca peut être bon comme tout mauvais notamment entre W7 et W +++ si ca c'est pas indice
parti de la ta logique n'est pas bonne
je te signale quand même qu'avant de parler j'ai testé sur W7 windows 10 et windows 8.1
pour être honnête j'ai installé Windows 10 sur un partition j'ai donc pu testé moi même, même si j'ai eu les retours qui confirment ma théorie
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
Tu voudras bien m'excuser, mais j'attends donc ton code "universel" que je passerai à la loupe.
Tant que cela ne sera pas là : ce ne sera que du baratin et rien d'autre, si tu le permets ...
J'attends donc tout simplement ce "petit" cela (ton "scarabée", quoi ...)
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
Bonjour les amis,
j'ai passé la nuit dessus après un essai un peu laborieux, j'ai réussi, pour moi ça fonctionne au millimètre (Windows 10 et Excel 2016)
et avec n'importe quel zoom
J'attends vos réactions
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Private Declare Function GetDC Lib "user32.dll" (ByVal hWnd As Long) As Long Private Declare Function GetDeviceCaps Lib "gdi32.dll" (ByVal hdc As Long, ByVal nIndex As Long) As Long Function PositionForm(Form As Object, rng As Range) Dim K As Double, Z As Double Z = ActiveWindow.Zoom / 100 K = GetDeviceCaps(GetDC(0), 88) / 72 K = GetDeviceCaps(GetDC(0), 90) / 72 lleft = ActiveWindow.PointsToScreenPixelsX(rng.Left * K * Z) / K - 5 ttop = ActiveWindow.PointsToScreenPixelsY(rng.Top * K * Z) / K PositionForm = Array(lleft, ttop) End Function Sub TestUserform() r = PositionForm(UserForm1, ActiveCell) With UserForm1: .Show 0: .Left = r(0): .Top = r(1): End With End Sub
Merci d'exprimer votre message le plus clairement possible pour qu'on puisse vous aider
n'oubliez pas de cliquer sur et si cela vous a aidé pensez à voter
Bonjour Nicolas JACQUIN
D'abord : Je te félicite pour le travail que tu as fait. Il mérite totalement ceci -->>
Le résultat obtenu est parfait en ce qui concerne le positionnement vertical
Il ne l'est pas (plusieurs pixels de décalage) en ce qui concerne le positionnement horizontal
Ton résultat (également exact en position verticale sur ma machine) est la preuve de ce que les calculs (déjà en ce qui concerne la position verticale) ne dépendent absolument pas d'un "scarabée" d'une version
Je te tire personnellement mon chapeau pour t'y être mis. Tu es courageux et ne t'éparpille pas.
- le défi reste d'y parvenir sans utilisation de fonctions de l'Api de Windows
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager