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

VBA Word Discussion :

Obtenir la position absolue d'une shape ?


Sujet :

VBA Word

  1. #1
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut Obtenir la position absolue d'une shape ?
    Bonjour à tous et merci de votre temps et de votre aide.

    Je débute en VBA Word et j'aimerai récupérer la position absolue (c-à-d les coordonnées (X, Y), en cm ou pouces selon ce qui est le plus simple), par rapport à la feuille d'une Shape Word.

    J'ai trouvé les propriétés left et top mais elle donne une position relative et je n'arrive pas à passer à la position absolue. Une recherche sur Google n'a rien donné d'exploitable

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    La position d'un Shape est toujours relative et est données en points.

    On convertit ces points en pouces ou centimètre à l'aide d'une fonction intégrée.

    Cette position est données par rapport aux marges verticales et horizontales.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Expert éminent
    Avatar de Sepia
    Homme Profil pro
    Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Inscrit en
    Octobre 2007
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3 117
    Points : 6 856
    Points
    6 856
    Par défaut
    Salut Marot_r

    Le problème des Shapes dans Word est qu'elles peuvent avoir beaucoup de paramètres de positionnement et d'habillage. La solution la plus efficace serait que tu nous indiques ce que tu utilises comme code de base en VBA pour récupérer la position et, si tu peux, mettre un exemple avec ta shape de base pour que l'on puisse avancer.

    @+

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Voilà

    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
    Private Sub ListField()
        Dim o As Object
        Dim s As Shape
        Dim f As Field
        
        On Error GoTo Err_ListField
        
        For Each f In ActiveDocument.Fields
            Debug.Print Replace(Replace(f.Code, Chr(21), "}"), Chr(19), "{")
        Next f
        
        For Each s In ActiveDocument.Shapes
            Debug.Print s.Name, s.Top, s.left
            Debug.Print s.RelativeVerticalPosition, s.RelativeHorizontalPosition 'Essai pour voir ce que cela renvoi
            
            Debug.Print s.TextFrame.TextRange.Fields.Count
            
            For Each f In s.TextFrame.TextRange.Fields
                Debug.Print Replace(Replace(f.Code, Chr(21), "}"), Chr(19), "{")
            Next f
    NextShape:
        Next s
        
    Exit_ListField:
        Exit Sub
        
    Err_ListField:
        Select Case Err.Number
            Case 5917
                Resume NextShape
                
            Case Else
                MsgBox "Erreur : " & Err.Number & ", " & Err.Description
        End Select
        
    End Sub
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Cette propriété ne renvoie pas une valeur mais une constante spécifiant par rapport à quoi l'image est positionnée dans le document.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Merci Heureux-oli mais la ligne qui m'interesse est celle-ci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print s.Name, s.Top, s.left
    où s est la shape en cours.

    Je pense que ta réponse concerne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print s.RelativeVerticalPosition, s.RelativeHorizontalPosition
    qui en effet renvoit des constantes. (2 dans mon cas).

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bon suite à une autre demande j'ai trouvé cela.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    positionShapeX = Selection.Information(wdHorizontalPositionRelativeToPage)
    positionShapeY = Selection.Information(wdVerticalPositionRelativeToPage)
    Dans l'ensemble ça marche mais parfois cela donne un nombre négatif.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2018
    Messages : 16
    Points : 17
    Points
    17
    Par défaut
    Bonjour,
    Je reviens sur cette ancienne discussion qui se termine par "parfois celà donne un nombre négatif".
    J'ai constaté ce problème. Y a- t-il une solution trouvée depuis?

Discussions similaires

  1. Récuperer des positions absolues dans une interface
    Par Lelio1407 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 19/06/2012, 12h00
  2. position absolue d'une div
    Par helpcomm dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/12/2011, 13h37
  3. Liens en position absolue sur une image de fond
    Par Msieurduss dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 17/12/2010, 22h45
  4. Position absolue d'une fenêtre avec X11 / Xlib
    Par ZeRevo dans le forum Linux
    Réponses: 1
    Dernier message: 12/08/2009, 15h04
  5. [JTable] Position absolue d'une cellule.
    Par Alphonse87 dans le forum Composants
    Réponses: 2
    Dernier message: 08/08/2008, 10h10

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