IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Positionner curseur sur une cellule sélectée Windows Excel VBA


Sujet :

Macros et VBA Excel

  1. #41
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut
    Salut !

    Patrick c'est normal car il faut "relativiser" avec le DPI de la résolution de l'écran !
    Car il faut déjà comprendre la définition d'un "point" en VBA telle que l'on peut la trouver dans son aide
    comme par exemple concernant la propriété UsableHeight, il y a un "lien" en bleu justement pour le mot points

    On peut lire « Un point est égal à 1/72ème de pouce » soit 72 pixels par pouce.
    Or si la résolution de l'écran est différente vu la taille des résolutions augmentant avec celles des dalles,
    par exemple sur un ordinateur portable à 125% la résolution est de 120 dpi (120 pixels par pouce),
    il faut donc relativiser le calcul vers ce 1/72è de pouce, l'unité point d'Excel, pour utiliser correctement
    par exemple la fonction VBA PointsToScreenPixelsX … Sans compter le facteur de zoom de l'affichage au sein d'Excel !

    Et expliquant les différences d'affichage entre un ordinateur avec une résolution à 125% et un autre aussi à 125%
    mais avec une profondeur de pixels (dpi) différente !
      0  1

  2. #42
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 430
    Points
    12 430
    Par défaut
    Cela est un excellent début, patricktoulon.
    Bravo pour ce pas-là.
    Relis maintenant tout ce que j'ai écrit plus haut et en particulier sur mon image et tu vas y arriver (lorsque tu auras compris le mécanisme exact du zoom).
      0  1

  3. #43
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    @oui marc d'où ma reflextion sur l'utilsation des api
    j'ai déjà une fonction toute prête avec les api que j'avais rédigé il y a 3/4 ans, elle fonctionne très bien encore aujourd'hui
    je m'en sert d'ailleurs dans ma derniere contribution "toolbar dans userform en moins de deux" pour placer mes popups
    mais comme unparia dit que l'on peut le faire sans api je suis curieux

    @unparia j'ai essayé aussi avec la prise en charge du zoom (plus le zoom est grand plus la marge d'erreur est importante )sur l'horizontal et faux sur le vertical

    je vais attendre ta contribution cet exercice étant juste motivé par la curiosité en voyant le code je comprendrais peut être ce que tu cherche a me dire

    edit:
    j'oubliais de preciser que
    mode a 125% ou 100 % la grille excel (je dis bien la grille pas la fenêtre excel ) ne change pas c'est ca qui est troublant
    en fait c'est le visiblerange qui change forcement la fenêtre est plus petite en mode 100% (detail plus fin)
    espérant que ca vous mettent la puce a l'oreille
      0  1

  4. #44
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 430
    Points
    12 430
    Par défaut
    espérant que ca vous mettent la puce a l'oreille
    Te pido perdon ? (tu préfères "May I beg your pardon" ?)
    La "puce à l'oreille", c'est bel et bien à toi, qu'elle a été tentée d'être mise, hein ... et c'est bel et bien moi, qui ai tenté de te la mettre à l'oreille, hein ... (en vain)
    Et tout tourne autour de ce mécanisme "miroir/resizer" qu'est celui du Zoom
    C'est quand, que tu y viens, à cette question à laquelle je t'ai convié au moins trois fois ?
    Si tu y viens enfin, à cette "moelle", ce "noeud", cette "base", etc... , j'aurai également gagné quelque-chose (l'occasion d e ne pas avoir à déposer une "contribution"... et la moitié de mon sang est d'origine corse).
    Viens-y et tu verras --->> tout sera extrêmement facile d'un seul coup.
      0  1

  5. #45
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 430
    Points
    12 430
    Par défaut
    Je vais te faire ce matin une petite offrande : celle d'une partie du temps dont je dispose pour que tout devienne très clair :

    A/ ma toute première "formule" montrée plus haut est l'une des parties d'une de mes procédures qui est paramétrée, plus "étendue/universelle" et qui permet des "placements" plus ciblés (pas uniquement sur la grille), ainsi que des "ancrages"
    B/ s'agissant simplement d'un placement sur la seule grille, il est plus simple d'utiliser comme tu le fais la coordonnée (0,0) de la grille.
    C'est donc cette méthode que je vais utiliser ici
    Dans un cas comme dans l'autre, toutefois, il faut prendre en compte le zoom choisi et donc comprendre bien ce qui suit :


    A un instant t, pour une même position de la fenêtre Activewindow (qui contient une barre de titre et la grille elle-même) à l'écran, les coordonnées en pixels à l'écran d'un point quelconque sur la véritable grille sont (pour chacune des deux coordonnées) la somme de :
    1) - la coordonnée correspondante du coin supérieur gauche de la grille par rapport à la coordonnée correspondante du coin supérieur gauche de l'écran (elle est en pixels)
    2) - la coordonnée correspondante du point par rapport à l'angle supérieur gauche de la véritable grille (elle est en points et à traduire en pixels)

    Parlons maintenant de la grille "miroir" affichée à l'écran :
    voici un petit dessin fait à la va-vite qui en montre le mécanisme :


    Nom : zoom.JPG
