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. #721
    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 422
    Points
    12 422
    Par défaut
    puré
    c'est exactement ce que j'ai fait dans un do loop pour avoir le même handle (hwnd)
    Laisse le "puré" de côté et :
    - quitte toute autre appli et ouvre ton seul classeur
    - fait flotter la fenêtre application (déplace-la suffisamment vers le bas de quelques "centimètres")
    - place ton "userform" à environ 1 "centimètre" des bords supérieur et gauche de ton écran (de sorte à ce que l'on soit certain que son conteneur est le desktop et pas autre chose)
    puis donne-moi alors :
    - le hwnd obtenu en plaçant le curseur tout contre (très légèrement en dessous et très légèrement à droite) de l'angle supérieur droit de la barre de titre de ton "userform" apparent
    - le hwnd obtenu en plaçant le curseur sur le "userform apparent", juste en dessous le sa barre de titre
    - le hwnd de l'userform réel (obtenu, LUI, par FINDWINDOWS et non par Windowfrompoint, hein ...

    Tout cela, dans la même session, bien évidemment.
    Et je dis bien les hwnd et non les hdc

    Fais exactement cela et donne moi ces différents hwnd. C'est la seule chose qui pourra "me parler" et rien d'autre (aucune propriété de positionnement, etc ... ne servirait à quoi que ce fût, hein ...)!
    Ou tu fais cela, donc, et tu auras mon avis enfin éclairé par du "concret" compréhensible et interprétable, ou tu continues "autrement" et tu continues alors seul avec tes "méthodes" ...
    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.
      0  1

  2. #722
    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
    EXERCICE UNPARIA


    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
    Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
    Private Declare Function WindowFromPoint Lib "user32" (ByVal xpoint As Long, ByVal ypoint As Long) As Long
    'exercice 1:- le hwnd obtenu en plaçant le curseur tout contre (très légèrement en dessous et très légèrement à droite) de l'angle supérieur droit de la barre de titre de ton "userform" apparent
    'exercice 2:- le hwnd obtenu en plaçant le curseur sur le "userform apparent", juste en dessous le sa barre de titre
    'exercice 3:- le hwnd de l'userform réel (obtenu, LUI, par FINDWINDOWS et non par Windowfrompoint, hein ...
    Sub testunparia()
    'ppx=
    With CreateObject("WScript.Shell"): ppx = .RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI") / 72: End With
     
     With Application: .Left = 50: .Top = 100: End With
     
      With UserForm1:  .Show 0:  .Left = 10: .Top = 20: End With
     'hwnd par findwindow
     handle1 = FindWindow(vbNullString, UserForm1.Caption)
    'on place le curseur selon l'exercice 1
    SetCursorPos (UserForm1.Left + UserForm1.Width) * ppx + 5, (UserForm1.Top * ppx - 10)
    exercice1 = WindowFromPoint((UserForm1.Left + UserForm1.Width) * ppx + 5, (UserForm1.Top * ppx - 10))
    SetCursorPos (UserForm1.Left + UserForm1.Width) * ppx - 10, (UserForm1.Top * ppx - 25)
    exercice2 = WindowFromPoint((UserForm1.Left + UserForm1.Width) * ppx - 10, (UserForm1.Top * ppx - 25))
    exercice3 = FindWindow(vbNullString, UserForm1.Caption)
    MsgBox "exercice1 handle obtenu = " & exercice1 & vbCrLf & "exercice2 handle obtenu = " & exercice2 & vbCrLf & "exercice3 handle obtenu = " & exercice3
     
    End Sub
    RESULTAT
    Nom : Capture.JPG
Affichages : 279
Taille : 255,5 Ko
    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
      0  1

  3. #723
    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 422
    Points
    12 422
    Par défaut
    Je n'ai pas regardé ta méthode de relevés des hwnd. Je me contente des résultats que tu reportes.

    Ce qui montre on ne peut plus parfaitement et indiscutablement, Patrick, que :
    1) le "userform apparent" (pas le vrai) est bel et bien une fenêtre windows à part entière
    2) que la fenêtre du "userform apparent" est distincte de celle du userform réel

    (Je m'en doutais bien ...non ? )
    Tu as maintenant là, de manière claire, les raisons pour lesquelles tu ne parviendras jamais à obtenir, sans utilisation du hwnd (et donc api) de la "fenêtre apparente", le top de cette fenêtre/"userform" apparente, qui n'est pas du tout celle du véritable userform.

    Tu as donc mon salut et mon "bonne chance" réitérés.
    Tu peux maintenant toujours courir ...

    Ceci étant maintenant très clair, je te réserve (après ma siestita) un message qui te montrera la futilité absolue de ce que tu cherches à faire.
    Je te réservais cela pour la fin et ce sera une cerise sur le gâteau de 36 pages contreproductives.
    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.
      0  1

  4. #724
    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
    tu raconte n'importe quoi
    ca ne fait que démontrer ce que l'on observe depuis le début a savoir un décalage entre ce qui est affiché et ce qui est calculé
    il est null besoins de faire ce test supplémentaire pour observer cela on le sais depuis longtemps
    c'est la meilleur celle la maintenant il y a un userform imaginaire et un reel mais ou tu va comme ca hein !!????

    le model précèdent que j'ai adapté avec windowsfrompoint le montre bien
    je le corrige pour Nicolas normalement ca devrait donner quelque chose de correcte ne pouvant plus tester sur W10 je vais devoir attendre le retour de Nicolas

    version incluant config W10
    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
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function WindowFromPoint Lib "user32" (ByVal xpoint As Long, ByVal ypoint As Long) As Long
    Sub test_userform_replace()
        Dim r As RECT
        'With CreateObject("WScript.Shell"): ppx = .RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ThemeManager\LastLoadedDPI") / 72: End With
        With CreateObject("WScript.Shell"): ppx = .RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI") / 72: End With
        With ActiveWindow
            X = (.ActivePane.PointsToScreenPixelsX([D3].Left)) / ppx
            Y = (.ActivePane.PointsToScreenPixelsY([D3].Top)) / ppx
            With UserForm1: .Show 0:
                handle1 = FindWindow(vbNullString, UserForm1.Caption): handle1bis = handle1
                .Left = X: .Top = Y:
                Do
                    handle2 = WindowFromPoint((X * ppx) - a, (Y * ppx) - a):
                    handle2bis = WindowFromPoint((X * ppx) + a, (Y * ppx) + a):
                    a = a + 1
                Loop While handle1 = handle2 Or handle1bis <> handle1bis
                a = IIf(handle1bis <> handle1bis, -1 * a, 1 * a)
                .Left = X + a / ppx: .Top = Y + a / ppx
            End With
        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
      0  1

  5. #725
    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 422
    Points
    12 422
    Par défaut
    c'est la meilleur celle la maintenant il y a un userform imaginaire et un reel mais ou tu va comme ca hein !!????
    Non m'sieu, non : pas un réel et un imaginaire (je te l'ai dit je ne sais plus combien de fois) : LE userform et une autre fenêtre, dessinée par dessus.
    Tu as :
    - un userform (et un seul). Dans ton test, sa fenêtre a pour hwnd : 1049364
    - une seconde fenêtre, très vraisemblablement conçue par les outils de Directx, qui est affichée par dessus, qui n'est pas l'userform lui-même et qui a pour hwnd dans ton test : . 65834
    Cette seconde fenêtre n'est pas du tout le Userform lui-même. C'est ELLE, avec SES dimensions, qui est affichée et visible à l'écran. Elle occulte la fenêtre de l'userform lui-même.
    Cette manière (utilisation de Directx pour afficher une seconde fenêtre et lui appliquer un thème, une transparence éventuelle, etc ...) est d'ailleurs le fondement sine qua non même de aero (pas de aero si pas de traitement directx sur la machine).

    Il est malheureux que cela t'échappe. Les résultats du test le montrent de manière indiscutable.

    Je te laisse à tes méditations mal conduites et incomplètes (sauf un dernier message un peu plus tard, ... comme promis ...)

    EDIT j'avais (corrigé) inversé les hwnd correspondant à chaque fenêtre.
    Cela ne serait pas arrivé sans ta manie de "balancer" des images (au lieu de rapporter simplement les résultats demandés) qui obligent à prendre note car on ne voit plus l'image lorsque l'on répond.


    Et par ailleurs : lorsque tu désactives aero, la seconde fenêtre (celle de directx) ne vient tout simplement plus occulter celle de l'userform lui-même (pour le cas où tu avais besoin également de cette explication).
    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.
      1  1

  6. #726
    Membre éclairé Avatar de Nicolas JACQUIN
    Homme Profil pro
    .
    Inscrit en
    Avril 2014
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : .
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2014
    Messages : 556
    Points : 790
    Points
    790
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    voila adapté
    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
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function WindowFromPoint Lib "user32" (ByVal xpoint As Long, ByVal ypoint As Long) As Long
    Sub test_userform_replace()
        Dim r As RECT
        'With CreateObject("WScript.Shell"): ppx = .RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ThemeManager\LastLoadedDPI") / 72: End With
        With CreateObject("WScript.Shell"): ppx = .RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI") / 72: End With
        With ActiveWindow
            X = (.ActivePane.PointsToScreenPixelsX([D3].Left)) / ppx
            Y = (.ActivePane.PointsToScreenPixelsY([D3].Top)) / ppx
            With UserForm1: .Show 0:
                handle1 = FindWindow(vbNullString, UserForm1.Caption): handle1bis = handle1
                .Left = X: .Top = Y:
                Do
                    handle2 = WindowFromPoint((X * ppx) - a, (Y * ppx) - a):
                    handle2bis = WindowFromPoint((X * ppx) + a, (Y * ppx) + a):
                    a = a + 1
                Loop While handle1 = handle2 Or handle1bis <> handle2bis
                .Left = X + a / ppx: .Top = Y + a / ppx
            End With
        End With
    End Sub
    chez moi ca fonctione faudra que Nicolas teste
    mais on est déjà la hors du challenge

    j'avais fait la meme chose avec rangefrompoint membre de activewindow dans un do loop navigant au dessus puis a gauche du userform en contrôlant l'adresse
    Bonjour à tous
    Selon ce code
    Nom : Capture.PNG
