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 :

position des images sur feuille excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 2
    Par défaut position des images sur feuille excel
    [EX02][VBA]

    Bonjour,

    Mon problème est le suivant, je génère sous VBA Excel, une liste assez longue comportant des images. Certaines images chevauchent 2 pages, je voudrais controler la position des images qui est sur deux pages en la remontant sur la page précédente ou la descendant sur la page suivante.

    Merci pour les pistes que vous pourrez me suggérer.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Tu peux peut-être utiliser le top des cellules et la hauteur de l'image précédente afin de positionner tes images.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For i = 1 to Image1.height
           If Cells(i, 1).top < Image1.height then
                 Image2.top = Cells(i, 1).top
           endif
    Next
    Juste pour l'idée

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

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour tlm,

    ouskel, à mon tour de t'ennuyer un peu la piste est bonne mais il me semble que ça va juste placer les images les unes à la suite des autres sans tenir compte des sauts de page (quoique j'aurais plutot dis If Cells(i, 1).top > Image1.height then).

    Mais ton idée est à creuser sachant qu'on a un saut de page +/- tout les 714 pixels (au format portrait), on devrait arriver à dire que si l'image tombe sur un multiple de 714, on la décale. Mais pour savoir dans quel sens la décaler, il faudrait connaître la hauteur de chaque image.

    A mon avis, tout ce qui est question de mise en page est très difficile à réaliser par macro vu que l'on tombe dans le critère "ça à de la gueule" et que ce critère est relatif d'une personne à l'autre.

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par fring
    ouskel, à mon tour de t'ennuyer un peu... j'aurais plutot dis If Cells(i, 1).top > Image1.height then).
    Tu as raison.
    Citation Envoyé par fring
    Mais ton idée est à creuser sachant qu'on a un saut de page +/- tout les 714 pixels (au format portrait), on devrait arriver à dire que si l'image tombe sur un multiple de 714, on la décale.
    Non, cette hauteur dépend des marges. Mais l'idée est bonne.
    Dommage qu'on ne puisse pas donner à une cellule la dimension d'un page !
    Reste plus qu'à... Je joins un fichier pour expliquer ce que je ferais. Présentation portrait ou paysage, on s'en f...
    Pièce jointe 25666
    - Affichage des sauts de pages -> Menu affichage -Afficher les saut de pages.
    - On obtient la position de la droite de la page en prenant le left de la colonne H (dans mon exemple)
    - De même, on obtient la position basse du saut de page en prenant le top de la ligne 57 (dans mon exemple)
    - Le left de la première page = zéro
    - Le top de la première page = zéro
    - Ne reste plus qu'à centrer l'image
    La suivante ? Top = Top ligne 57, bas = Top ligne 113
    Si une image déborde, la redimensionner

    Juste une idée en attendant une meilleure

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 2
    Par défaut solution suggérée
    Merci pour la suggestion avec cells(i,1).top
    Ce que je fais, c'est que je vérifie dans mon document si le top d'une image est inférieur au top de la cellule du saut de page, et si l'image se trouve plutôt sur la page en cours ou plutôt sur la page suivante (en utilisant la propriété Height); si ce n'est pas le cas je vérifie la position de l'image avec le haut de page suivante; et enfin je décale ma photo à la limite du saut de page. Le saut de page est localisé avec la propriété : HPageBreaks(i).Location.

    ce qui donne :

    Pour chaque saut de page :

    top_bdp est la position du haut de la cellule du saut de page de la page courante (càd tout en bas)
    TOP_HDP est la position du haut de la de la cellule du saut de page de la page suivante (càd tout en haut)


    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
    For Each Photo In ActiveSheet.Shapes
     
       Photo.Select
     
       TOP_PHOTO = Photo.Top
     
    ' traitement pour le bas de page de la page courante   
     
       If top_bdp > TOP_PHOTO Then
    'vérifie qu'au moins la moitié de l'image est dans la page courante   
          If (top_bdp - TOP_PHOTO) > =Photo.Height / 2 Then
    'décale l'image vers le haut
                Do While top_bdp < TOP_PHOTO + Photo.Height
                    TOP_PHOTO = TOP_PHOTO - 1
                Loop
                Photo.Top = TOP_PHOTO
        End If
       Else
        'Exit For
       End If
     
    Next Photo
     
    ' traitement pour le haut de page de la page suivante
     
    For Each Photo In ActiveSheet.Shapes
     
        Photo.Select
        Ph_ordre = Photo.ZOrderPosition
     
       TOP_PHOTO = Photo.Top
     
       If TOP_HDP > TOP_PHOTO Then
        If TOP_HDP < TOP_PHOTO + Photo.Height Then
    'décale l'image vers le bas
                Do While TOP_HDP > TOP_PHOTO
                    TOP_PHOTO = TOP_PHOTO + 1
                Loop
                Photo.Top = TOP_PHOTO
        End If
       End If
     
    Next Photo
    Merci pour vos conseils et à bientôt

+ 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. Importer des images sur Excel
    Par khelilo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/12/2012, 11h38
  3. ranger des images sur une feuille à partir d'un classeur
    Par bobafric dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/08/2010, 09h25
  4. Stocker des données dans la mémoire pour exploitation sur feuilles excel
    Par newcodeur dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 16/09/2008, 12h03
  5. [HTML] position des images sur un site
    Par didi71 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 21/07/2008, 12h10

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