Je suis honteuxEuh... Moi c'est Franck en fait
Mais il y aura encore un doute (il est en 120 dpi et toi en 96 dpi)Donc, Patrick, stp, peux tu me faire passer le classeur ou tu constates ce décalage?
Je suis honteuxEuh... Moi c'est Franck en fait
Mais il y aura encore un doute (il est en 120 dpi et toi en 96 dpi)Donc, Patrick, stp, peux tu me faire passer le classeur ou tu constates ce décalage?
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.
re
bonjour jacques
je suis toujours en 120 dpi sinon la résolution est tellement fine que les object sont trop petit sur mon écran 82 cm je vois queudale
j'ai laissé dedans quelques macro concernant GetSystemMetrics cela pourrait t'intéresser aussi quoi que sans aero difficile de comparer
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
j'ai fait des testes avec une shape "msorectangle" en la positionnant avec activecell.top et activecell.left
selon les zoom et la colonne ou ligne on a un défaut
pour vérifier que ce ne soit simplement pas un écart d'affichage je fait tout de suite après un
bingo: il y a bien un soucis de décalage car chez moi qui ai le décalage "trop court pour left et trop court pour top" avec le userform j'ai le même avec la shape
Code : Sélectionner tout - Visualiser dans une fenêtre à part msgbox shap.topleftcell.address
autrement si je suis sur D7 comme activecell le message me donnera "C6"
edit :et si met le line.weight a 0 je suis bon
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
franck non chez moi le decalge apres dwm est plus qu'un tier de pixel il est d'au moins 1.5 "POINTS" on le voit bien sur la capture au niveau de la vertical rouge
après jacques a peut être raison ce décalage sur certaines colonnes peut varier d'un pc a l'autre
chez moi fixe et écran 82 dpi 120 w7 64 2007 32
et portable hp pavillon écran 15 pouce dpi 96 W 7 64 2007 32
= même décalage
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
Patrick,
Ton décalage est bien réel, je l'ai constaté.
Qu'est ce qui est en cause de ce décalage?
La méthode PointsToScreenPixels (X ou Y peu importe) qui arrondit :
Cela nécessite donc un ajustement en fonction de :Convertit une mesure horizontale de points (coordonnées du document) en pixels d'écran (coordonnées de l'écran).
Renvoie la mesure convertie en tant que valeur de type Long .
- pour PointsToScreenPixelsX ==>De la largeur des colonnes dans le VisibleRange
- Pour PointsToScreenPixelsY ==> de la hauteur des lignes dans le VisibleRange
Autrement dit, une rustine...
Cordialement,
Franck
a bon je suis rassuré ,je croyais être tout seul ,c'est donc bien un réel décalage
ha ! non !!pas une rustine sinon a quoi cela sert d'aller chercher DWM
je viens de le découvrir car pour être honnête ca m'a pas interpelé jusqu'à maintenant
LE GRIDLINE
FAIT LE TEST met toute les bordures des cellules que tu vois a l'écran en bordure thick le decalage change
et sans bordure avec juste le gridline bleu office
si tu compte 1 pixel par colonne pour le gridline left jusqu'à activecell et que tu l'enlève a pointstoscreenpixel avant calcul ppx c'est bingo!! chez moi
autrement dit même avec aucune bordure chaque ligne du gridline représente 1 pixel
je vois que ca , reste a vous de tester et de confirmer
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
oui c'est bien ca 1.5 point
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 suis curieux de voir ce décalage sur W10 après DWM( plus ou moins)
pour répondre a ta question et même a jacques sur la suspicion d'une éventuelle erreur avec pointtoscreenpixels effectivement l'arrondi peu en être la cause
mais il faut savoir aussi que dwm ne modifie pas que la caption des window il modifie aussi leur intérieur y compris excel application
pour s'en donner le cœur net il te suffit de faire un msgbox sur pointstoscreenpixel(0) avec l'application maximisée et l'activewindow aussi et cela en mode aéro et basic ou oldstylewindow
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
Dwm n'y est pour rien.
J'en veux pour preuve que j'arrive à reproduire ce "bug" sans aero.
@Jacques, si tu es curieux de le reproduire, voici comment :
- règle la hauteur des lignes du VisibleRange (RowHeight) sur 14,4
- augment le zoom pour mieux constater
- toutes les 3 ou 4 lignes tu assisteras à un léger décalage
C'est beaucoup moins flagrant sans aero et en 96 DPI, mais c'est là tout de même.
Cordialement,
Franck
re
sans aero je suis déjà a 14.4 pour les cells
sans aero pointstoscreenpixels chez moi est nickel! je n'ai besoins de rien ajouter ou enlever
j'ai tester avec un row a 15 ca reste nickel
j'ai testé avec un row a 17 ca reste nickel
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
Il est temps (47 pages) de comprendre enfin (il n'est jamais trop tard) ce que j'ai dit plusieurs fois :mais il faut savoir aussi que dwm ne modifie pas que la caption des window il modifie aussi leur intérieur
Est créé par aero un rectangle sans hwnd (ce n'est pas une fenêtre Windows à part entière) qui recouvre totalement et en débordement la surface occupée par le rectangle de la fenêtre de l'userform.
Pour le reste : j'aimerais assez que l'on cessât enfin de mélanger les torchons et les serviettes et qu'on sût les séparer pour traiter ISOLEMENT une chose (le résultat purement Excel de pointstoScreenPixelsX/Y) et l'autre (la détermination par aero du placement du rectangle étendu créé par aero à des coordonnées spécifiées).
Je vais m'attacher à inventer un exercice simple où ni le zoom de Excel, ni Excel lui-même n'auront leur mot à dire. Ce sera à mes yeux la seule manière de vous forcer à isoler le cas positionnement d'un rectangle étendu d'une fenêtre aero.
Je reviens ...
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.
Voilà --->>
Exercice :
2 userfoms avec leur propriété startupposition = 0
code :
Voilà : Excel est ainsi totalement ignoré et les seules instructions concerneront le seul aspect placement compte tenu de aero.
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 Private Sub CommandButton1_Click() With UserForm1 .Top = 400 .Left = 100 .Width = 100 ' ----->> faire varier comme on le souhaite ces valeurs .Height = 100 .Show 0 End With placer_userform2 End Sub Private Sub placer_userform2() '.... écrire ici vos lignes de code pour atteindre le résultat voulu (celui '..... capture d'écran '.... UserForm2.Show 0 End Sub
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.
Ah oui -->> et si patrick continue à penser qu'il y aura interférence avec une modification du fait de la fenêtre application --->>
Lever totalement le doute en :
1) créant une macro (au lieu du bouton de commande)
2) lancer en réduisant totalement la fenêtre application ou faire flotter celle-ci tout en bas
Elle n'aura définitivement plus rien à voir, hein ... ni son zoom, hein ...
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.
Exercice réussi?
Avec aero :
Pièce jointe 295367
Sans aero :
Pièce jointe 295372
Avec le même code bien sur.
Cordialement,
Franck
A Franck : pas vraiment (léger décalage visible).
Et cela m'inquiète.
Montre le code écrit (pour le cas où ...)
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.
Pour être plus précis :
le code doit, dans l'ordre :
1) afficher userform1
2) déterminer alors les coordonnées (en points) de l'angle inférieur droit du rectangle étendu ( le top du rectangle + le height du rectangle en ordonnée et le left du rectangle + le width du rectangle en abscisse
3) placer alors comme on le sait (coordonnées nécessaires de l'userform lui-même - les deux correctifs déterminés) le userform2 aux coordonnées déterminées en 2)
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.
Bon ...
J'ai une bonne et une mauvaise nouvelle à annoncer, accompagnées d'une démonstration.
L'idée n'est pas de moi, mais celle d'un membre d'une "équipe" tierce.
Le responsable de ce décalage est VBA et n'a rien à voir ni avec les cellules, ni avec le zoom et énormément à voir avec ce qui paraît être une question d'arrondis, Y COMPRIS SANS AERO, Y COMPRIS SOUS XP.
Je dois maintenant aller profiter du "tournant" entre marée basse et début du montant.
Je vous exposerai donc tout cela demain matin.
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.
avec aero
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
21
22
23
24
25 Private Sub CommandButton1_Click() With UserForm1 .startupposition = 0 .Top = 400 .Left = 100 .Width = 100 ' ----->> faire varier comme on le souhaite ces valeurs .Height = 100 .Show 0 cadre = .Width - .InsideWidth End With placer_userform2 cadre End Sub Private Sub placer_userform2(plus) With UserForm2 .Show 0 .startupposition = 0 .Width = 100 ' ----->> faire varier comme on le souhaite ces valeurs .Height = 100 .Top = UserForm1.Top + UserForm1.Height + plus + 2 .Left = UserForm1.Left + UserForm1.Width + plus + 2 End With differencetop = plus + 2 differenceleft = plus + 2 MsgBox "diference top " & differencetop & vbCrLf & "difference left " & differenceleft End Sub
sans aero avec le même code
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
@ Patrick :
C'est bien, mais comment calcule tu ton "plus"??????
@Jacques :
Oui...
Mais depuis le début de cette discussion, on ne peux émettre que des suppositions...
Peut-être est-t'il temps de faire appel à d'autres langages de programmation.
Je penses notamment à VB.Net.
Quitte à paraître une fois de plus stupide, ne peux t'on pas demander à quelqu'un maîtrisant ce langage (whismeril me semble judicieux...) de :
- tester la coordonnées dans l'écran d'un point quelconque,
- de tester (en se référant à Excel) ce même point avec la méthode pointtoscreenpixel
- de réaliser un autre test qui ne me vient pas parce que je n'y connais rien.............................
Cela pourrait vraiment mettre hors de cause certains paramètres du problème.
Cordialement,
Franck
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