Affichages : 417
Taille : 47,2 Ko



    Ce mécanisme est TOUJOURS en oeuvre, y compris pour un zoom normal (de 100 %).
    L'utilisateur n'est JAMAIS sur la véritable grille. Ce qu'il fait à l'écran (sur le "reflet" de la véritable grille, est "transposé" par homothétie sur la véritable grille, dont l'image (graphique) est à son tour transposée sur le "reflet" à l'écran. Lors de cette seconde transposition, le coefficient du zoom choisi est appliqué à cette image. L'utilisateur a donc la parfaite impression d'agir directement sur la véritable grille, alors qu'il ne fait que se servir de son reflet pour agir sur la véritable grille (un peu comme un dessinateur qui utiliserait un pantographe)

    Revenons maintenant à la position à l'écran de notre point :
    a) la partie 1) ne dépend en aucun cas du zoom choisi
    b) seule la partie 2) est concernée par le zoom et doit donc faire l'objet de calculs arithmétiques simples :
    ---- à une position P0 sur la véritable grille correspond une position P1 sur son "reflet" telle que P0 = P1 * k où K est le facteur de zoom choisi (la valeur du zoom/100)

    ---- ce qui se traduit par ce code tout bête : (exemple avec un bouton de commande) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
    Private Sub CommandButton4_Click()
      Dim cible As Range
      Set cible = Range("D9")
      cur_en_place cible
    End Sub
    Private Sub cur_en_place(r As Range)
      Dim z As Double, pt_px As Double
      pt_px = 1.333
      z = ActiveWindow.Zoom / 100
      SetCursorPos ActiveWindow.PointsToScreenPixelsX(0) + (r.Left * pt_px * z), _
        ActiveWindow.PointsToScreenPixelsY(0) + (r.Top * pt_px * z)
    End Sub
    J'ai ici laissé en dur la variable pt_px (= 1.333) uniquement pour ne pas encombrer et "noyer" l'essentiel. Elle est à remplacer in fine par une petite fonction que j'utilise personnellement (non pour calculer ce 1.333, mais pour convertir directement des unités graphiques d'une espèce à l'autre)
    Voilà tout
    Amitiés.
      2  1

  6. #46
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour unparia
    merci pour ton cadeau matinal
    j'avais déjà essayé exactement la même chose car ca semble logique
    mais cependant une image parle mieux que des mot et en plus elle est animé
    je ne pense pas que même si j'ajoute ma fonction ptoPX qui utilise les api on arrive a la d9
    il serait intéressant d'avoir d'autre retour
    Nom : demo.gif
