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 une forme (shape) par rapport à l'écran


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 62
    Par défaut Positionner une forme (shape) par rapport à l'écran
    Bonjour,

    Est-il possible de positionner avec VBA une forme (shape) appartenant à une feuille Excel par rapport à l'écran, plutôt que par rapport à sa feuille, quelque soit la position et le coefficient d'agrandissement (zoom) de celle-ci ?

    Merci à celui qui voudra bien me refiler la solution ...

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    bonjour
    j'aurais tendance a te dire NON!!!
    deja par ce que tu ne peux placer ta shape que dans le sheets, le ruban et displaybars ainsi que les bordure fentre n'en font pas parti
    maintenant si tu entends par la je veux mettre ma shape au milieu du width et height de la feuille correspondant au milieu du width et height de l'ecran c'est pas la meme chose
    mais en aucun cas la shape ne peut sortir du gridline
    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

  3. #3
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 62
    Par défaut
    Merci Patricktoulon pour ta réponse rapide mais qui, désolé, ne me donne pas la solution !
    Bien sûr que je sais que ma forme ne peut pas sortir de sa feuille, mais ce n'est pas un problème puisque dans mon cas, cette dernière occupe tout l'écran, et souvent bien plus.
    Ce que je cherche en fait c'est le moyen de déplacer la forme sur la feuille (par une procédure VBA) de manière à ce qu'elle occupe une position voulue (par ex le centre) de l'écran.

    Si tu veux savoir pourquoi je veux faire cela, j'explique:
    Dans une feuille Excel j'ai toute une série de formes. On doit pouvoir activer l'une d'elles sans risquer de la bousiller ou de l'effacer.
    Je place donc au-dessus de ces formes une forme-écran transparente qui les protèges en empêchant d'y accéder directement.
    C'est comme si on recouvrait des documents sur un bureau avec une feuille de verre transparente...
    Cet écran est attaché à une macro qui rend visible un forme circulaire qui est une sorte de "pointeur" : un clic sur l'écran affiche le pointeur, ce dernier est placé au-dessus de l'écran.

    Et c'est là que je souhaite que ce pointeur s'affiche à une position fixe de l'écran (ou encore mieux sur le pointeur de ma souris !).
    Car ma feuille Excel peut être bien plus large que l'écran, surtout si on a "zoomé" dessus, renvoyant le pointeur dans une zone non visible.

    L'idée est de positionner à l'aide de la souris le pointeur au centre (ou autour, s'il est plus grand) de la forme que l'on veut activer.
    Un nouveau clic sur l'écran peut alors relancer la macro qui recherche, pour l'activer, la forme dont le centre est le plus proche du centre du pointeur ...
    Je précise que les formes présentes sur la feuille sont classées dans des groupes et que ma macro ne retient que celles qui font partie d'un groupe particulier.

    Ma solution a l'air biscornue, mais hormis la position du pointeur, elle marche très bien.
    Maintenant, si tu as une solution plus simple pour activer une forme à partir de la souris sans risquer de la déplacer, la déformer ou l'effacer, elle sera bienvenue !
    Mais il faut tenir compte du fait que plusieurs formes faisant partie de groupes différents peuvent se superposer avoir leur centre proche ou confondus !

    Bien à toi
    Georges L, Belgique

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    re
    je comprends ce que tu fait avec ta shape transparente en position par dessus toute les autres
    ce que je pige pas c'est ca
    Bien sûr que je sais que ma forme ne peut pas sortir de sa feuille, mais ce n'est pas un problème puisque dans mon cas, cette dernière occupe tout l'écran, et souvent bien plus.
    c'est tout bonnement impossible
    si tu sais faire ca ,partage ta methode, ca va en intérésser plus d'un


    a moins que tu ai enlevé la caption de excel ,le ruban et que tu soit en mode plein ecran ,au quel cas oui avec la grille occupant tout l'ecran sans bordure c'est possible

    je crois sincerement par rapport a ce que tu a ecrit dans ton post précèdent que ta question est mal formulée on doit pas parler de la meme chose


    Maintenant, si tu as une solution plus simple pour activer une forme à partir de la souris sans risquer de la déplacer, la déformer ou l'effacer, elle sera bienvenue !
    normalement quand on donne un ".onaction" a une shape elle ne se deplace plus au click sauf si tu reste appuyé sur le bouton droite de la souris
    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

  5. #5
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 62
    Par défaut
    Bonsoir Patrick,

    Je crois que j'ai trouvé la solution à mon problème.
    Voici le code tout simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim X As Long, Y As Long, Z As Single
    With ActiveWindow
       X = .UsableWidth / 2 + Columns(.ScrollColumn).Left - Columns(2).Left
       Y = .UsableHeight / 2 + Rows(.ScrollRow).Top - Rows(4).Top
       Z = 100 / .Zoom
    End With
    With ActiveSheet.Shapes("Cdr"): .Left = X * Z: .Top = Y * Z: End With
    La forme "Cdr" est parfaitement placée sur ma feuille Excel de manière à apparaître au centre de l'écran.
    Et cela, quelle que soit la position "scroll" de la feuille et son coefficient "zoom" au moment de l'insertion.
    Le code prévoit même ici que la première colonne et les trois premières lignes sont figées !

    Le coefficient Z peut aussi recalibrer automatiquement mon pointeur "Cdr" pour qu'il conserve toujours la même taille.
    C'est bien utile pour cibler des petites formes lorsque l'on augmente le zoom ...

    Tu crois vraiment que ma trouvaille en intéressera "plus d'un" ?

    Encore merci pour tes réponses et à +

    Georges L, le belge

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    re
    ah!... ben voila !!!!
    bon ben c'est bien ce que je disais alors tu parle pas du centre de l'ecran mais du visiblerange
    et je dis visiblerange c'est pas pour rien
    en te servant du visiblerange tu n'a meme pas besoins de calculer les scrolls

    un exemple ceci te met ta shape au centre du VISIBLERANGE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
        Dim VR As Range
        Set VR = ActiveWindow.VisibleRange
              With ActiveSheet.Shapes("cdr")
            .Left = VR.Left + (VR.Width / 2) - (.Width / 2)
            .Top = VR.Top + ((VR.Height - 15) / 2) - (.Height / 2) 'les "15" c'est pour la  ligne d'entete colonne(les lettres) qui fait parti de l'activewindow
        End With
    End Sub
    la shapes est bien au centre du sheets ou de l'activewindow si tu veux et pour etre precis au centre du visiblerange
    et je n'ai meme pas besoins d'inclure le calcul du zoom la dedans

    et pour finir
    non ca n'en interessera pas plus d'un car ton code est incomplet donc donne un resultat faux chez moi car ma shape n'a pas les memes dimentions
    a aucun moment tu prends en compte les dimentions de la shape
    tandis que ma version le fait automatiquement quelque soit ses dimentions

    pour centrer horizontalement le left c'est largeur globale/2 - largeur de shape/2 et meme principe pour le top

    fait moi plaisir teste le mien plusieur fois en changeant la taille de la shape sans rien changer au code
    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

  7. #7
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 62
    Par défaut
    Bonjour Patrick

    Géniale ta solution !
    Mais pourquoi ne pas me l'avoir donnée plus tôt ?
    Il me semble pourtant que ma question était simple et bien posée.
    Je ne connaissais pas la propriété "VisibleRange", sinon j'aurais trouvé la solution tout seul.
    J'ai encore beaucoup à apprendre, mais je ne passe pas, comme toi, mes nuits devant mon PC !

    Alors, encore merci (1000x) et à bientôt

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par Benevole V1 Voir le message
    Bonjour Patrick

    Géniale ta solution !
    Mais pourquoi ne pas me l'avoir donnée plus tôt ?
    Il me semble pourtant que ma question était simple et bien posée.
    Je ne connaissais pas la propriété "VisibleRange", sinon j'aurais trouvé la solution tout seul.
    J'ai encore beaucoup à apprendre, mais je ne passe pas, comme toi, mes nuits devant mon PC !

    Alors, encore merci (1000x) et à bientôt
    re mon job me permet de bricoler sur le pc tout au long de la journée par intermitance mais j'y passe pas mes nuits
    sauf projet important et encore
    je ne te l'ai pas donné tout de suite car ca ne correspond pas a ta demande tel que tu l'a formulé
    c'est ce que j'ai essayé de t'expliquer
    ne pas confondre ecran et window(activewindow) rien a voir

    je rapelle a toute fin utile le titre de ta demande Positionner une forme (shape) par rapport à l'écran

    hors ce n'est pas ca que tu veux

    ce que tu veux c'est centrer une shape aux milieu de la grille
    visible d'excel quelle que soit la position et dimention de la fenetre excel
    pour chopper les coordonnées de la partie visible de la grille visiblerange est tout indiqué

    et en te servant des propriétés (left,top,width,height) de celle ci tu n'a nul besoins d'autre chose
    pas besoins de zoom,de scrool verticale ou horizontale) et/ou autre calcul

    juste visiblerange
    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

  9. #9
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 62
    Par défaut Positionner la fenêtre affichant une feuille Excel
    Bonjour,

    patricktoulon m'a permis de résoudre, en octobre 2018, le problème de centrer une forme (shape) d'une feuille Excel aux milieu de la grille visible quelle que soit la position et dimention de la fenetre excel.

    Aujourd'hui, je dois résoudre le problème inverse, c'est à dire positionner la fenêtre affichant une feuille Excel (quel que soit la taille et le Zoom de cette fenêtre) de façon à ce que l'une de ses formes (pour être précis, les coordonnées X,Y de la position Left/Top de celle-ci) soit au centre de la fenêtre ou, si la forme est proche du haut ou du côté gauche de la feuille, le plus au centre possible.

    J'essaye en vain depuis ce matin.
    Je ne suis pas aidé par l'aide fournie par Microsoft car celle-ci indique bien dans la description de la méthode "ScrollIntoView" qu'il faut introduire des données en points alors que l'exemple applique la méthode en pixels !

    Merci à celui qui pourra m'aider ou à Patrick s'il est plus rapide et qu'il veut bien me tirer d'embaras encore une fois.

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    re


    si j'ai bien compris ta demande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    with Windows(nom du classeur)
    .windowstate=xlnormal
    .top= - shapes(le nom de la shape).top
    .left= - shapes(le nom de la shape).left
    end with
    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

  11. #11
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 62
    Par défaut
    Bonjour Patrick,

    Merci de ta réponse très rapide !
    Mais, je suis désolé, j'ai essayé ta solution, mais ça ne marche pas ...
    La ligne 2 décroche la fenêtre de l'écran (ce que je ne souhaite pas et qui est inutile, je pense, pour arriver à ce que ne veux)
    Les lignes 3 & 4 bloquent la procédure (syntaxe incorrecte ?)
    Mais je crois surtout que tu n'as pas compris que j'essaye seulement de faire défiler la fenêtre de façon à ce que la forme que j'ai sélectionnée (qui peut être hors de la fenêtre) apparaisse au centre de l'écran...
    Je pense vraiment que la méthode "ScrollIntoView" est la bonne piste, mais je n'arrive pas à ce que je veux !

    Merci de m'aider encore, si tu veux bien ...

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    ah... d'acord
    tu confond encore le window et le visible range toi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     ActiveWindow.ScrollColumn = ActiveSheet.Shapes(1).TopLeftCell.Column
        ActiveWindow.ScrollRow = ActiveSheet.Shapes(1).TopLeftCell.Row
    épicétou!!!
    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

  13. #13
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 62
    Par défaut
    Merci, ça c'est une vraie belle solution !
    Je connaissais bien VisibleRange (grâce à toi !) et je l'emploie régulièrement.
    Mais je n'avais pas pensé à ScrollRow/Column pour déplacer la fenêtre.
    Néanmoins ta réponse ne répond pas à ma demande, puisqu'elle ne place pas la forme au centre de l'écran ...
    Je suppose que tu acceptes la solution ci-dessous qui, quand c'est possible (X/Y > 0), place bien la forme (Pp) de ma feuille (Wr) au centre l'écran :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    With ActiveWindow
        Set VR : .VisibleRange
        With Wr.Shapes("Pp")
            X = .TopLeftCell.Column - VR.Columns.Count / 2
            Y = .TopLeftCell.Row - VR.Rows.Count / 2
        End With
        If X > 0 then .ScrollColumn = X
        If Y > 0 then .ScrollRow = Y
    End With
    Encore merci

  14. #14
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    non c'est pas bon et il y a encore erreur sur wr
    wr c'est un range et n'a pas d'enfant .shapes

    en fait il faut procéder en deux étapes
    etape1
    1. memo de position de la shape
    2. placement au milieu du visiblerange (ca tu sais faire maintenant)
    3. memo du topleftcell.column -visiblerange.column
    4. pareil pour le top

    etape2
    1. remise au point de l'ancienne position
    2. scroll des column et row précédemment mémorisé (ca peut être plus ou moins)
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Mise en forme conditionnelle par rapport à une autre cellule
    Par patch2007 dans le forum Excel
    Réponses: 10
    Dernier message: 09/03/2012, 08h56
  2. Comment centrer une form par rapport à l'écran
    Par alouca dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/03/2010, 13h20
  3. Positionnement de la souris par rapport à une image et ascenseur !
    Par flyxter dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/09/2008, 23h45
  4. Réponses: 1
    Dernier message: 27/04/2008, 21h42
  5. background positionné par rapport à l'écran et non au cadre
    Par muaddibx dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 30/03/2007, 11h48

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