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 :

Repositionnement d'images en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 904
    Par défaut Repositionnement d'images en VBA
    Bonjour,

    J'ai déjà posé un post sur ce sujet samedi mais je n'arrive pas à remettre la main dessus...

    En gros, depuis quelques jours, on rencontre un problème pour repositionner des images insérées en VBA, dans Excel.
    Celles-ci sont repositionnées en fonction d'une plage fusionnée. Or, une fois sur deux, elles sont replacées trop à gauche.

    On utilise ce genre d'algorithme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xlWkShape.Left = rng.Left + rng.Width / 2 - xlWkShape.Width / 2
    Cet exemple vient d'un fichier vieux de 2-3 ans sur lequel cela fonctionnait parfaitement jusque là mais depuis quelques jours, c'est aléatoire sur le .left.

    On a vérifié les variables et tout semble ok.

    Quelqu'un rencontre ce type de problème en ce moment ?

    Je ne peux fournir les fichiers sur lesquels on rencontre ce cas, pour des raisons professionnelles...

    Cordialement,

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 423
    Par défaut
    Bon, une réponse, assez étonnante, tirée de cette discussion:
    I finally was able to pinpoint the problem starting at column C. After numerous tests without success, I finally changed the column B width by a small increment and the problem was solved.
    Cordialement.

  3. #3
    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
    bonjour
    reste a savoir si ta tes shapes son plus petite que la RNG (qui je suppose est un range)!!!!!!!!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xlWkShape.Left = ((rng.Left + rng.Width) - xlWkShape.Width ) / 2
    xlWkShape.TOP= ((rng.TOP+ rng.HEIGHT) - xlWkShape.height) / 2
    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

  4. #4
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 904
    Par défaut
    Bonjour,

    EricDgn, si j'ai bien compris ce qu'il a fait, c'est juste agrandir la colonne précédente pour avoir un mauvais alignement correct. C'est un peu bancal comme solution et on l'a appliqué sur l'un des fichiers concernés mais je n'aime pas vraiment ça.

    PatrickToulon, Oui, c'est une range et les shapes sont redimensionnées préalablement pour ne pas dépasser la range en question mais même si elles dépassaient la range en question, il n'y a que la position Left qui pose problème.

    Cordialement,

  5. #5
    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
    PatrickToulon, Oui, c'est une range et les shapes sont redimensionnées préalablement pour ne pas dépasser la range en question mais même si elles dépassaient la range en question, il n'y a que la position Left qui pose problème.
    bonjour
    relis toi
    comment veux tu centrer une image dans un range si elle dépasse la taille du range ou si elle fait la même taille !!!?????
    c'est le serpent qui se mort la queue la

    si tu veux la centrer il faut que la taille de l'image soit plus petite obligatoirement
    si elle mesure la taille du range tu n'a pas de calcul a faire, juste la mettre en left et top de ton range

    alors des grande des petite ??????
    ok
    ton calcul devra se faire comme suit
    déterminer le coté le plus grand de l'image(largeur ou hauteur)
    diviser son homologue (du range) par le coté déterminé on obtient le coeff range/ image

    tu divise donc les width et height de ton image par ce coeff(normalement quand tu en fait un l'autre suit)
    tu enlève encore au moins 2 point au 2 dimensions de ton image

    une fois cela fait tu peux calculer le left
    L=(withRange-widthimage)/2
    T=(heightRange-heightimage)/2

    on place avec L et T
    monimage.top=T
    monimage.left=L

    elle gardera son ratio et elle sera centrée horizontalement et verticalement
    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

  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
    démo complète
    que l'image soit plus grande ou plus petite elle sera redimensionnée et centrer dans la plage en rouge
    code du bouton
    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
     
    'redim et centre une image au niveau d' un range
    'quelle soit plus grande ou plus peite elle se redimantionnera et se centrera dans la plage rouge("b17:c26")
    Private Sub CommandButton1_Click()
        Dim plage As Range, monimage As Picture, coeff As Double, L As Double, T As Double, mess As String
        Set plage = Range("b17:c26")
        Set monimage = ActiveSheet.Pictures("Image1")
        If monimage.Width > plage.Width Or monimage.Height > plage.Height Then
            If monimage.Width > monimage.Height Then
                coeff = monimage.Width / plage.Width
            Else
                coeff = monimage.Height / plage.Height
            End If
            monimage.Width = (monimage.Width / coeff) - 4    '(4 ou combien tu veux ici)
            mess = " elle est plus grande"
        Else
            If monimage.Width > monimage.Height Then
                coeff = plage.Width / monimage.Width
            Else
                coeff = plage.Height / monimage.Height
            End If
            monimage.Width = (monimage.Width * coeff) - 4    '(4 ou combien tu veux ici)
            mess = " elle est plus petite"
        End If
        L = (plage.Width - monimage.Width) / 2
        T = (plage.Height - monimage.Height) / 2
        monimage.Left = plage.Left + L
        monimage.Top = plage.Top + T
        DoEvents
        MsgBox mess
     
    End Sub
    Nom : demo2.gif
Affichages : 158
Taille : 878,9 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

  7. #7
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 904
    Par défaut
    Hello !

    Je pense que tu as lu trop vite ce que j'ai écris jusque là.

    Le problème ne vient pas de ma dimension de l'image versus la range. Je sais fort bien comment faire les produits en croix pour ça. La taille de mon image est, pour moi sur le problème que je rencontre, un détail maîtrisé et on s'éloigne du sujet qui m'intéresse.

    J'ai différents algorithmes en place (sur différents fichiers Excel) qui me permettent d'intégrer des images dans Excel, les redimensionner selon une range fusionnée et les replacer selon cette dite, range.
    La redimension se passe très bien (tous les cas sont prévus) et le positionnement TOP se passe parfaitement aussi.

    Dans mon cas actuel, j'ai un fichier sur lequel l'algorithme pour repositionner en LEFT fonctionnait très bien ces dernières années.
    Dernièrement, en reprenant ce même fichier et sans toucher à l'algorithme, le repositionnement LEFT est trop décalé sur la gauche par rapport à la range, 50% du temps.
    En contrôlant les valeurs, en pas-à-pas, tout semble nickel.

    L'article d'EricDgn me semble similaire au problème que je rencontre mais je ne suis pas très fan de la solution proposée pour contourner le problème.

    Nom : Bad.png
Affichages : 131
Taille : 21,4 Ko

    Nom : Good.png
Affichages : 147
Taille : 22,4 Ko

    Cordialement,

  8. #8
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 423
    Par défaut
    Oui, c'est tout à fait bancal, mais comme indiqué dans la discussion originale, il semble que cela soit un petit bug dans Excel et que le simple fait de modifier la largeur de la colonne remédie à la situation. La modification de la largeur n'a pas été faite pour la mettre à la bonne place par rapport à l'image, mais le simple fait de faire cette modification de largeur de colonne, les choses se font correctement. Ok, c'est bizarre.
    Cordialement.

Discussions similaires

  1. [PPT-2010] Redimensionner et repositionner une image importée d'Excel vers PPT (VBA)
    Par Seb V dans le forum VBA PowerPoint
    Réponses: 2
    Dernier message: 13/05/2014, 11h54
  2. Création d'une image en vba Access
    Par crashyear dans le forum VBA Access
    Réponses: 7
    Dernier message: 27/11/2006, 14h22
  3. Images avec VBA Excel
    Par dorschner dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/09/2006, 23h28
  4. insérer image depuis vba
    Par Sebastien_INR59 dans le forum Access
    Réponses: 1
    Dernier message: 28/06/2006, 11h45

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