Affichages : 185
Taille : 17,0 Ko
    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
      0  0

  7. #727
    Membre éclairé Avatar de Nicolas JACQUIN
    Homme Profil pro
    .
    Inscrit en
    Avril 2014
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : .
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2014
    Messages : 556
    Points : 790
    Points
    790
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    EXERCICE UNPARIA


    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
    Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
    Private Declare Function WindowFromPoint Lib "user32" (ByVal xpoint As Long, ByVal ypoint As Long) As Long
    'exercice 1:- le hwnd obtenu en plaçant le curseur tout contre (très légèrement en dessous et très légèrement à droite) de l'angle supérieur droit de la barre de titre de ton "userform" apparent
    'exercice 2:- le hwnd obtenu en plaçant le curseur sur le "userform apparent", juste en dessous le sa barre de titre
    'exercice 3:- le hwnd de l'userform réel (obtenu, LUI, par FINDWINDOWS et non par Windowfrompoint, hein ...
    Sub testunparia()
    'ppx=
    With CreateObject("WScript.Shell"): ppx = .RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI") / 72: End With
     
     With Application: .Left = 50: .Top = 100: End With
     
      With UserForm1:  .Show 0:  .Left = 10: .Top = 20: End With
     'hwnd par findwindow
     handle1 = FindWindow(vbNullString, UserForm1.Caption)
    'on place le curseur selon l'exercice 1
    SetCursorPos (UserForm1.Left + UserForm1.Width) * ppx + 5, (UserForm1.Top * ppx - 10)
    exercice1 = WindowFromPoint((UserForm1.Left + UserForm1.Width) * ppx + 5, (UserForm1.Top * ppx - 10))
    SetCursorPos (UserForm1.Left + UserForm1.Width) * ppx - 10, (UserForm1.Top * ppx - 25)
    exercice2 = WindowFromPoint((UserForm1.Left + UserForm1.Width) * ppx - 10, (UserForm1.Top * ppx - 25))
    exercice3 = FindWindow(vbNullString, UserForm1.Caption)
    MsgBox "exercice1 handle obtenu = " & exercice1 & vbCrLf & "exercice2 handle obtenu = " & exercice2 & vbCrLf & "exercice3 handle obtenu = " & exercice3
     
    End Sub
    RESULTAT
    Nom : Capture.JPG
Affichages : 279
Taille : 255,5 Ko
    avec celui-ci
    Nom : Capture.PNG
Affichages : 193
Taille : 105,0 Ko
    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
      0  0

  8. #728
    Membre éclairé Avatar de Nicolas JACQUIN
    Homme Profil pro
    .
    Inscrit en
    Avril 2014
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : .
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2014
    Messages : 556
    Points : 790
    Points
    790
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    tu raconte n'importe quoi
    ca ne fait que démontrer ce que l'on observe depuis le début a savoir un décalage entre ce qui est affiché et ce qui est calculé
    il est null besoins de faire ce test supplémentaire pour observer cela on le sais depuis longtemps
    c'est la meilleur celle la maintenant il y a un userform imaginaire et un reel mais ou tu va comme ca hein !!????

    le model précèdent que j'ai adapté avec windowsfrompoint le montre bien
    je le corrige pour Nicolas normalement ca devrait donner quelque chose de correcte ne pouvant plus tester sur W10 je vais devoir attendre le retour de Nicolas

    version incluant config W10
    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
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function WindowFromPoint Lib "user32" (ByVal xpoint As Long, ByVal ypoint As Long) As Long
    Sub test_userform_replace()
        Dim r As RECT
        'With CreateObject("WScript.Shell"): ppx = .RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ThemeManager\LastLoadedDPI") / 72: End With
        With CreateObject("WScript.Shell"): ppx = .RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI") / 72: End With
        With ActiveWindow
            X = (.ActivePane.PointsToScreenPixelsX([D3].Left)) / ppx
            Y = (.ActivePane.PointsToScreenPixelsY([D3].Top)) / ppx
            With UserForm1: .Show 0:
                handle1 = FindWindow(vbNullString, UserForm1.Caption): handle1bis = handle1
                .Left = X: .Top = Y:
                Do
                    handle2 = WindowFromPoint((X * ppx) - a, (Y * ppx) - a):
                    handle2bis = WindowFromPoint((X * ppx) + a, (Y * ppx) + a):
                    a = a + 1
                Loop While handle1 = handle2 Or handle1bis <> handle1bis
                a = IIf(handle1bis <> handle1bis, -1 * a, 1 * a)
                .Left = X + a / ppx: .Top = Y + a / ppx
            End With
        End With
    End Sub
    Nom : Capture.PNG
Affichages : 183
Taille : 17,6 Ko
    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
      0  0

  9. #729
    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 Nicolas la chose est la même
    tu as testé celui en MP ?
    je me suis tromper dans ces deux lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Loop While handle1 = handle2 Or handle1bis <> handle1bis
                a = IIf(handle1bis <> handle1bis, -1 * a, 1 * a)
    c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Loop While handle1 = handle2 Or handle1bis <> handle2bis
                a = IIf(handle1bis <> handle2bis, -1 * a, 1 * a)
    mais je crois qu'il peut y avoir conflit entre le résultat négatif /ou positif en terme de réponse du code
    difficile de mettre la réduction ou l'augmentation dans le même loop
    il va falloir que je l'écrive autrement
    toujours pareil travaillant en aveugle pour W10 comme je n'ai pas la possibilité de voir le retour
    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
      0  1

  10. #730
    Membre éclairé Avatar de Nicolas JACQUIN
    Homme Profil pro
    .
    Inscrit en
    Avril 2014
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : .
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2014
    Messages : 556
    Points : 790
    Points
    790
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    Oui Nicolas la chose est la même
    tu as testé celui en MP ?
    ça donne pareil que la derniere image postée
    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
      0  0

  11. #731
    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
    en plus si me souviens bien chez toi le "-5" c'est que pour le left c'est bien ca
    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
      0  1

  12. #732
    Membre éclairé Avatar de Nicolas JACQUIN
    Homme Profil pro
    .
    Inscrit en
    Avril 2014
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : .
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2014
    Messages : 556
    Points : 790
    Points
    790
    Par défaut
    oui c'est ç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
      0  0

  13. #733
    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 422
    Points
    12 422
    Par défaut
    Bonjour Nicolas
    Citation Envoyé par patricktoulon Voir le message
    EXERCICE UNPARIA
    En aucun cas mon exercice, mais l'interprétation qui en a été faite par Patricktoulon, hein ...
    Le code utilisé ne correspond déjà pas à ce que je demandais et qui ne faisait appel à rien d'autre que des constats sur la base de positionnements totalement manuels, tant en ce qui concernait l'userform, qu'en ce qui concernait le curseur.
    Remplacer le positionnement manuel du curseur par l'application d'un code faisant lui-même appel à ce qui est contesté peut certes correspondre à un bon positionnement, mais existe toujours le risque d'une faille du fait même du calcul de ce positionnement. (le scénario du chien qui se mord la queue est alors possible et DOIT être évité).
    Voilà comment on SAIT agir sur la seule base de positionnements manuels (seuls exempts de toute autre type de "pollution") :
    Un classeur neuf et sur la feuille active : deux boutons de commande Commandbutton1 et commanbutton2 et une ttextbox textbox1 et ce code tout bête (et non toulonnais) :
    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 FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function WindowFromPoint Lib "user32" (ByVal xpoint As Long, ByVal ypoint As Long) As Long
    Private Type POINTAPI
        X As Long
        Y As Long
    End Type
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Dim Pt As POINTAPI, mWnd As Long
     
    Private Sub CommandButton1_Click()
      UserForm2.Show 0
      Application.Wait Now + TimeValue("00:00:05") ' on a 5 secondes pour placer son curseur . On Attend ensuite le résultat sur la textbox
      GetCursorPos Pt
      mWnd = WindowFromPoint(Pt.X, Pt.Y)
      TextBox1.Text = mWnd
    End Sub
     
    Private Sub CommandButton2_Click()
     TextBox1.Text = FindWindow(vbNullString, UserForm2.Caption)
    End Sub
    Ce code ne fait appel à aucune espèce de calcul tiers qui pourrait éventuellement polluer lui-même
    On fait le test 1 en cliquant sur commandbutton1, plaçant le userform comme dit plus haut et en plaçant le curseur comme dit plus haut (on a 5 secondes pour le faire !)
    On fait le test 2 en cliquant sur commandbutton1, plaçant le userform comme dit plus haut et en plaçant le curseur comme dit plus haut (on a 5 secondes pour le faire !)
    On fait le test 3 avec le bouton commandbutton2

    Mes tests 1,2 et 3 étant RIGOUREUSEMENT (et non Toulonnais ou Marseillais ou Javanais) ceux définis par mon message de 11h54

    Tout le reste ne serait qu'égarement et non ce que j'ai dit de faire, 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.
      0  1

  14. #734
    Membre éclairé Avatar de Nicolas JACQUIN
    Homme Profil pro
    .
    Inscrit en
    Avril 2014
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : .
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2014
    Messages : 556
    Points : 790
    Points
    790
    Par défaut
    Bonjour Jacques,
    j'ai pas dû comprendre l'exercice, le programme mouline pendant 5 secondes (sablier) et j'ai ce message d'erreur

    Nom : Capture.PNG
Affichages : 191
Taille : 71,5 Ko
    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
      0  0

  15. #735
    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 422
    Points
    12 422
    Par défaut
    Le message que tu reçois dénonce l'absence :
    - soit d'un userform nommé UserForm2 (n'oublie pas de mettre à 0 sa spropriété StartUpPosition, dans la foulée)
    - soit du bouton de command commandbutton1 (sur la feuille)
    - soit du bouton de command commandbutton2 (sur la feuille)
    - soit de la textbox TextBox1 (sur la feuille)

    Et le code montré est à mettre dans le module de code de la feuille active.
    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.
      0  1

  16. #736
    Membre éclairé Avatar de Nicolas JACQUIN
    Homme Profil pro
    .
    Inscrit en
    Avril 2014
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : .
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2014
    Messages : 556
    Points : 790
    Points
    790
    Par défaut
    ben si pourtant, même starupposition, tout reste bloqué pendant 5 secondes et erreur
    Test_Jacques.xlsm
    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
      0  0

  17. #737
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 816
    Points : 2 954
    Points
    2 954
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par unparia Voir le message
    - soit de la textbox TextBox1 (sur la feuille)
    Salut Jacques,
    Au vu de ce que présente Nicolas, le TextBox est placé sur l'UserForm2 au lieu d'être sur la feuille, qui se voit selon sa capture d'écran...

    Bises à tous








    et






    ...
    Bon courage!
    Cordialement,
    Franck
      0  1

  18. #738
    Membre éclairé Avatar de Nicolas JACQUIN
    Homme Profil pro
    .
    Inscrit en
    Avril 2014
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : .
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2014
    Messages : 556
    Points : 790
    Points
    790
    Par défaut
    Bonjour pijaku
    ah oui pardon, désolé, j'avais pas fait attention
    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
      0  0

  19. #739
    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
    de toute façon
    en effet avec windowfrompoint on peut capter les différence
    mais vu le nombre de réaction différentes selon les version ca serait pire que mon switch
    arien que unparia nicolas et moi on a 4 versions
    enterme de decalge hauteur,left et cela en negatif ou positif
    vu le nombre de lignes que représente ce simple moulin et de plus le fait que l'on peut pas tout faire dans le meme loop

    et que de Xp a W10 et 2003 a 2016 ca fait pas mal de version et donc pour faire le tri je suis quand même obligé de garder l'identification version

    je supprime donc 2 ligne switch pour une bonne 20 aines et je suis gentils je me suis arrêté a 3 versions

    je garde mon switch
    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
      0  1

  20. #740
    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 422
    Points
    12 422
    Par défaut
    Tu commences enfin à comprendre que tu n'auras aucune possibilité, sans utilisation d'une fonction au moins de l'Api de Windows, de déterminer cette différence. Il est temps.
    Tu attendras demain (il va me falloir rédiger et je n'en ai pas envie à l'instant) , maintenant, la "cerise" promise sur le gâteau : si tu "figes" en dur par un switch selon version et configuration, ce sera par 4, qu'il te faudra multiplier le nombre de tes "correcteurs de rattrapage", si tu veux pouvoir placer efficacement/utilement ton userform.
    Tu paries ? (A ta place, je ne parierais pas ... )
    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.
      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