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 :

Récupérer le chemin d'une image dans le classeur [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de anarchiste-mouton
    Homme Profil pro
    ceci
    Inscrit en
    Décembre 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ceci
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2017
    Messages : 69
    Par défaut Récupérer le chemin d'une image dans le classeur
    Bonsoir,

    Après être tombé là-dessus (merci beaucoup pour tout ça), j'aimerais donc afficher une icone dans la barre de caption de mon usf.
    Seulement j'aimerais récupérer l’icône depuis le classeur pour que ce dernier soit portable et non depuis mon C:\
    Comment récupérer la variable "Fichier" (sous forme de string) pour que cela fonctionne? Imaginons que l'image s'appelle "Icone_Fen" est qu'elle soit située dans la worksheets("Feuil2").

    Cordialement

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour

    Utilises Thisworkbook.Path

  3. #3
    Membre confirmé Avatar de anarchiste-mouton
    Homme Profil pro
    ceci
    Inscrit en
    Décembre 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ceci
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2017
    Messages : 69
    Par défaut
    Bonsoir Patrice,

    Dans l'exemple de silkyroad, on trouve ça :
    Fichier = "C:\Documents and Settings\mimi\dossier\bouton.ICO"

    Or si j'indique juste mon Path, la méthode appelée avec Fichier en argument ne va pas savoir quelle image prendre dans le .XLSX

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Que veux-tu finalement ?
    inclure "en dur" quelque part dans ton classeur une icône dont tu veux mettre une image dans la barre de titre de ton userform ?
    C'est cela ?
    Si oui : mets-donc simplement l'image de cette icône dans un contrôle image (avec sa propriété visible = false) de ton userform et utilise directement cette image en lieu et place de l'extraire d'un fichier par une fonction de l'Api de Windows .
    Cette manoeuvre est facile si tu as compris le code du lien auquel tu te réfères.
    Montre-moi que tu l'as au moins un peu compris (montre ton code sur cette indication). Je corrigerai au besoin, bien que je n'aime pas que l'on détourne quelque peu la véritable vocation d'un tableur.

  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
    Bonjour
    tout d'abords dans un xlsx ca risque pas de fonctionner puisque c'est un type de classeur sans macro

    ensuite
    1. met un control image dans ton userform meme invisible on s'en fout
    2. attribut lui ton icone a partir de VBE
    3. sauve ton classeur PAS EN XLSX !!!!! MAIS XLSM


    exemple code
    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
    Option Explicit
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
                                        (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function SendMessageA Lib "user32" _
                                          (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, _
                                           ByVal lParam As Long) As Long
    Private Declare Function ExtractIconA Lib "shell32.dll" _
                                          (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long
     
    Private Sub UserForm_Initialize()
        Dim Fichier As String
        Dim x As Long
        SavePicture Me.Image1.Picture, "C:\Users\polux\DeskTop\monicone.ico"
        'Chemin et nom du fichier icône à afficher
        Fichier = "C:\Users\polux\DeskTop\monicone.ico"
        'Vérifie si le fichier existe
        If Dir(Fichier) = "" Then Exit Sub
        x = ExtractIconA(0, Fichier, 0)
        SendMessageA FindWindow(vbNullString, Me.Caption), &H80, False, x
    End Sub
    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
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Perso, je m'orienterais vers un fichier ico mis "à côté" de ton fichier excel (dans le même dossier)

    La procédure de SilkyRoad doit alors être adaptée pour utiliser le chemin du fichier. J'ai en plus adapté le test sur l'existence du fichier car je n'aime pas les Exit Sub. Il faut évidemment le nom du fichier ico à récupérer. Pour la portabilité, il suffit de faire voyager les fichiers ensemble.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub UserForm_Initialize()
        Dim Fichier As String
        Dim x As Long
     
        'Chemin et nom du fichier icône à afficher
        Fichier = ThisWorkbook.Path & "\favicon.ico"
        'Vérifie si le fichier existe
        If Dir(Fichier) <> "" Then
          x = ExtractIconA(0, Fichier, 0)
          SendMessageA FindWindow(vbNullString, Me.Caption), &H80, False, x
        End If
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    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
    Attention avec la methode savepicture tout ce qui est transparent dans l'icon devient noir

    et a ma grande surprise ca fonctionne avec les jpg,gif,ico
    extracticonA doit extraire le miniature de l'image avec niconindex
    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

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Re
    Pourquoi s'acharner ainsi à extraire une icône d'un fichier ?
    Pire : pourquoi importer une image, puis la sauvegarder dans un fichier, puis l'extraire de ce fichier ?
    Alors qu'il suffit de mettre cet icône en dur (en mode création) dans un contrôle image sur l'userform, puis de l'utiliser directement ?
    Je ne comprends vraiment pas que l'on prenne des chemins tortueux alors qu'est présent un chemin direct.
    J'attends de voir ce qu'aura au moins tenté d'écrire dans ce sens anarchiste-mouton (voir mon message précédent). J'y tiens. Si vraiment toujours en difficulté, j'interviendrai pour montrer comment ne prendre qu'une partie du code objet du lien de référence.

  9. #9
    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
    ok autant pour moi unparia ca fonctionne sans extract et sans export MAIS attention uniquement si l'image dans le control image est de type ".ICO"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Explicit
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
                                        (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function SendMessageA Lib "user32" _
                                          (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, _
                                           ByVal lParam As Long) As Long
     
    Private Sub UserForm_Initialize()
            SendMessageA FindWindow(vbNullString, Me.Caption), &H80, False, Me.Image1.Picture
    End Sub
    en meme temps ca aurait du me titiller . ".picture " nous donne les datas de meme que extracticonA

    respect !!!
    si on veut utiliser une image normale jpg,gif,bipmap il faut extraitre l'image dans un fichier et récupérer l'icone 0 du fichier qui apres verif avec WIA nous donne bien le miniature (testé avec jpg)
    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

  10. #10
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    MAIS attention uniquement si l'image dans le control image est de type ".ICO"
    Pour mémoire :
    j'aimerais donc afficher une icone dans la barre de caption de mon usf.
    Par ailleurs :
    1) préférer l'évènement Load Activate à Initialize
    2) ne pas faire une confiance aveugle à la détermination du handle du userform par utilisation d'un FindWindows basé sur une propriété Caption. Le risque est faible, mais il existe (une autre fenêtre éventuellement déjà ouverte et avec le même caption)

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

Discussions similaires

  1. récupérer le nom d'une image dans un javascript
    Par adoptioninternationa dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 26/06/2008, 15h36
  2. [Upload] Enregistrer chemin d'une image dans ma BDD
    Par Erwan M. dans le forum Langage
    Réponses: 6
    Dernier message: 02/04/2008, 15h45
  3. Récupérer la taille d'une image dans un canevas
    Par Exca dans le forum Tkinter
    Réponses: 3
    Dernier message: 01/12/2006, 12h23
  4. [MFC] Récupérer le chemin d'une image
    Par Rafoo dans le forum MFC
    Réponses: 2
    Dernier message: 08/06/2006, 14h52
  5. Récupérer la taille d'une image dans un fichier (GIF/JPEG)
    Par SheikYerbouti dans le forum Multimédia
    Réponses: 4
    Dernier message: 12/05/2005, 14h17

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