Afficher des images avec un UserForm

Bonjour,

Je débute en vba et depuis 4 jours impossible de trouver comment régler mon problème...

Je suis entrain de créer un fichier qui me servira à tenir le compte d'une asso. Pour le moment voici le fonctionnement du fichier :

  • Je complète un userform qui m'ajoute une nouvelle ligne dans mon tableau
  • Une explorateur de fichier s'ouvre afin de sélectionner une image (une facture par exemple)
  • L'image sélectionner doit apparaitre à côté de la nouvelle ligne du tableau
  • Si je clique sur une autre ligne contenant une image c'est cette dernière qui doit s'afficher (une seul image s'affiche à la fois)
  • Si je clique sur une ligne qui ne contient pas d'image l'explorateur de fichier s'ouvre pour me demander d'en sélectionner une
Le problème est que le module qui affiche les images se déclenche par rapport à si on a sélectionner une cellule du tableau, ça fonctionne très bien en "manuel" quand je clique sur une ligne vide pour ajouter une image mais ça ne fonctionne pas quand c'est le UserForm qui ajoute une ligne.
Sub AfficheImage()

derniereLigne = Range("A" & Rows.Count).End(xlUp).Row + 1

    With Sheets("Source")
        'on recupere le numero de la ligne 
        SelectionLigne = ActiveCell.Row
        'on test si un lien d'image existe ou pas
        If .Range("F" & SelectionLigne).Value = Empty Then AfficheExplorateurFichier
        'On vérifie que le fichier actuel est présent ou pas
        If .Range("F" & SelectionLigne).Value = Empty Then GoTo pasimage
        'on recupere le chemin d'accès à l'image
        CheminImage = .Range("F" & SelectionLigne).Value
        'On gere les erreurs
        On Error Resume Next
        'On supprime l'image existante s'il y en avait une
        .Shapes("SelectionImageLigne").Delete
        'On desactive la gestion des erreurs
        On Error GoTo 0
        'On insere l'image et on parametre ses proprietes
        With .Pictures.Insert(CheminImage)
            With .ShapeRange
                .LockAspectRatio = msoTrue  'respect des proportions de l'image
                .Height = 200 'on fixe la ht à 200px
                .Name = "SelectionImageLigne" ' on affecte un nom
            End With
      End With
      With .Shapes("SelectionImageLigne")
        .Left = Feuil1.Range("G" & SelectionLigne).Left
        .Top = Feuil1.Range("G" & SelectionLigne).Top
        End With
    End With
pasimage:
End Sub

J'ai essayé de remplacer la ActiveCell.Row par la variable derniereLigne mais sans succès.

Je ne pense pas avoir été très clair mais j'ai du mal à expliquer, je vous donne mon fichier pour que vous puissiez comprendre son fonctionnement ce sera surement plus simple.

Merci pour votre aide !

9suivi-finance.xlsm (32.39 Ko)

Bonjour,

Au lieu d'utiliser

.Pictures.Insert(CheminImage)

utilise une shape prédéfinie (toujours la même que tu ne délèteras jamais) mais dont tu remplaceras seulement le contenu.

Tu ne regarderas jamais plusieurs image à la fois n'est-ce pas ?

Quand tu n'as pas besoin d'image tu feras en sorte d'envoyer ton image à perpète...

.Left = 5000 'p.e

et quand tu voudras afficher l'image tu la ramènera s en zone visible (

.Left = ActiveCell.Left
.Top = ActiveCell.Top

Comme ça c'est plus facile à gérer.

Bon, je me doute que tu n'es pas plus avancé, je vais essayer de te faire un exemple, mébon pour l'instant je te donne déjà la piste hein...

A+

Une petite démo considérablement modifié parce que ton modèle ne se prêtait pas trop...

Nota j'ai plus soigné la saisie sur UserForm que sur la feuille elle-même, mais je dois pas être loin du compte...

A+

4suivi-finance.zip (824.73 Ko)

Salut,

C'est exactement ça !

Le soucis c'est qu'avec mon tableau ça a l'air d'être plus réactif mais c'est un détail à la limite, par contre ce que j'aurais aimé c'est que si on décide de ne pas importer d'image lors de la création de la ligne excel nous propose d'en importer une quand on clique sur la ligne par exemple

Re,

J'en suis arrivé à quelque chose qui me conviens plutôt bien pour le moment (voir le fichier joint).

En gros ça fonctionne comme cela pour l'instant :

  • On rempli le UserForm
  • Une ligne s'ajoute dans le tableau
  • Si on veut y joindre une image on clique sur la ligne et l'explorateur s'affiche

Mais pour que ce soit vraiment parfait il me manque encore quelque chose :

  • J'aimerais pouvoir désactiver à l'aide d'un bouton l'affichage de l'explorateur car quand on navigue dans le tableau mais qu'on ne veut pas forcement ajouter d'image ça deviens agaçant de voir l'explorateur s'ouvrir tout le temps
  • Il faudrait aussi que le calcul du solde se fasse automatiquement (=E3+C4-D4)

Merci pour ton aide :)

5suivi-finance.xlsm (33.47 Ko)

Bonjour,

Pour réduire la gêne il faut réduire Maplage à juste une colonne comme j'ai fait. Si en plus tu réduit la taille de cette colonne à 4 ou 5 mm tu ne risque pas d'être dérangé involontairement.

Cette manière de gérer le solde ne se prête guère à la gestion d'une asso... On ne gère pas le solde ligne par ligne !

Comptablement et informatiquement ça n'a aucun intéret.

Voir dans la section des téléchargement les nombreux exemples de gestion de compte.

A+

Pour la route je t'ai fait une version améliorée et surtout corrigée car il y avait quelques imprécisions.

Le solde est affiché comme la résultante des recettes et des dépenses comme dans un relevé de banque. Insérer un pseudo solde instantané à chaque ligne de dépense ne rime à rien : Ça ne fait qu'alourdir ton tableau sans réel intéret. De plus ça pose surtout pas mal de problèmes de cohérence en cas de suppression de ligne ou de tris...

19suivi-finance-vg.zip (905.10 Ko)

A+

Rechercher des sujets similaires à "afficher images userform"