et 2010 c'est 14
edit: sure à 100%, pour une fois que je connais un truc
et 2010 c'est 14
edit: sure à 100%, pour une fois que je connais un truc
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
bon ben cela doit etre correct alors
j'utilise un switch
XP office2007=17'averifier
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 Function PositionForm2(usf, rng) Dim Zooom#, PtToPx#, cadre#, system#, vers#, config# 'system = Round(Val(Split(Application.OperatingSystem, " ")(3))) 'vers = Val(Application.Version) config = Round(Val(Split(Application.OperatingSystem, " ")(3))) + Val(Application.Version) ' system + vers cadre = Switch(config = 17, 2, config = 18, 2, config = 22, 2, config = 24, 0, config = 25, -5, config = 26, -5) With ActiveWindow Zooom = .Zoom / 100 PtToPx = ((.ActivePane.PointsToScreenPixelsX(ActiveSheet.[A1].Width) - .ActivePane.PointsToScreenPixelsX(0)) / ActiveSheet.[A1].Width) / Zooom lleft = (.PointsToScreenPixelsX(rng.Left * PtToPx * Zooom) / PtToPx) + cadre ttop = .PointsToScreenPixelsY(rng.Top * PtToPx * Zooom) / PtToPx + cadre Wwidth = IIf(rng.Columns.Count > 1, rng.Width * (Zooom) - cadre * 4, usf.Width) Hheight = IIf(rng.Rows.Count > 1, rng.Height * Zooom - cadre * 4, usf.Height) End With PositionForm2 = Array(lleft, ttop, Wwidth, Hheight) End Function Sub TestUserformtopleftcell2() r = PositionForm2(UserForm1, [b3]) With UserForm1: .Show 0: .Left = r(0): .Top = r(1): End With End Sub
xp office 2010 =19 ' a verifier
w7 office 2010 =20
w7 office 2007=18
w10 office 2007=22
w10 office 2010=24
w10 office 2013=25
w10 office 2016=26
il ne reste plus qu'a mettre en ordre dans le switch tel que je l'ai commencé
si unparia passe par la si il peut nous donner la version obtenu de xp par application.operatingsystem ca serait sympa
je peut pas allumer mon vieux portable je trouve plus le chargeur
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
Sur mon pc: pleine écran ou fenetre
Sur le portable: Erreur 94 Utilisation incorrecte de Null
sur ligne cadre
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
re
en attendant que je conçoive un double swicth
tiens ca marchera pour tes deux pcs
Code : Sélectionner tout - Visualiser dans une fenêtre à part cadre = Switch(config = 15, -5, config = 17, 2, config = 18, 2, config = 22, 2, config = 24, 0, config = 25, -5, config = 26, -5)
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
sur le mien c'est pareil
sur le portable trop haut et trop à gauche équivalent à la capture dessus
c'est un truc de fou cette histoire
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
sur le PC où il y a le décalage vers la droite ? --->>si unparia passe par la si il peut nous donner la version obtenu de xp par application.operatingsystem ca serait sympa
et version Office :Windows (32-bit) NT 5.01
12.0
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.
sur le mien il faudrait dans le cadre 26,0 pour le top
et 26,-5 pour le left
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
Sur le portable 15,-2 pour le top et 15, 0 pour le left
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
Plus je réfléchis et plus je me dis personnellement que les différences entre une machine et l'autre sont plutôt à chercher dans la manière dont PointsToScreenPixelsX est calculé sur la machine. C'est lui, que je vois comme responsable réel.
J'aimerais bien que Nicolas fasse l'expérience suivante, qui reprend un excellent code de zenpbb qui, sur ma machine, positionne parfaitement le curseur dans l'angle supérieur gauche de la cible et ce, quelle que soit le mode d'affichage ou le zoom
J'ai ajouté de quoi voir autre chose ...
Peux-tu, Nicolas JACQUIN, ajouter n'importe où sur une feuille :
- un label Label1 et une textbox Textbox1
- ce code :
Puis lancer et me dire (avec des facteurs de zoom différents et des modes d'affichage différents) :
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 Set cible = Range("B4") With Label1 .Caption = "" .Top = cible.Top .Left = cible.Left .BackColor = RGB(255, 200, 200) End With With TextBox1 .Top = cible.Offset(1, 0).Top .Left = cible.Left .BackColor = RGB(255, 255, 255) .Text = ActiveWindow.Zoom & " " & (ActiveWindow.ActivePane.PointsToScreenPixelsX(cible.Offset(0, 1).Left) - ActiveWindow.ActivePane.PointsToScreenPixelsX(cible.Left)) / cible.Width End With With ActiveWindow.ActivePane SetCursorPos .PointsToScreenPixelsX(cible.Left), .PointsToScreenPixelsY(cible.Top) End With
- si la pointe du curseur est bien toujours là où il le faut. J'ai fait ce qu'il fallait pour avoir un curseur dont on voit la pointe, plutôt qu'un curseur "croix"
- ce que contient Textbox1
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, oui je vais faire ton test,
je voulais juste mettre ça avant pour dire à Patrick que le code suivant fonctionne sur mais 2 pc tel quel
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
26
27 Function PositionForm3(usf, rng) Dim Zooom#, PtToPx#, cadre#, clleft#, cttop#, system#, vers#, config# config = Round(Val(Split(Application.OperatingSystem, " ")(3))) + Val(Application.Version) ' system + vers cadre = Switch(config = 15, 0, config = 17, 2, config = 18, 2, config = 22, 2, config = 24, 0, config = 25, -5, config = 26, -5) clleft = Switch(config = 15, 0, config = 17, 2, config = 18, 2, config = 22, 2, config = 24, 0, config = 25, -5, config = 26, -5) cttop = Switch(config = 15, 0, config = 17, 2, config = 18, 2, config = 22, 2, config = 24, 0, config = 25, -5, config = 26, 0) With ActiveWindow Zooom = .Zoom / 100 PtToPx = ((.ActivePane.PointsToScreenPixelsX(ActiveSheet.[A1].Width) - .ActivePane.PointsToScreenPixelsX(0)) / ActiveSheet.[A1].Width) / Zooom lleft = (.PointsToScreenPixelsX(rng.Left * PtToPx * Zooom) / PtToPx) + clleft ttop = .PointsToScreenPixelsY(rng.Top * PtToPx * Zooom) / PtToPx + cttop Wwidth = IIf(rng.Columns.Count > 1, rng.Width * (Zooom) - cadre * 2, usf.Width) Hheight = IIf(rng.Rows.Count > 1, rng.Height * Zooom - cadre, usf.Height) End With PositionForm3 = Array(lleft, ttop, Wwidth, Hheight) End Function Sub TestUserformtopleftcell3() r = PositionForm3(UserForm1, [b3]) With UserForm1: .Show 0: .Left = r(0): .Top = r(1): End With End Sub Sub TestUserformDansPlage3() r = PositionForm3(UserForm1, [B3:F12]) With UserForm1: .Show 0: .Left = r(0): .Top = r(1): .Width = r(2): .Height = r(3): 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
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
re
c'est presque vraimachine. C'est lui, que je vois comme responsable réel.
cette fonction calcule la dimensions du point 0 de l'écran pour x ou y sauf que selon la config le shell de Windows ne prend pas tout en charge au niveau des fenêtres en ce qui concerne office
en effet un exemple concret
w7 ou w10 avec 2007 les userforms ont un cadres même si dans w10 on le voit pas
un autre exemple avec 2016 w10 chez nicolas le fait de maximiser ou mettre en mode fenêtre l'application ,et bien en mode maximiser l'application perds le cadre au sens propre du terme
avec w7 en mode maximser on le voit pas mais il est toujours
la particularité est la
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
nicolas
plutôt que faire 3 switch
je n'en ferait qu'un
par exemple pour toi
cadre=switch(.....................config=26,array(0,-5,x,x)
et a la place des "+cadre" je mettrais +cadre(0)'pour le top
+cadre(1) pour le left
etc........
mais surtout pour l'universalité mettre les négatif dans l'array comme ca se serait toujours "+cadre(x) " pour tout le monde
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 ok, mais moi pas assez doué pour ça
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
bon je viens de rentrer
t'es pas assez fort c'est une blague c'est une broutille regarde j'ai même éclaté la ligne switch et la variable cadre est maintenant un array(tableau)
@unparia toi c'est la config 17 pour xp avec 2007 ou 19 pour xp avec 2010
Nicolas toi c'est la 15 et 26
les éléments de l'array comme pour moi le (18) sont(+/-)pour le left , (+/-) pour le top , (+/-)pour le width , (+/-)pour le height
voila si vous voulez bien remplir vos arrays
après on réalignera la ligne switch sans tirets
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
26
27
28 [ Function PositionForm2(usf, rng) Dim Zooom#, PtToPx#, cadre, system#, vers#, config# system = Round(Val(Split(Application.OperatingSystem, " ")(3))) vers = Val(Application.Version) config = Round(Val(Split(Application.OperatingSystem, " ")(3))) + Val(Application.Version) ' system + vers cadre = Switch(config = 15, Array(x, x, x, x), _ config = 17, Array(x, x, x, x), _ config = 19, Array(x, x, x, x), _ config = 18, Array(2, 2, -6, -8), _ config = 22, Array(x, x, x, x), _ config = 24, Array(x, x, x, x), _ config = 25, Array(x, x, x, x), _ config = 26, Array(-5, 0, x, x)) With ActiveWindow Zooom = .Zoom / 100 PtToPx = ((.ActivePane.PointsToScreenPixelsX(ActiveSheet.[A1].Width) - .ActivePane.PointsToScreenPixelsX(0)) / ActiveSheet.[A1].Width) / Zooom lleft = (.PointsToScreenPixelsX(rng.Left * PtToPx * Zooom) / PtToPx) + cadre(0) ttop = .PointsToScreenPixelsY(rng.Top * PtToPx * Zooom) / PtToPx + cadre(1) Wwidth = IIf(rng.Columns.Count > 1, rng.Width * (Zooom) + cadre(2), usf.Width) Hheight = IIf(rng.Rows.Count > 1, rng.Height * Zooom + cadre(3), usf.Height) End With PositionForm2 = Array(lleft, ttop, Wwidth, Hheight) End Function Sub TestUserformtopleftcell2() r = PositionForm2(UserForm1, [b3]) With UserForm1: .Show 0: .Left = r(0): .Top = r(1): End With End Sub
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
au poil
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 Function PositionForm5(usf, rng) Dim Zooom#, PtToPx#, cadre, system#, vers#, config# system = Round(Val(Split(Application.OperatingSystem, " ")(3))) vers = Val(Application.Version) config = Round(Val(Split(Application.OperatingSystem, " ")(3))) + Val(Application.Version) ' system + vers cadre = Switch(config = 15, Array(0, 0, 0, 0), _ config = 17, Array(x, x, x, x), _ config = 19, Array(x, x, x, x), _ config = 18, Array(2, 2, -6, -8), _ config = 22, Array(x, x, x, x), _ config = 24, Array(x, x, x, x), _ config = 25, Array(x, x, x, x), _ config = 26, Array(-5, 0, 10, 5)) With ActiveWindow Zooom = .Zoom / 100 PtToPx = ((.ActivePane.PointsToScreenPixelsX(ActiveSheet.[A1].Width) - .ActivePane.PointsToScreenPixelsX(0)) / ActiveSheet.[A1].Width) / Zooom lleft = (.PointsToScreenPixelsX(rng.Left * PtToPx * Zooom) / PtToPx) + cadre(0) ttop = .PointsToScreenPixelsY(rng.Top * PtToPx * Zooom) / PtToPx + cadre(1) Wwidth = IIf(rng.Columns.Count > 1, rng.Width * (Zooom) + cadre(2), usf.Width) Hheight = IIf(rng.Rows.Count > 1, rng.Height * Zooom + cadre(3), usf.Height) End With PositionForm5 = Array(lleft, ttop, Wwidth, Hheight) End Function
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
et la 15 pour ton portable?????
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
A Nicolas JACQUIN
As-tu bien mis la déclaration de la fonction dans la partie déclarative du module de code :erreur 49 Convention d'appel de dll incorecte sur setcursorpos
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
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.
euh non
Code : Sélectionner tout - Visualiser dans une fenêtre à part Private Declare Function SetCursorPos Lib "user32" (ByVal x As Integer, ByVal y As Integer)
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
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