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 :

trouver les points x et y de la cellule "a1"


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut trouver les points x et y de la cellule "a1"
    bonjour,

    le titre n est pas forcement très claire ....
    donc voici quelques explications.

    Dans le cadre d un projet je doit récupérer l evenement mouse_move sur une feuille de calcul pour afficher une boite de dialogue lors du survol de certaines cellules (non prédéfinie pour l instant)

    Je recupère les coordonnée de la souris avec l api
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ' Position de X et Y par rapport a l'écran
         Private Declare Function GetCursorPos Lib "user32" ( _
        lpPoint As POINTAPI) As Long
    je arrete et demarre ma procédure a l aide de l' evenement "Worksheet_BeforeDoubleClick" ce dernier étant directement disponible dans une feuille

    donc voici le code complet qui affiche la position de la souris dans un textbox (crée avec la boite outil)

    ***demmarrage et arret par dbl_click

    dans une feuille
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    Option Explicit
    Dim WinWnd As Long, Ret As String, RetVal As Long, lpClassName As String
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
     
    ' Position de X et Y par rapport a l'écran
    Private Declare Function GetCursorPos Lib "user32" ( _
        lpPoint As POINTAPI) As Long
     
    ' Position de X et Y par rapport a la fenètre et a GetCursorPos
    Private Declare Function ScreenToClient Lib "user32" ( _
        ByVal hwnd As Long, _
        lpPoint As POINTAPI) As Long
     
    Private Type POINTAPI
        X As Long
        Y As Long
    End Type
    Dim stp As Boolean
     
    Private Sub Worksheet_Activate()
    Ret = "Microsoft Excel - evenement_mouse"
    'Search the window
    WinWnd = FindWindow(vbNullString, Ret)
    MsgBox WinWnd
    Call mouse_move
    End Sub
     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim res As Integer
    res = IIf(stp = False, "1", "0")
    If res = "1" Then
    stp = True
    Else
    stp = False
    Call mouse_move
    End If
    End Sub
     
    Sub mouse_move()
    Dim pos As POINTAPI
    Do While stp = False
        GetCursorPos pos
        ScreenToClient WinWnd, pos  '......ne sert a rien dans ce cas
        Me.TextBox1 = "Position Horizontale X = : " & pos.X & vbCrLf & _
                "Position Verticale Y = : " & pos.Y
                DoEvents
                If stp = True Then Exit Sub
                GetCursorPos pos
                ScreenToClient WinWnd, pos
    Loop
    End Sub
    comme vous avez pu vous en apercevoir j ai essayé d utiliser l api "screentoclient" pensant pouvoir recupérer les point d origine x=0 et y=0 quant le pointeur est en haut à gauche de la cellule "a1"

    cette api fonctionne tres bien sur un objet "userform" par contre dans le cas
    d une feuille de calcul les coordonnées x=0 et y=0 renvoyé par la fonction correspondent au coin supérieur gauche de la feuille et non pas des cellules.

    Je pourrais palier ce décallage en ajoutant un offcet a cette fonction, mais en suivant de l affichage des feuilles (commandbar,option etc..) cette valeur
    ne sera pas la meme.

    d ou (si vous m avez suivi) ma question comment retrouver les coordonnées de la cellules "a1".


    merci



    l

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut
    pas réellement envie de décrypter les macros, donc j'ai pas suivi
    coordonnées de la cellule "D8" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x = Range("D8").Left
    y = Range("D8").Top
    A+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    bonjour

    bien essayé

    mais la fonction screentoclient renvoie les coordonnée de la souris sur la feuille
    alors que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    x = Range("a1").Left
    y = Range("a1").Top
    j ai peut etre une idéé

    les coordonnées x et y de la cellules "a1" =

    pour y = largeur intitulé feuille xl + hauteur 1 er commandbar + hauteur 2 eme commandbar ..... * le nb de commandbar

    donc en bouclant sur ttes les commandbar je recupère leur hauteur

    enfin si qqun a plus simple

  4. #4
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonjour,

    je n'ai pas bien compris ce que tu recherchais,

    la position de la souris mais par rapport à quoi.
    Si ça peut t'aider, tu peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Application.Height
    'et
    Application.UsableHeight
    , ainsi que le .top et .Left de ta cellule.

    cordialement

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    bonsoir fred

    je voudrais avoir la position de la souris par rapport au
    .top et .left de la cellule "a1"

    alors qu actuellement ma fonction me renvoie les point x et y par rapport
    au coin sup gauche de la feuille de calcul


    voir explication + haut

  6. #6
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    SAlut
    Ben je sirais un truc comme ca mais g pas le temps de le tester

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Souris.x -Application.Left - Cellule.x
    Souris.y -Application.Top - Cellule.y
    Y'aura peut etre une erreur au niveau de la barre de fenetre en haut qui est peut etre pas prise en compte dans x et y cellule ... a verifier, il me semble avoir eu un soucis comme ca mais peut etre etait ce avec un autre language.
    A++
    QWaz

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    bonjour quazerty

    Souris.x - a comme reference le coin sup gauche de la feuille tandis
    que - Cellule.x a comme reference le coin sup gauche de la cellule "a1"

    pour mieux voir faite un essais avec le code posté +haut

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut
    quand j'ai dit que je n'avais pas forcément compris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim x
    Dim Y
    y = Range("A" & ActiveWindow.ScrollRow).Top + pos.Y
    x = Cells(1, ActiveWindow.ScrollColumn).Left + pos.X
    Doit être un truc comme ça que tu cherches
    A+

  9. #9
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    boujour à tous, Gorfael

    je ne sais pas si c'est ce que patbou cherchais, mais c'est ce que j'ai essayé de trouver.
    J'ai un peu honte, en te lisant.

    fred

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut
    Tant mieux, ça rééquilibre un peu le compte des fois ou je t'ai lu et je me suis trouvé un peu bête
    A+

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    bonsoir

    pour etre un peu plus concret voici le fichier joint
    activer la feuil3 pour voir le resultat
    Fichiers attachés Fichiers attachés

  12. #12
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonsoir,

    je n'ai toujours pas compris ce que tu voulais obtenir comme résultat.

    La position du curseur par rapport à la cellule A1?

    Actuellement, ton code ne fonctionne pas, réduis la fenêtre et place la en bas à droite de ton écran, tu verras que lorsque tu survoles la cellule C12, il n'y a pas de message, par contre en dehors de la fenêtre oui.

    Je crois qu'il faut utiliser une combinaison de GetWindowRect, de GetActiveWindow et d'autre chose pour la hauteur des menus. Mais il est trop tard pour ce soir.

    NB les macros pour supprimer les barres ne fonctionnent pas sur Excel 2007. peut être qu'un DisplayFullScreen serait plus "universel".

    Si tu ne veux plus voir le ruban sur Excel 2007, il faut jouer sur le fichier xml.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> 
        <ribbon startFromScratch="true"> <!-- c'est ce true qui masque le ruban -->
    ---------
    ---------
        </ribbon>
    </customUI>
    @+

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    bonjour fred

    le but de cette macro est expliqué dans le 1er post
    l explication est un peu longue je l avoue.
    et pas toujours compréhensible de 1er abord

    Le but final de ce projet sera d ' ouvrir un userform ,ce dernier sera alimenté des données de certaines cellules.
    l ouverture de ce userform sera declenché par le survol de cellules que j aurais prédéfini.


    Donc dans le fichier que j ai joint j ai voulu montrer que lorsque xl est en configuration "pas de bar de commande " ou "normal" les point x et y récuperer par la fonction GetCursorPos different par rapport au coordonnée des cellules.

    en effet les points x et y renvoyés par la fonction ont toujours comme reference le coin sup gauche de la fenetre active, donc quand je n ai pas de menu net pas de barre de titre ces points correspondent au coordonéé des cellules
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range("a1").top = GetCursorPos y et range("a1").left = GetCursorPos x
    du moins a la conversion en pixel pres (2eme pb) en cours de resolution
    j utiliserai pour cela une fonction de conversion

    donc le but de cette fonction est de faire la liaison entre les coordonnées des cellules et les coordonnées renvoyé par GetCursorPos qq soit la configuration d xl

    j espere avoir été plus claire

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    bonjour

    apres qq modification
    conversion pt/pixel
    voici joint le fichier qui fonctionne (version xl 2003)
    Fichiers attachés Fichiers attachés

  15. #15
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonjour,

    excuse moi je n'ai pas pu me connecter plus tôt.

    Ton exemple chez moi ne fonctionne pas j'ai le message lorsque je suis en B1.

    Peut=être parce que mes barres sont toujours visibles?

    @+

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    bonjour, fred

    je reviens sur le sujet apres qqjour de vacances bien méritées

    en effet la procedure ne fonctionnne que si les barres ne sont pas visibles
    avec la version xl 2003 je supprime et reactive les barres de menu sans pb

    par contre avec la version 2007 la suppression des barres ne marche pas
    apparement


    NB les macros pour supprimer les barres ne fonctionnent pas sur Excel 2007. peut être qu'un DisplayFullScreen serait plus "universel".

    Si tu ne veux plus voir le ruban sur Excel 2007, il faut jouer sur le fichier xml.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    bonjour,

    est ce que qqun a testé cette procedure avec xl2003 ?

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    bonsoir,

    1/pour que ma procedure "mouse_move" fonctionne il faut que j empeche le
    deplacement de la feuille avec la molette de la souris
    peut on inhiber l action de celle _ci?

    2/apparement sous xl2007 cette procedure ne fonctionne pas ,la suppression des barres ne fonctionnant pas, n ayant pas xl2007 ,pouvez vous me coufirmer cette information

Discussions similaires

  1. Comment trouver les points intermédiaires entre deux points
    Par pyo666 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 19/04/2010, 16h05
  2. Comment trouver les points des inflections pour une courbe
    Par mihaispr dans le forum Mathématiques
    Réponses: 3
    Dernier message: 30/09/2009, 14h25
  3. Trouver les points d'inflexion d'une courbe lissajou
    Par Ballim dans le forum Mathématiques
    Réponses: 7
    Dernier message: 23/09/2009, 12h31
  4. Trouver les points à l'interieur d'un contour
    Par Niko_de_bordo dans le forum Traitement d'images
    Réponses: 14
    Dernier message: 01/07/2009, 21h20
  5. Trouver les deux points les plus éloignés
    Par giloutho dans le forum Algorithmes et structures de données
    Réponses: 24
    Dernier message: 13/04/2008, 01h48

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