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

IHM Discussion :

[Image] Chemin absolu à la création modifié par VBA après.


Sujet :

IHM

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 169
    Points
    169
    Par défaut [Image] Chemin absolu à la création modifié par VBA après.
    Je sais, les questions concernant les images pullulent en ce moment... J'ai lu tuto, anciens messages et autres doc-recherche-google mais je n'ai pas trouvé la confirmation que je cherche.

    Sur tous mes formulaires, je répète un logo d'entête (lié). J'aurais bien aimé pouvoir mettre '=CurrentProject.Path & "ressources/images/NomFichier.bmp"' directement dans la fenêtre propriété Image d'Access mais ça ne fonctionne pas. CurrentProject.Path n'est pas interprété et Access chiale parce que le chemin n'est pas valide.

    La seule solution me semble être de préciser un chemin absolu valide à la création et de changer ensuite la propriété sur le OnLoad du formulaire.

    Ou y'a une autre méthode?

    Merci :-)
    Caroline

    Correction: sur le OnOpen du formulaire.

  2. #2
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    une idée non testée ... tu pourrais utiliser une fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function GetImgPath(byval strImg as String) As String
        GetImgPath = currentproject.path & strImg
    End Function
    et en propriété
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =GetImgPath("ressources\images\bidule.bmp")

  3. #3
    Expert éminent sénior
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    slt,

    le chemin du fichier est vérifié en mode création il me semble

    donc la solution c'est de mettre l'affectation du fichier image dans l'événement "sur chargement" du formulaire

    tu peux vider la propriété image du contrôle pour éviter de stocker inutilement l'image dans la base

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par cafeine
    tu pourrais utiliser une fonction
    Négatif négatif. Déjà essayé. J'obtiendrais (et j'obtiens d'ailleurs : j'ai retenté juste pour faire sûr) la même erreur à savoir "Microsoft Office Access ne peut pas ouvrir le fichier 'GetImgPath(""ressources\images\bidule.bmp"")'"

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par Arkham46
    slt, le chemin du fichier est vérifié en mode création il me semble
    Oui...

    donc la solution c'est de mettre l'affectation du fichier image dans l'événement "sur chargement" du formulaire
    "Sur chargement", "Sur ouverture"... j'ai testé et ça fonctionne également les deux. J'aurais pensé que "Sur ouverture" était mieux puisqu'il se produit avant. Pourquoi préfères-tu "Sur chargement"?

    tu peux vider la propriété image du contrôle pour éviter de stocker inutilement l'image dans la base
    Vider... vider où? À partir de la fenêtre Propriété d'Access? Si c'est bien ça, non, ça ne marche pas. Access (2003, XP) me demande alors "Supprimer l'image du formulaire?". Si je répond Oui, le contrôle Image est supprimer complètement. Si je répond Non, la propriété est réinitialisé avec la valeur que je tentais de vider.

    En plaçant l'image en "attachée", elle ne devrait pas être stockée dans le projet, non?

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 169
    Points
    169
    Par défaut
    Un truc rigolo :

    Dans la doc : "le paramètre par défaut est (aucune)". Sauf qu'à la création d'un contrôle image, il ne semble y avoir aucun moyen de définir la propriété Image sur "aucune". Si tu ne précises pas un fichier, le contrôle est supprimé. Si tu essaies d'écrire "(aucune)", Access chiale (Le fichier '(aucune)' est introuvable). Le seul truc : provoquer une erreur. Charger un fichier qui n'est pas une image... ne provoque pas d'erreur mais initialise la propriété image à (aucune). lol.

    Mais ça ne répond pas vraiment à ma question.

  7. #7
    Expert éminent sénior
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    "Sur chargement", "Sur ouverture"... j'ai testé et ça fonctionne également les deux. J'aurais pensé que "Sur ouverture" était mieux puisqu'il se produit avant. Pourquoi préfères-tu "Sur chargement"?
    "Sur ouverture" se produit avant l'affichage des enregistrements du formulaire, c'est peut-être mieux en fait

    Vider... vider où? À partir de la fenêtre Propriété d'Access? Si c'est bien ça, non, ça ne marche pas. Access (2003, XP) me demande alors "Supprimer l'image du formulaire?". Si je répond Oui, le contrôle Image est supprimer complètement. Si je répond Non, la propriété est réinitialisé avec la valeur que je tentais de vider.

    En plaçant l'image en "attachée", elle ne devrait pas être stockée dans le projet, non?
    Oui c'est bien là.
    C'est pas grâve si l'image se vide, elle est mise à jour à l'ouverture du formulaire.
    Si tu l'attaches tu risques d'avoir des messages d'erreurs quand tu déplaceras tes fichiers, non? et je n'y vois aucun intérêt en fait.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par Arkham46
    Si tu l'attaches tu risques d'avoir des messages d'erreurs quand tu déplaceras tes fichiers, non? et je n'y vois aucun intérêt en fait.
    C'est un autre point, que je crois avoir réglé. J'enregistre mes images dans un champs OLE (on tape pas... enfin, pas tout de suite) en binaire. À l'ouverture de l'appli, je teste si le répertoire ressource existe dans le même répertoire que mon application et si non, je crée le répertoire et recopie (toujours en binaire) toutes mes images de la bd. Faut comprendre que j'ai une dizaine d'images (dont le logo qui est la plus grosse. Les autres, c'est surtout de petites icônes) qui se répètent sur la majorité des formulaires et que je dois avoir une trentaine de formulaires.

    J'ai fait quelques tests avant d'arriver à cette solution. J'ai comparé la taille du projet

    1-si les images sont intégrées
    2-si les images sont liés
    3-si les images sont stockées dans une table et lié.

    La solution 3 donne une application moins volumineuse que la solution 1 tout en réglant le problème de déplacement de fichier de la solution 2. Je crois que ça vaut la peine.

    Ou peut-être que je me casse trop la tête pour quelques malheureux octets.

    À votre avis, le formulaire se charge-t-il plus vite avec des images intégrées?

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 169
    Points
    169
    Par défaut
    C'est pas grâve si l'image se vide, elle est mise à jour à l'ouverture du formulaire.
    C'est peut-être nos version d'Access qui ne sont pas les même? Quand j'essaie de vider la propriété Picture, ce n'est pas l'image qui se vide, c'est le contrôle qui disparaît. Access veut toujours un chemin valide en mode création ou alors, il supprime le contrôle. À moins de bidouiller pour obtenir la valeur par défaut "(aucune)", comme j'ai expliqué juste avant. Avoue que c'était un peu tordue à deviner.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 169
    Points
    169
    Par défaut
    Merci pour vos réponses. Il ne semble pas y avoir moyen d'éviter de passer par le code.

    Caroline

  11. #11
    Expert éminent sénior
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    non j'ai jamais réussi à me passer du code pour faire ça

    par contre c'est bizarre quand je supprime la propriété picture le contrôle n'est pas supprimé, l'image est vide et donc le contrôle est transparent (juste avec une bordure fine)

    j'ai access 2003 mais je crois me rappeler que c'est pareil sur 2000 et 97

  12. #12
    Invité
    Invité(e)
    Par défaut
    Salut,

    Pour palier à ce problème j'utilise l'activeX Microsof Form 2.0 Image, par programmation on fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    me.imgMontre.Picture = LoadPicture(strChemImage & "\Montre.gif")
    et strChemImage stock le chemin relatif

    Starec

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par Starec
    j'utilise l'activeX Microsof Form 2.0 Image [...] LoadPicture
    Merci. Je vais regarder du côté de LoadPicture aussi. Ça ne permettrait pas d'améliorer la rapidité de chargement de l'image et du formulaire, aussi?

    Citation Envoyé par Arkham46
    Si tu l'attaches tu risques d'avoir des messages d'erreurs quand tu déplaceras tes fichiers, non? et je n'y vois aucun intérêt en fait.
    Réflexions d'hier soir... quand tu vas écrire dans le code imgX.Picture = CurrentProject.path & "monImage.bmp", qu'elle soit en lié ou attaché, Access ira quand même d'abord rechercher l'image dans le répertoire externe. Si tu déplaces les fichiers, le problème reste le même. Non?

  14. #14
    Expert éminent sénior
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Citation Envoyé par Caroline1
    Merci. Je vais regarder du côté de LoadPicture aussi. Ça ne permettrait pas d'améliorer la rapidité de chargement de l'image et du formulaire, aussi?
    La grosse différence que j'ai vue est que LoadPicture est synchrone, et que la fenêtre de dialogue de conversion n'apparaît pas.

    Citation Envoyé par Caroline1
    qu'elle soit en lié ou attaché, Access ira quand même d'abord rechercher l'image dans le répertoire externe. Si tu déplaces les fichiers, le problème reste le même. Non?
    Je ne vois pas bien la différence entre liée et attachée...
    Ce que je veux dire c'est que si tu charges l'image avec du code il est inutile de laisser en plus le lien dans le contrôle.
    Si l'image n'est plus au bon emplacement il y a aura une erreur en mode création. En mode affichage je ne sais pas trop.
    Le message d'erreur au chargement dans le code n'est pas gênant en tout cas, vu qu'on peut gérer l'erreur.
    (Mais bon j'ai tendance à pinailler)

    Sinon ce que peux également faire pour travailler avec une image intégrée sans avoir à la mettre dans tous les formulaires :
    - tu crées un formulaire FImages que tu ouvres en mode caché
    - dans ce formulaire FImages tu as un contrôle image ImgLogo
    - dans les formulaires où tu veux mettre le logo (avec bien sûr un contrôle image ImgLogo dans le formulaire),à l'ouverture tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.ImgLogo.PictureData = Forms("FImages").ImgLogo.PictureData
    Comme tu ne t'embêtes plus avec des images externes et tu ne fais pas énormément grossir la base vu que l'image n'y est stockée qu'une seule fois.
    C'est pratique pour mettre des images de logo ou de boutons qu'on retrouve dans tous les formulaires.

    Chaque solution a ses avantages et ses inconvénients.

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par Arkham46
    Je ne vois pas bien la différence entre liée et attachée...
    Je fesais référence à cette propriété :

    Citation Envoyé par Doc M VBA
    La propriété Type image (PictureType) vous permet de spécifier si Microsoft Access conserve l'image d'un objet comme objet lié ou incorporé.

    Incorporé (Valeur par défaut) : L'image est incorporée dans l'objet et fait partie du fichier de base de données.
    Lié : L'image est liée à l'objet. Microsoft Access stocke un pointeur vers l'emplacement de l'image sur le disque.
    Je comprends mieux ce que tu voulais dire. En tout cas j,ai assez de munitions pour mieux évaluer chaque solution :-). Merci pour ton temps et tes réponses détaillées.

    Caroline

  16. #16
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 36
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Arkham46
    ...
    Me.ImgLogo.PictureData = Forms("FImages").ImgLogo.PictureData
    ...
    SMACK !!!

    Grand merci, tu viens de me faire gagner une poignée de cheveux gris.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/01/2014, 12h47
  2. [XL-2003] Création dossier par VBA
    Par Djromé dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/12/2010, 00h10
  3. Images (chemin absolu) non chargées dans ie 7 et 8
    Par liox* dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 13/09/2010, 17h57
  4. [Image] Chemin absolu d'une image
    Par El Saigneur dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 15/10/2008, 13h15
  5. création graphique par VBA
    Par Toad08 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/02/2008, 14h02

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