Affichages : 409
Taille : 515,8 Ko
      0  1

  7. #47
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    a mon tour de te faire un cadeau matinal

    comme je te l'ai dis et je crois que tu n'a pas percu ce que j'ai voulu dire peut etre me suis je mal expliqué alors en gros !!!

    excel vba ne prend pas en compte l'amélioration de l'affichage a 125%!!!!
    du coup forcement on a des données fausse
    donc si je prends en compte en dur dans le code cette petite difference ca match
    la question que je me pose depuis 4 ans et oui 4 ans !!! et je t'assure que je n'ai rien trouver la dessus même dans la communauté Microsoft
    comment détecter cette amélioration mon problème ( et celui d'autre forcement)est la tout tout simplement
    voila dans cette version j'ai bien mon curseur en haut gauche de D9
    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
    Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
    Private Sub CommandButton4_Click()
      Dim cible As Range
      Set cible = Range("D9")
      cur_en_place cible
    End Sub
    Private Sub cur_en_place(r As Range)
      Dim z As Double, pt_px As Double
      pt_px = 1.333
      'mon affichagewindow est 125% ce n'est pas commandable par vba je n'ai rien trouvé sur ce point depuis 4 ans
      'alors on va faire
      prorata = 125 / 100
      z = ActiveWindow.Zoom / (100 / prorata)
      SetCursorPos ActiveWindow.PointsToScreenPixelsX(0) + (r.Left * pt_px * z), _
        ActiveWindow.PointsToScreenPixelsY(0) + (r.Top * pt_px * z)
    End Sub
    c'est cette petite ligne qui nous separe
    alors qu'avec les api c'est pris en compte visiblement
      0  1

  8. #48
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 430
    Points
    12 430
    Par défaut
    Aucun problème chez moi.
    Il se peut que ta carte graphique soit configurée de manière personnalisée
    On va le savoir et corriger au besoin par l'utilisation des conversions.
    Peux-tu me dire ce que te retourne CHACUNE de ces deux msgbox sur TA machine :
    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 ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long
    Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, ByVal nIndex As Long) As Long
    Private Sub CommandButton5_Click()
      MsgBox Cvt_graph_units(1, "pixels", "h")
      MsgBox Cvt_graph_units(1, "pixels", "v")
    End Sub
    Private Function Cvt_graph_units(ByRef n As Single, vers As String, sens As String) As Single
        Dim hDC As Long, RV As Long, XPPI As Long, YPPI As Long
        hDC = GetDC(0)
        XPPI = GetDeviceCaps(hDC, 88)
        YPPI = GetDeviceCaps(hDC, 90)
        RV = ReleaseDC(0, hDC)
        If sens = "h" Then
          Cvt_graph_units = n * 1440 / 20 / XPPI
        Else
          Cvt_graph_units = n * 1440 / 20 / YPPI
        End If
        If vers = "pixels" Then Cvt_graph_units = 1 / Cvt_graph_units
    End Function
    Change au besoin (si 64 bits) les deux déclarations en entête du code)
      0  1

  9. #49
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour !

    Patrick, le code de Jacques ci-dessus est du même acabit de celui que j'ai créé il y a des années
    après avoir compris la définition du point en VBA comme décrit dans mon précédent post …
      0  1

  10. #50
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    oui marc c'est celui que j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    XPPI = GetDeviceCaps(hDC, 88)
        YPPI = GetDeviceCaps(hDC, 90)
    c'est juste pour contrôler
    unparia tu a oublié l'api getdc je vais la mettre et je reviens
      0  1

  11. #51
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    @unparia
    les deux sont a
    1, 666667
    c'est ce que j'utilise en dur pour convertir mes cellules en html pour les démentions

    ce qui serait bien c'est de pouvoir determiner ce prorata et cela universellement (je n'ais jamais trouvé) ni avec compec,base registre,api,commande CPL,etc)

    il doit bien y avoir un endroit ou cette donnée est enregistrée c'est obligé
      0  1

  12. #52
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 430
    Points
    12 430
    Par défaut
    les deux sont a
    1, 666667
    Et voilà !
    Tu n'es pas donc en 96 dpi !
    Je vais donc remplacer dans mon code ce qu'il faut pour y remplacer le "dur" 1.333.
    Et je vais le faire y compris pour faire face à un coefficient horizontal différent d'un coefficient vertical (car si si, c'est possible)..
    Ce sera après ma siestita, bien sûr (suis un vieux) .
    A +

    EDIT : j'aimerais par ailleurs que tu montres (en les faisant flotter) tant la barre de titre de la fenêtre application, que celle de la fenêtre active. On ne les voit actuellement pas sur ton "animation".

    (je n'ais jamais trouvé
    je viens de te montrer comment ...
      0  1

  13. #53
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    je comprends pas tres bien ta demande "flotter" mais si c'est de voir les caption complete voila

    Nom : demo.gif
Affichages : 696
Taille : 1,62 Mo
      0  1

  14. #54
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 430
    Points
    12 430
    Par défaut
    Je comprends pas tres bien ta demande "flotter" mais si c'est de voir les caption complete voila
    Non : sur ton image, on ne voit pas le caption (la barre de titre) de la fenêtre ActiveWindow.
    Fais-la flotter et déplace-la .
      0  1

  15. #55
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    ben dans la 2d capture tu la vois non? derrière il y a le bureau c'est tout
    sinon avec les apis oui c'est facile
    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 SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
    Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
    Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal HdC As Long, ByVal nIndex As Long) As Long
    Private Type RECT: Left As Long: Top As Long: Right As Long: Bottom As Long: End Type
    Const LOGPIXELSX = 88
    Const LOGPIXELSY = 90
    Const H = "H"
    Const V = "V"
     
    Sub test5()
    pluX = ActiveWindow.PointsToScreenPixelsX(0)
    pluY = ActiveWindow.PointsToScreenPixelsY(0)
    SetCursorPos pluX + DiM_PixelXy([D9].Left, H), pluY + DiM_PixelXy([D9].Top, V)
    End Sub
    Function DiM_PixelXy(prop, sens)
        Select Case sens
        Case H: DiM_PixelXy = prop * GetDeviceCaps(GetDC(0), LOGPIXELSX) / 72' (1440 / 20)'72 est une constante
        Case V: DiM_PixelXy = prop * GetDeviceCaps(GetDC(0), LOGPIXELSY) /  72'(1440 / 20)'72 est une constante 
        End Select
    End Function
      0  1

  16. #56
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 430
    Points
    12 430
    Par défaut
    ben dans la 2d capture tu la vois non?
    que nenni.
    Je vois bien la barre de titre de la fenêtre application, mais pas celle de la fenêtre activewindow.
    Pour la voir, il faut la faire flotter et la déplacer vers le bas. Comme je l'ai fait pour ma capture d'écran en mon message N° 26 .
    Et "derrière elle", ce ne sautait en aucun cas le "bureau", qu'il pourrait y avoir (elle est au sein de la fenêtre application et non sur le bureau).
    Je ne crois pas qu'elle ait été cachée volontairement (car t(u l'aurais mentionné), mais je veux m'en assurer. Je ne veux rien laisser au hasard.
      0  1

  17. #57
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    ah! OK ben voila ca marche aussi
    Nom : demo.gif
