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 :

coordonnées d'image sur feuille exel


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué Avatar de Oh!Tofocus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 217
    Points : 158
    Points
    158
    Par défaut coordonnées d'image sur feuille exel
    Je voudrais récupérer les coordonées de plusieurs photos positionnées sur une feuille EXEL

    voici une ébauche de code qui ne marche pas !
    mais bon c'est pour donner une idée de ce que je cherche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim photo As Object
    Sub coordonees()
    c = 1
    'ici on passe  toutes les images en revue et affiche leur abscisse en colonne A
    For Each photo In Shapes
    Range("A" & c).Value = photo.Left
    c = c + 1
    Next
    End Sub
    l'erreur doit être grossière mais je ne la trouve pas tout seul dans mon coin

  2. #2
    Membre habitué Avatar de Oh!Tofocus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 217
    Points : 158
    Points
    158
    Par défaut
    ça y est !!!!!
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each photo In ActiveSheet.Pictures
    ça marche trés bien !

    excusez moi d'encombrer le forum
    mais cette remarque peut aider quelques programmeurs perdus comme moi

    A+
    et BRAVO a tous les participants de ce cite....

  3. #3
    Membre habitué Avatar de Oh!Tofocus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 217
    Points : 158
    Points
    158
    Par défaut
    Mais un probleme m'interpelle !

    j' ai 2 images de 256x256 pixels
    si je les met cote a cote sur une feuille
    avec la premiere calée a gauche
    la macro me renvoie abcisse 192 pour l'image de droite.....

    pouquoi c'est pas 256

  4. #4
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Et si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox ActiveSheet.Pictures("NomImageGauche").Width
    ca donne quoi ?

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Citation Envoyé par Oh!Tofocus Voir le message
    Mais un probleme m'interpelle !

    j' ai 2 images de 256x256 pixels
    si je les met cote a cote sur une feuille
    avec la premiere calée a gauche
    la macro me renvoie abcisse 192 pour l'image de droite.....

    pouquoi c'est pas 256
    Parce que l'échelle utilisée par Excel est en Points et non en Pixels ...
    Et que 256 pixels font 192 points...
    Vala !

    Edit :
    Et je peux te dire depuis où je me trouve que ton écran est configuré en 15 twips par pixel horizontalement

    la preuve ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Command1_Click()
      Dim testwipsh As Integer, pixelsparpoucex As Double, pointsparpoucex As Double
      testwipsh = 15 ' cà, ami, c'est TON écran à toi
      pixelsparpoucex = 1440 / testwipsh
      pointsparpoucex = 72
      k = pixelsparpoucex / pointsparpoucex
      MsgBox "voilà, sur TA machine, tes 256 pixels en points ===>>" & 256 / k
    End Sub

    Ah ! les joies de VBA ...

  6. #6
    Membre habitué Avatar de Oh!Tofocus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 217
    Points : 158
    Points
    158
    Par défaut
    merci pour votre aide.

    pour la reponse de find je trouve 192 ce qui parait logique

    pour la reponse de ucfoutu j'apprécie la précision de la réponse.

    Mais est-il possible de prévoir la valeur en point d'une image 256x256
    c'est a dire pouvoir en VBA retrouver la valeur de testwipsh ( dans mon cas 15 comme ucfoutu l' a trés bien expliqué)
    en effet je voudrais que ma macro s'adapte sur d'autres PC ( avec une autre configuration d'écran !

    ma macro positionne des images de 256x256 pixels cote a cote

    actuellement sur ma becane elles sont touts les 192 points ( mais je suppose que ce sera different sur un autre PC je le testerai bientôt )

    help je ne danse pas trop bien le twips

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bon...

    Juste une idée car je n'ai pas mon portable de disponible (avec Excel) et ne peux vérifier ce qu'il retourne (en points ou en pixels ?) lorqu'on lui demande de nous dire quelles sont les dimensions de la fenêtre de l'application.
    Application.width, je pense...

    S'il la retourne en points, t'es sauvé car alors on utilisera une fonction de l'Api de Windows pour connaître la résolution de l'écran (en pixels, elle) et ... hop... on en déduira notre coefficient k par un simple calcul arithmétique ...

    Fais celà pour moi ... dis-nous ce que te renvoit, par exemple, Application.width (si c'est bien Application .idth) et dis-nous quelle est la résolution de ton écran (que tu peux voir dans ta configuration). Cela me permettra de savoir si la valeur retournée est en points (auquel cas ce sera simple) ou en pixels.

    A +

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Re...


    Bon... j'ai toujours de meilleures idées de bon matin..

    On va alors danser le twips ensemble

    regarde ce que fait ceci et sers-t-en bien (il va te dire combien ton écran contient de twips par pixel horizontalement et verticalement) :

    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
    Option Explicit
     
    Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, _
      ByVal hdc As Long) As Long
    Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, _
      ByVal nIndex As Long) As Long
    Const couic As Long = 1440
    Private Sub Command1_Click()
     MsgBox "ton écran estr configuré ainsi : " & vbCrLf & _
     nbtwipsparpixhor & " twips par pixel horizontalement " & vbCrLf & _
     nbtwipsparpixver & " twips par pixel verticalement "
    End Sub
     
     
    Function nbtwipsparpixhor() As Single
      Dim coucou As Long
      coucou = GetDC(0)
      nbtwipsparpixhor = couic / GetDeviceCaps(coucou, 88)
      ReleaseDC 0, coucou
    End Function
     
    Function nbtwipsparpixver() As Single
      Dim coucou As Long
      coucou = GetDC(0)
      nbtwipsparpixver = couic / GetDeviceCaps(coucou, 90)
      ReleaseDC 0, coucou
    End Function
    Fais-en bon usage, hein ...
    (tu peux maintenant calculer le coefficent k de mon code donné plus haut, puis l'appliquer comme vu)
    attention : n'oublie pas que tu as deux coefficients k (calcule donc kx et ky), l'un pour les mesures horizontales et l'autre pour les mesures verticales, hein... le principe de calcul étant toujours rigoureusement identique...

    Si tu ne t'en sors pas (mais c'est maintenant ultra facile), fais signe et je te mache la chose de A à Z ...

    PS : je suggère que l'on ne perde pas ce petit bout de code...

  9. #9
    Membre habitué Avatar de Oh!Tofocus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 217
    Points : 158
    Points
    158
    Par défaut
    Citation Envoyé par ucfoutu
    fais signe et je te mache la chose de A à Z ...
    N'oublie pas que l'on danse le twips et si tu me mache sur les pieds ça vas faire désordre

    à par ça merci beaucoup pour le bout de code.

    j'ai testé sur 3 ordinateurs et j'ai toujours 15 & 15
    et mes images sortent bien en 192x192.
    donc pour moi pas de problèmes,mais quelqu'un a t il d'autres valeurs pour valider le code ?

    je pense pouvoir retrouver les coefs ( des que le temps me le permetra ) sinon je te fais signe....

    A+

  10. #10
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bon...

    - tu auras 15 horizontalement et 15 verticalement sur la très grande majorité des machines.
    - sur d'autres (plus rarement) tu pourras trouver 18 horizontalement et 18 verticalement
    - sur d'autres, enfin (encore plus rare) tu pourras trouver 15 dans un sens et 18 dans l'autre

    Mon code trouvera ce nombre de twips par pixels (horizontalement et verticalement) quelle que soit la configuration de la machine.
    Il part pour celà des dimensions du bureau, en unités logiques, puis traite en fonctions des dimensions physiques de l'écran.

    C'est d'ailleurs ce à quoi je voulais aboutir en allant chercher les dimensions de l'application puis en calculant par rapport aux unités physiques
    Pourquoi suis-je passé par le bureau plutôt que par l'application elle-même ? ==>> tout simplement (regarde ma localisation) parce que j'aime être totalement indépendant de tout (les dimensions du bureau sont arrêtées pour une résolution et celles, matérielles, de l'écran, sont par construction forcément immuables dans une configuration matérielle )

    Il y avait une autre manière, que j'ai écartée car elle relevait du bidouillage le plus laid :
    insérer une image invisible de 100 pixels par 100 pixels ===>> demander au code d'aller lire les dimensions en points de cette image ===>> en déduire les coefficients kx et ky de transposition sur la machine en cours ===>> appliquer ce coefficient partout où nécessaire ... rusé, certes, mais laid !!!

    Bref : vas-y les yeux fermés ... tu n'auras pas de mauvaise surprise avec le code que je t'ai donné.

    Amitiés.

    EDIT : pour' que tu comprennes mieux la présence de certains chiffres :

    VbTwips 1 (Default) Twip (1440 twips per logical inch; 567 twips per logical centimeter).
    VbPoints 2 Point (72 points per logical inch).
    VbPixels 3 Pixel (smallest unit of monitor or printer resolution).
    tu y vois le 72 et le 1440 ?... bien.

    yapadesecré !!!

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

Discussions similaires

  1. [XL-2013] Suppression d' image sur feuille excel par macro
    Par GROBIN dans le forum Excel
    Réponses: 3
    Dernier message: 16/11/2013, 23h07
  2. positionner image sur feuille exel
    Par Oh!Tofocus dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/06/2008, 18h18
  3. position des images sur feuille excel
    Par PATHAB dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/02/2008, 11h03
  4. graphe 3D et affichage sur feuille exel ou word
    Par dadou2002 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 05/04/2007, 16h25

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