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. #61
    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
    voila si le "+1" est valable pour tous le monde c'est gagné
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub autre2()
     Set cible = [D9]
     With ActiveWindow.ActivePane
     P_ToPx = (.PointsToScreenPixelsY(.VisibleRange.Cells(1).Height) - .PointsToScreenPixelsY(0) + 1) / .VisibleRange.Cells(1).Height
    End With
    SetCursorPos ActiveWindow.PointsToScreenPixelsX(P_ToPx * cible.Left), ActiveWindow.PointsToScreenPixelsY(P_ToPx * cible.Top)
    'MsgBox P_ToPx
    End Sub
    j'obtiens bien 1,66666666666667 et 1.333333333333333 sur le portable
    comme avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GetDeviceCaps(GetDC(0), 90) / 72
    on va attendre les retours
    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

  2. #62
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    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
    Heu ...
    Je reviens à peine de la pêche et vois maintenant ce code.

    Trop fatigué maintenant pour tester etc ... Mais je sais qu'il ne peut être stable et sais pourquoi.

    Je dirai donc tout cela demain matin, après tests de confirmation de ce que je "vois" venir avec ce code.

    Bonne nuit
    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

  3. #63
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    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
    C'est bien ce que je "pensais".
    Un tel code est aussi peu fiable que le serait n'importe quel instrument de mesure dont l'étalonnage serait fait sur la base d'une donnée non constante : la taille (hauteur et largeur) de la première cellule qui se trouve affichée en haut de la grille au moment de l'exécution du code. !
    Modifiez la taille de cette première cellule (quelle qu'elle soit) -->> exécutez --->>> constatez

    Pourquoi semblait-il "marcher" ? Tout simplement parce-que la hauteur par défaut d'une cellule est à peu près égale à celle de la barre de titre d'une fenêtre Windows.
    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. #64
    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
    si la hauteur par défaut est 15 pour tout le monde alors c'est réglé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub autre2()
     Set cible = [D9]
     With ActiveWindow.ActivePane
     z = 15 * .VisibleRange.Rows.Count
     P_ToPx = (.PointsToScreenPixelsY(z) - .PointsToScreenPixelsY(0) + 1) / z
    End With
    SetCursorPos ActiveWindow.PointsToScreenPixelsX(P_ToPx * cible.Left), ActiveWindow.PointsToScreenPixelsY(P_ToPx * cible.Top)
    'MsgBox P_ToPx
    End Sub
    ou même aller chercher la der des der des cellules
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    z = Cells(Rows.Count - 1, Columns.Count).Height * .VisibleRange.Rows.Count
    sinon il faudrait trouver une constante qui donne le height par defaut

    Nom : demo.gif
Affichages : 763
Taille : 804,8 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

  5. #65
    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
    mais bon sang!!! mais c'est bien sur !!!!!
    pourquoi s'ennuyer a aller chercher le height de quoi que se soit autant utiliser un nombre quelquonque

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub autre()
     Set cible = [D9]
     With ActiveWindow.ActivePane
      P_ToPx = (.PointsToScreenPixelsY(30) - .PointsToScreenPixelsY(0)) / 30
      'P_ToPx = (.PointsToScreenPixelsY(2000) - .PointsToScreenPixelsY(0)) / 2000' c'est pareil 
    End With
    SetCursorPos ActiveWindow.PointsToScreenPixelsX(P_ToPx * cible.Left), ActiveWindow.PointsToScreenPixelsY(P_ToPx * cible.Top)
    End Sub
    maintenant c'est réglé!!!
    c'est tellement con et évident que j'en ai honte hihihihihih
    il faut simplement savoir
    1. utilisation de activepanne(activewindow ne marche tout seul)
    2. comprendre que PointToScreenPixelsY donne la dimention du height + la hauteur des barre
    3. la divison par le meme chiffre appliqqué a PointToScreenPixelsY te donne l'operande
    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

  6. #66
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    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
    si la hauteur par défaut est 15 pour tout le monde alors c'est réglé
    et là, tu fais des ronds dans l'eau, patricktoulon
    Ce n'est pas sur la base de 15, qu'il faut calculer, mais sur la base de la hauteur d'une barre de titre d'une fenêtre de Windows.
    Sur la plupart des machines, tant cette hauteur que celle par défaut d'une ligne Excel est 15
    Mais : Même si la fauteur par défaut d'une ligne Excel était toujours = 15 sur toutes les machines, il n'en va pas forcément de même sur toutes les machines en ce qui concerne la hauteur de la barre de titre d'une fenêtre Windows !
    Tu sais où tu retournes, là ? --->> je vais te le dire --->>>
    A mon message N° 21 de cette discussion et plus particulièrement à ce petit os :
    citation de mon message 21
    ce code-là n'utilisera qu'une seule fonction de l'Api de Windows : celle nécessaire à déterminer la hauteur de la barre de titre d'une fenêtre Windows (15, en général)
    C'est le jeu de l'oie ...
    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

  7. #67
    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
    mais sur la base de la hauteur d'une barre de titre d'une fenêtre de Windows.
    heu...,,,,,
    PintToScrennPixelsX ou Y(0) n'est -il pas sensé nous donner le top et left 0 de la grille ?????????
    en tout cas chez moi
    sur le PC salon 1920*1080,pc portable 1080*768 ca le fait

    Nom : demo.gif
Affichages : 566
Taille : 1,08 Mo
    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

  8. #68
    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
    allez comme c'est jamais simple
    je viens de decouvrir encore une chose que je n'arrive pas a expliquer
    pour que ca fonctionne il faut que le nombre appliqué soit un multiple de 3 va savoir pourquoi
    j'ai fait le test jusqu'à 100

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test8()
    For i = 1 To 100
    Cells(i + 1, 1).Resize(1, 2) = Array(i, P_ToPx(i))
    Next
    End Sub
    Function P_ToPx(a)
     Set cible = [D9]
     With ActiveWindow.ActivePane
      P_ToPx = (.PointsToScreenPixelsY(a) - .PointsToScreenPixelsY(0)) / a
    End With
    SetCursorPos ActiveWindow.PointsToScreenPixelsX(P_ToPx * cible.Left), ActiveWindow.PointsToScreenPixelsY(P_ToPx * cible.Top)
    'MsgBox P_ToPx
    End Function
    en sachant cela c'est nickel
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      0  1

  9. #69
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    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
    Là, tu vois, je te laisse à ce genre de supputations qui s'apparente à des conclusions de "chercheurs" qui, pour appuyer leur théorie, diraient : "puisque nous n'avons pas trouvé d'exemple la démontant, c'est qu'elle est vraie". Problème : ces théories finissent toutes par tomber et laisser la place à une autre théorie. C'est en tout état de cause ce que l'on observe, hein ...
    Je n'aime personnellement aucun tâtonnement qui serait utilisé pour "constater", puis "tirer une conclusion".
    Excuse-moi, mais je ne peux accepter de suivre qui que ce soit sur un tel "chemin".
    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

  10. #70
    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
    Et pourquoi pas tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        With ActiveWindow.ActivePane
            SetCursorPos .PointsToScreenPixelsX(cible.Left), .PointsToScreenPixelsY(cible.Top)
        End With
    ?
      4  0

  11. #71
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    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 zenpbb
    Excellente, cette idée d'utiliser l'objet activepane de la fenêtre active.
    100 % de succès
    BRAVO à toi
    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

  12. #72
    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
    bonsoir a tous
    oui si on veut placer le curseur directement
    mais quand on veut obtenir l'opérande soit 1.333... ou 1.666...7
    l'horizontal est toujours approximatif tandis que le vertical donne bon pile
    comme je l'ai dis plus haut il suffit de le savoir et utiliser un nombre qui est mod 3
    j'ai même essayé sur le vieux PC XP sp3 écran cathodique 1024*680(et oui!! je l'ai ressorti pour la curiosité)et ca match
    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

  13. #73
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    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
    l'horizontal est toujours approximatif tandis que le vertical donne bon pile
    1) parce que 15 est en pouces et approximatif (il y a une petite différence avec la hauteur de la barre de titre d'une fenêtre Windows (hauteur fixée en pixels)
    2) ce n'est pas parce que "ça match" sur 20 machines testées qu'il est assuré que cela va avec toutes. Il est tout simplement vrai que ce sera 15 sur la très grande majorité (ce que j'ai d'ailleurs dit en mon message 21). Tout peut cependant arriver et doit donc être pris en considération, y compris les configurations farfelues les plus inattendues et "tripotées.
    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. #74
    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
    ma foi pour moi la chose est simple
    l'operande est obtenue par la dim_enpixel/ la dim _enpoint
    concernant les cellules

    activewindow.activepane.PointToScreenPixelsx(cellule.left)

    donne le left de la cellule par raport a l'écran

    pour le leftpar rapport a la grille grille il faut soustraire le PointToScreenPixel(0)
    parti de la
    si je fait

    a=25'point
    b=activewindow.activepane.PointToScreenPixelsx(25)-activewindow.PointToScreenPixelsx(0)
    c=b/a
    c doit me donner l'opérande
    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

  15. #75
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    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
    si je fait

    a=25'point
    b=activewindow.activepane.PointToScreenPixelsx(25)-activewindow.PointToScreenPixelsx(0)
    c=b/a
    c doit me donner l'opérande
    1) La position horizontale ne subit, elle, que la largeur de la bordure gauche (1 pixel)
    Il n'en va pas TOUJOURS forcément de même en ce qui concerne la position verticale.
    il y aura donc toujours un petit décalage
    2) le résultat ainsi obtenu (même à l'horizontale) fluctuera forcément avec le zoom
    3) la précision obtenue dépendra toujours de la valeur de a (même si peu significatif) du fait de l'incidence inévitable de la largeur d'une bordure (voir 1) )
    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. #76
    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 me suis trompé dans mon enoncé
    mais j'ai donc repris ma contrib sur la toolbar on userform et viré toutes les apis qui me servait a déterminer

    la hauteur de l'userform; la hauteur de caption ;le top et left des boutons ;l'epaisseur de cadre etc.....
    et j'ai donc pris ma formule qui est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With ActiveWindow.ActivePane: oP = (.PointsToScreenPixelsY(33) - .PointsToScreenPixelsY(0)) / 33: End With
    et voila j'ai implanter cela dans le module de creation de popup

    exemple :
    ajouter un userform
    ajouter 3 bouton dans le userform(moi je l'ai ai mi en top 0 pour faire comme une barre d'onglet(voir capture en fin de post)
    dans le code de l'userform mettre ceci:
    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
    Private Sub Label1_Click()
           Dim boutons
        boutons = Array("Sauver:3:1:macro1", "Sauve sous...:22:1:macro2:true", "Ouvrir:23:1:macro3", "Importer:128:1:macro4", _
                        Array("plein ecran:457:1:macro7", "normal:458:1:macro8", "affichage"), _
                        "Exporter:129:1:macro5", "Quitter:5955:1:macro6")
        menu boutons, Label1, "usf"
    End Sub
    Private Sub Label2_Click()
        Dim boutons
        boutons = Array("ajouter du texte:444:1:ajouttext", "mettre le texte en couleur:1916:1:textcolor", "mettre le texte en gras:356:1:textbold", "ombre aux texte:128:7563:ombretexte", _
                        "copier la selection:236:1:copieselect", "formater:824:1:formater")
        menu boutons, Label2, "usf"
    End Sub
    Private Sub Label3_Click()
        Dim boutons
        boutons = Array("inserer une image:524:1:insertimage", _
                        Array("forme ronde:289:1:macro7", "forme carré:366:1:macro8", "insérer une forme"), "insérer un block texte:356:1:insertextblock")
        menu boutons, Label3, "usf"
    End Sub
    maintenant le module de creation des popups
    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
    Function menu(boutons, bt, Optional mode As String = "")
        Dim i As Long, Barre As CommandBar, pop, e As Long, decal As Long, XX, YY As Long, oP As Double
        On Error GoTo suite
        delmenu
    suite:
         With ActiveWindow.ActivePane: oP = (.PointsToScreenPixelsY(33) - .PointsToScreenPixelsY(0)) / 33: End With
        Set Barre = CommandBars.Add("MenuUSF", msoBarPopup, False, True)
        For i = 0 To UBound(boutons)
            If IsArray(boutons(i)) Then
                Set pop = Barre.Controls.Add(msoControlPopup, 1, , , True): pop.Caption = boutons(i)(UBound(boutons(i)))
                pop.Caption = boutons(i)(UBound(boutons(i)))
                For e = 0 To UBound(boutons(i)) - 1
                    With pop.Controls.Add(msoControlButton, 1, , , True)
                        .Caption = Split(boutons(i)(e), ":")(0)
                        .FaceId = Split(boutons(i)(e), ":")(1)
                        .Enabled = Val(Split(boutons(i)(e), ":")(2))
                        .OnAction = Split(boutons(i)(e), ":")(3)
                    End With
                Next
            Else
                With Barre.Controls.Add(msoControlButton, 1, , , True)
                    .Caption = Split(boutons(i), ":")(0)
                    .FaceId = Split(boutons(i), ":")(1)
                    .Enabled = Val(Split(boutons(i), ":")(2))
                    .OnAction = Split(boutons(i), ":")(3)
                    If UBound(Split(boutons(i), ":")) > 3 Then .BeginGroup = True
                End With
            End If
        Next
        DoEvents
        If mode = "usf" Then
     
            XX = bt.Left * oP        'position left du label cliqué en pixel par raport au point 0 du insidewidth de l'userform
            YY = (bt.Top + bt.Height) * oP       ' position top du label cliqué en pixel en dessous le bouton par rapport au point 0 du insideheight de l'userform
            topPlus = (bt.Parent.Height - bt.Parent.InsideHeight) * oP     ' epaisseur de la caption du userform en pixel
            ep_cadre = bt.Parent.Width - bt.Parent.InsideWidth 'epaiseur du cadre (donne 3 en general)
             Barre.ShowPopup (UserForm1.Left * oP) + ep_cadre + XX, UserForm1.Top * oP + topPlus - ep_cadre + YY ' affichage de la popup au cordonnéees calculées
        Else
            Barre.ShowPopup
        End If
    End Function
    Function delmenu()
        On Error Resume Next
        CommandBars("MenuUSF").Delete
    End Function
    capture demo
    Nom : demo.gif
Affichages : 551
Taille : 89,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

  17. #77
    Membre à l'essai
    Avatar de clubleo
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mars 2016
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Mars 2016
    Messages : 56
    Points : 21
    Points
    21
    Billets dans le blog
    1
    Par défaut
    Bonjour à vous tous,
    A titre indicatif, voici ce que j'avais écrit courant mars mais sans garantie.
    Encore merci à tous.

    Declare Function SetCursorPos Lib "User32" (ByVal x As Long, ByVal y As Long) As Long
    Declare Function GetSystemMetrics Lib "user32.dll" (ByVal index As Long) As Long
    Dim PosXRow, PosYCol, N_PosXRow, N_PosYCol
    Dim CelROWheight, CelCOLwidth, CelROWheightSV, CelCOLwidthSV
    '@@@@@@@@@=== DEB TEST ====
    Sub TEST(): Excel.Application.Visible = True: Application.WindowState = xlNormal
    Application.Top = 100: Application.Left = 100
    N_PosXRow = 0: N_PosYCol = 0: PosXRow = 0: PosYCol = 0

    SelCelROW = 12: SelCelCOL = 3 '<<<===== CIBLE

    Cells(SelCelROW, SelCelCOL).Select
    Positionner_CURSEUR_CELL SelCelROW, SelCelCOL: End Sub '==== FIN TEST ====@@@@@@@@@@
    '
    '@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@
    Sub Positionner_CURSEUR_CELL(SelCelROW, SelCelCOL)
    '@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@
    ScreenWidth = GetSystemMetrics(0): ScreenHeight = GetSystemMetrics(1)

    CelROWheightSV = Cells(SelCelROW, SelCelCOL).RowHeight: CelCOLwidthSV = Cells(SelCelROW, SelCelCOL).ColumnWidth
    If CelROWheight = 0 Or CelCOLwidth = 0 Then
    Cells(SelCelROW, SelCelCOL).RowHeight = 10: Cells(SelCelROW, SelCelCOL).ColumnWidth = 10
    End If
    '-------------------------------------------------------------------------------------
    'Chercher la première Pos Y de la COLONNE de la ROW ACTIVE Méthode Window.RangeFromPoint
    PosYColRD = (Application.Top * 1.33) + (ActiveWindow.Top * 1.33)
    For N_PosYCol = PosYColRD + 100 To ScreenHeight - 20 ' VERTICAL @@@
    CelRD = "": On Error Resume Next
    CelRD = ActiveWindow.RangeFromPoint(200, N_PosYCol).Address
    If Trim(CelRD) = "" Then GoTo N_Row '@ @ @ @ @ @ @

    If Left(CelRD, 1) = "$" Then CelRD = Mid(CelRD, 2)
    Pos$ = InStr(CelRD, "$"): If Pos$ > 1 Then Row = Val(Mid(CelRD, Pos + 1))

    If SelCelROW = Row Then
    N_PosYCol = N_PosYCol + (Range(CelRD).RowHeight * 1.33) - 7: PosYCol = N_PosYCol
    GoTo PosYColTrouvee_ChercherPosXRow ' =====>
    End If
    N_Row:
    Next N_PosYCol
    '-------------------------------------------------------------------------------------
    PosYColTrouvee_ChercherPosXRow:
    'Chercher la première POS X de la ROW de la COLONNE ACTIVE
    PosXRowRD = (Application.Left * 1.33) + (ActiveWindow.Left * 1.33)
    For N_PosXRow = PosXRowRD + 50 To ScreenWidth - (PosXRowRD + 1) 'HORIZONTAL @@@
    CelRD = "": On Error Resume Next
    CelRD = ActiveWindow.RangeFromPoint(N_PosXRow, N_PosYCol).Address
    If Trim(CelRD) = "" Then GoTo N_Col '@ @ @ @ @ @ @

    CoL = Range(CelRD & 1).Column: If CoL < 1 Then GoTo N_Col

    If SelCelCOL = CoL Then
    N_PosXRow = N_PosXRow + 10: PosXRow = N_PosXRow: GoTo POSITIONNER_le_CURSEUR ' =====>
    End If
    N_Col:
    Next N_PosXRow
    '-------------------------------------------------------------------------------------
    POSITIONNER_le_CURSEUR:
    If PosXRow = 0 Or PosYCol = 0 Then SetCursorPos ScreenWidth / 2, ScreenHeight / 2
    '- -@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    SetCursorPos PosXRow, PosYCol '@@@@@@@@@@@
    '- -@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    If CelROWheight = 0 Or CelCOLwidth = 0 Then
    Cells(SelCelROW, SelCelCOL).RowHeight = CelROWheightSV
    Cells(SelCelROW, SelCelCOL).ColumnWidth = CelCOLwidthSV
    End If
    End Sub
      0  0

  18. #78
    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
    oulah!!! clubeo il manque plus que une barre de combustible et ca y est
    c'est de ce genre de code quand on parlais d'usine a gaz et il y en a des tas

    a ce niveau vaut mieux encore 2 boucle sur rangefrompoint c'est encore plus simple
    et met ton code entre balise code ca pique les yeux
    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

  19. #79
    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 si tu repasse par la et si tu veux bien m'expliquer pourquoi le userform n'est pas bien logé alors que le curseur oui

    POSITION CURSEUR EN D3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
    With ActiveWindow.ActivePane
    SetCursorPos .PointsToScreenPixelsX([d3].Left), .PointsToScreenPixelsY([d3].Top)
    End With
    End Sub
    POSITION USERFORM EN D3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test2()
        With ActiveWindow.ActivePane
            lleft = .PointsToScreenPixelsX([d3].Left)
            ttop = .PointsToScreenPixelsY([d3].Top)
        End With
        With UserForm1
            .Show 0
            .Left = lleft
            .Top = ttop
        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

  20. #80
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    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
    @unparia si tu repasse par la et si tu veux bien m'expliquer pourquoi le userform n'est pas bien logé alors que le curseur oui
    Je te l'ai dit plus haut (beaucoup plus haut) dans cette discussion. Il ne subit pas, lui, de modification d'unités d'échelle
    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