Affichages : 408
Taille : 1,54 Mo
      0  1

  18. #58
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    le problème restant étant toujours la capture de l'etat de la fenêtre d'arrangement de taille(les 125%)
    je viens encore de regarder avec WMI y a pas non plus
    on aura beau dire mais je crois que les apis sont obligatoires
    il suffirait que l'on trouve les opérandes qui te donne 1.333333333333333 pour toi et 1.66666666667 pour moi
    je vais regarder du coté des mises en page voir si je trouve rien de ce coté la
      0  1

  19. #59
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 242
    Points : 484
    Points
    484
    Par défaut
    Bonsoir,

    Une proposition pour calculer simplement un coefficient pt_px sans avoir à se préoccuper de la valeur du zoom, puis positionner la souris où on veut :

    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
        Dim x_ptpx As Double, y_ptpx As Double
        Dim l_pt As Double, h_pt As Double, l_px As Long, h_px As Long
     
        With ActiveWindow.ActivePane ' <== le ActivePane est important, mais ne me demandez pas pourquoi
            'largeur cellule en points
            l_pt = .VisibleRange.Cells(1).Width
            'hauteur cellule en points
            h_pt = .VisibleRange.Cells(1).Height
            'largeur cellule en pixels
            l_px = .PointsToScreenPixelsX(l_pt) - .PointsToScreenPixelsX(0)
            'hauteur cellule en pixels
            h_px = .PointsToScreenPixelsY(h_pt) - .PointsToScreenPixelsY(0)
        End With
     
        x_ptpx = l_px / l_pt
        y_ptpx = h_px / h_pt
     
        SetCursorPos ActiveWindow.PointsToScreenPixelsX(x_ptpx * cible.Left), _
                     ActiveWindow.PointsToScreenPixelsY(y_ptpx * cible.Top)

    Chez moi ça semble marcher nickel, et chez vous ?
      1  1

  20. #60
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    ah voila qui est intéressant
    c'est presque ca on est très proche mais pas tout a fait
    pour l'horizontal c'est quasi parfait
    pour le vertical c'est un peu court
      0  1

Discussions similaires

  1. se positionner sur une cellule
    Par titemireille dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/01/2008, 19h07
  2. cliquer sur une cellule qui m'ouvre un autre fichier excel
    Par booskap dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 17/08/2007, 11h08
  3. [VBA-Excel] DblClick sur une cellule
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/01/2007, 10h51
  4. [VBA-Excel]Supprimer une colonne entiere basee sur une cellule
    Par Tartenpion dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/10/2006, 22h08
  5. [Vba-Excel] Récupérer événement sur une cellule
    Par steps5ive dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/04/2006, 20h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo