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 :

Bug fonction d'import d'image


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 5
    Par défaut Bug fonction d'import d'image
    Bonjour à tous,

    J'ai créé la fonction personnalisé suivante :

    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
        Function Image_test( _
            ByVal PictureName As String, _
            ByVal FolderName As String) As Variant
     
        Dim CellLoc As Excel.Range
        Dim p As Picture
        Dim ImagePath As String
     
     
        Set CellLoc = Application.Caller.Offset(, 0)
     
     
     
        ImagePath = FolderName & PictureName
     
            Set p = CellLoc.Parent.Pictures.Insert(ImagePath)
     
            p.Left = CellLoc.MergeArea.Left
            p.Top = CellLoc.MergeArea.Top
     
            If p.Width > CellLoc.MergeArea.Width Then p.Width = CellLoc.MergeArea.Width
            If p.Height > CellLoc.MergeArea.Height Then p.Height = CellLoc.MergeArea.Height
            'Center
     
            If p.Width < CellLoc.MergeArea.Width Then p.Left = CellLoc.MergeArea.Left + (CellLoc.MergeArea.Width - p.Width) / 2
            If p.Height < CellLoc.MergeArea.Height Then p.Top = CellLoc.MergeArea.Top + (CellLoc.MergeArea.Height - p.Height) / 2
     
     
        End Function
    Cette fonction est sensée insérée une image dans la cellule où elle se trouve, et adapter l'image sans la déformer à la cellule.

    Cette fonction fonctionne plutôt bien , mais il arrive des fois que l'image soit un peu trop grande et pas totalement dans la case (elle est décalée). Cela arrive surtout quand la fonction est combinée à une macro de sélection de dossier qui écrit le chemin de l'image à insérer dans la case "répertoire", d'où le "FolderName" dans la fonction.

    J'ajoute un fichier d'exemple pour illustrer mon problème : pour faire fonctionner l'import,d'image, créer une photo test.jpg, puis cliquer sur le bouton "choisir..."; et sélectionner le dossier dans lequel se trouve test.jpg.
    Normalement l'image s'insère dans la case, mais il arrive qu'elle soit décalée, il faut alors supprimer l'image insérée puis re-valider la formule de cellule.

    bug_fonction.xlsm

    Malgré mes efforts je ne vois pas pourquoi cela bug parfois, avez vous des idées ?

    Merci

  2. #2
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,
    j'ai modifié légèrement ta function

    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
     
    Function Image( _
        ByVal PictureName As String, _
        ByVal FolderName As String) As Variant
     
    Dim CellLoc As Excel.Range
    Dim p As Picture
    Dim ImagePath As String
     
    Set CellLoc = Application.Caller.Offset(, 0)
     
    ImagePath = FolderName & PictureName
     
        Set p = CellLoc.Parent.Pictures.Insert(ImagePath)
     
        If p.Width > CellLoc.MergeArea.Width Then
            p.Width = CellLoc.MergeArea.Width - 10
        ElseIf p.Height > CellLoc.MergeArea.Height Then
            p.Height = CellLoc.MergeArea.Height - 10
        End If
        'Center
        p.Left = CellLoc.MergeArea.Left + (CellLoc.MergeArea.Width - p.Width) / 2
        p.Top = CellLoc.MergeArea.Top + (CellLoc.MergeArea.Height - p.Height + 1) / 2
    End Function
    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 5
    Par défaut
    Salut

    Merci de ta réponse rapide.

    Malheureusement le décalage persiste lorsque la fonction s'éxecute après le choix du chemin du dossier... c'est assez mystérieux.

    Sinon après la fonction marche bien

    Merci

  4. #4
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,
    en fait, quand on modifie une des composantes hauteur/largeur,
    on modifie la totalité (dimension proportionnelle) de l'image.

    il faut tester (limites du cadre) en final, les composantes, et réajuster celle qui dépasse

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 5
    Par défaut
    Citation Envoyé par mjpmjp Voir le message
    bonjour,
    en fait, quand on modifie une des composantes hauteur/largeur,
    on modifie la totalité (dimension proportionnelle) de l'image.

    il faut tester (limites du cadre) en final, les composantes, et réajuster celle qui dépasse

    @+JP
    Salut,

    Je ne suis pas sûr de comprendre. Tu penses qu'il faut tester l'ajustement vertical puis l'ajustement horizontal du code de la fonction ?
    En fait, ce qui me fait tiquer c'est que ce décalage se produit que lorsque la feuille excel est recalculée après l'éxecution de la macro permettant de sélectionner le dossier contenant l'image.
    Lorsque je valide la fonction à la main, l'image s'insère correctement dans les cellules fusionnées.

    Autre curiosité : J'ai fait une copie du code de la macro et de la fonction dans un autre fichier Excel ne contenant aucune cellules fusionnées à part celles où la fonction s'éxecute : dans ce cas le bug n'apparaît pas non plus... Peut-être que d'autres cellules fusionnées que celles où la fonction est lancée perturbent le fonctionnement de celle-ci ?


    A+

  6. #6
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,

    dans ton code
    tu testes la largeur --> après modif la largeur "entre" dans le cadre
    et en suite
    tu testes la hauteur --> après modif la hauteur "entre" dans le cadre MAIS la largeur (qui a été modifiée de nouveau) n'entre peut être plus dans le cadre !!!

    dans mon code
    je teste la largeur --> après modif la largeur "entre" dans le cadre
    et dans ce cas j'ignore la hauteur !!!

    dans les 2 codes
    il faut déterminer quelle hauteur ou largeur est à modifier et dans quelle proportion

    dans mon code je ne traite que la largeur ou la hauteur, celle qui reste est à contrôler

    pour le bug
    si une colonne est modifiée (largeur) , il y a décalage (centrage) de l'image
    à voir une macro qui recentre l'image (à la demande ou en quittant...)

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

Discussions similaires

  1. Importer une image dans l'entête en fonction de la valeur dans une cellule
    Par guillaume7684 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/10/2016, 14h54
  2. [XL-2007] Importer une images en fonction de son nom dans l'exporateur windows
    Par Aziz_Az dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/06/2014, 14h12
  3. Fonction import d'image
    Par Kahilo dans le forum NetBeans
    Réponses: 1
    Dernier message: 09/02/2011, 12h13
  4. Réponses: 12
    Dernier message: 22/02/2005, 17h45
  5. Des fonctions OGL pour les images de format usuel ?
    Par jamal24 dans le forum OpenGL
    Réponses: 3
    Dernier message: 31/05/2003, 21h59

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