Afficher les images dans le formulaire

Bonjour X Cellus,

J'ai appliqué ton petit code, c'est sympa.
Comme suggéré, j'ai créé une petite image avec un texte "Pas d'image supplémentaire". Elle est incuse dans l'archive zip v 33.

J'ai toujours le bug qui fait que si je double-clique dans le tableau de l'onglet Honda, et si l'article a plus que 1 photo, le code VBA m'affiche la msgbox comme s'il ne trouvait pas l'image.

C'est certainement dû à mon ajout de code depuis que la seconde image s'affiche dans le formulaire AjouterAuDEvis.
L'image est bien présente, l'ordre des images est modifié pour cet article. Ce n'est pas bien grave, mais si ça peut t'aider à trouver d'où ça vient.

2026 05 23 155447

Merci de ton aide.

2test-v-33.zip (1.50 Mo)

PS : Suite à l'affichage de cette msgbox, la fonction Sub M_SupprimerImage(sFichier) contenue dans le module 3 ajoute un "X" dans la colonne des priorités du tableau contenu dans l'onglet BDD_Images. C'est cela qui modifie l'ordre d'apparition des images.
Donc, ne te focalise pas sur l'ordre des images. Quand le problème d'affichage de cette msgbox sera résolu, l'ordre des images ne sera plus modifié.

Sub M_SupprimerImage(sFichier)
     Answ = MsgBox(Chr(34) & sFichier & Chr(34) & vbLf & vbLf & "Voulez-vous conserver le lien vers ce fichier dans le tableau " & Chr(34) & "TBL_Images" & Chr(34) & " de la feuille " & Chr(34) & "BDD_Images" & Chr(34) & _
                   " ?" & vbLf & vbLf & "Oui = le lien sera conservé" & vbLf & "Non = le lien sera supprimé.", vbYesNoCancel, sFichier)
     r = Application.IfError(Application.Match(sFichier, Range("Tbl_images[image]"), 0), 0)     'chercher ce faux fichier dans le tableau de BDD_images
     If r > 0 Then                           'trouvé !
          Select Case Answ
               Case vbNo                     'supprimer cette ligne dans le tableau de BDD_images, on a répondu avec un "non" !!!!
                    Range("Tbl_images").ListObject.ListRows(r).Range.Delete     'supprimer sa ligne dans le tableau
                    MyImage.Picture = LoadPicture(vbNullString)
               Case vbYes                    'ne pas supprimer mais déplacer le fichier vers le bout de queue
                    With Range("Tbl_images").ListObject.ListRows(r).Range.Cells(1, 5)
                         .Value = "X" & .Value     'ajouter un "X" de manière que l'image sera la dernière image
                    End With
               Case Else
                    MsgBox "option 3 : pas encore dit ce qu'il faut faire ;-( "
          End Select
          M_aImages

          If UBound(aImages) >= 1 Then Mon_Image     'lancer recurrent la macro et on demande la première image
     End If
End Sub

Depuis que j'ai ajouté les lignes pour afficher la deuxième image, à chaque article, il y a des "X" ajoutés dans le tableau des images.

2026 05 23 163355

Je viens de voir ton message précédent au sujet du chevron.
C'est top ! :) Merci !

Pour le chemin relatif, Je n'ai pas bien du m'expliquer.
Je ne saisi pas bien comment utiliser ta solution en haut du tableau, pour l'intégrer au code VBA quand j'ajoute une photo.

J'aurais voulu que lorsque je communique le fichier Excel avec le dossier Photos rempli, que quelque soit le nouvel emplacement sur le pc "receveur", que le code puisse retrouver le sous dossier Photos et continuer à travailler. Cas qui se produira quand je vais changer de pc, par exemple.

Cela est il possible de le réaliser ?

La version 35 contient la modif du chevron qui se met au rouge. ;)

2test-v-34.zip (1.95 Mo)
message à supprimer. désolé

A nouveau,

Pour le Chemin Relatif, il n'est pas besoin de l'intégrer au code VBA. Car le code va chercher le bon chemin en feuille BDD, colonne M qui filtre les images à afficher.

Si après évolution avec le texte en A1 et ajout de la formule le chemin est changé par toi ou autre(s) personne(s) par un nouveau chemin existant. La colonne M en prendra compte.

Pour ton message d'erreur, cela ne doit pas venir du code. Mais regarde ton tableau en base BDD, tu as 2 chemins d'image, un finissant avec le sous-dossier Photos, l'autre avec les sous-dossiers TEST\photos

17796066460405535595146345915015

Donc, il vaudrait mieux n'avoir qu'un seul chemin. Car en plus cela te donne soit des images en double. Ou bien des images inexistantes dans un dossier, ce qui conduit à créer des X.

Je n'ai d'ailleurs pas téléchargé ta nouvelle version. Souviens toi que je t'avais demandé pourquoi un fichier d'image avait la référence 7003 dans ton stock images et non 7000 comme Inscris en feuille Honda.

Or, de plus, tu as une extension jpg, pour la troisième photo alors que cette 3ième photo à une extension .jpeg

Et donc, c'est comme pour le s (pluriel) que tu as ajouté malencontreusement à MyImage. Ici par étourderie tu as omis le e à l'image en stock 19233mc7000.jpeg mais Inscris en jpg sur l'onglet BDD.

En informatique un seul caractère en moins ou en plus et le cafard se pointe... Reprendre à tête bien reposée l'onglet BDD!!!

Bonjour

tout ce que tu évoques est corrigé dans la version 35.
J'ai toujours le bug, et quand il y a 3 photos, seulement 2 sont "détectées".

1test-v-35.zip (2.35 Mo)

A nouveau,

Suite,

Tu peux me faire un fichier d'entension xlsx, comportant deux feuilles.

La première avec la copie image de ta feuille BDD, représentant l'ensemble de ses colonnes. Donc avec la colonne M.

Après le bug tu fais annuler et tu vas sur cette feuille BDD. S'il y a 3 images, il devrait y avoir 3 lignes en colonne M avec leur chemin complet et non deux lignes.

La deuxième avec la copie des 3 images qui amènent le bug et leur nom. Si possible aussi 3 autres images d'une autre référence. Afin que je puisse tester sur mon fichier macro d'origine. Ce dernier ne pose aucun souci puisque j'arrive à ressortir sans bug les 3 images.

Voir mon message d'hier à 14h42 où l'image no 3 est bien passée (19233-MC7-000) et le chevron rouge indiquant celle-ci comme ultime image pour cette référence.

Je te répondrais ce soir.

Ok. Je ferai ça cet am. ;)

Bonjour

Sur mon fichier de travail, celui avec les 1522 références, je n'ai pas mis les 13 lignes dans le module 3 (voir mon message de jeudi à 09h04) et là, je n'ai pas de bug, les images s'affichent bien dans le formulaire ModificationHonda et AjouterAuDevis, mais 1 seule photo sur ce dernier.

Le chevron se met bien au rouge et devient inactif dès la dernière image atteinte.
Donc, tout va bien tant que je n'ajoute pas ces fameuses 13 lignes.

Je t'ai fais un fichier .xslx mais les macros sont perdues, bien sûr.
il y a aussi le fichier .xlsb
J'ai ajouté une référence avec 4 photos. Elles ont les noms suivants :

  • 22100MA1000-01_a03d.jpg
  • 22100MA1000-02_e0d2.jpg
  • 22100MA1000-03_97e8.jpg
  • 22100MA1000-04_ad6f.jpg

J'ai même fait une image pour afficher "pas d'image supplémentaire". NoImageSup.jpg Ce que tu m'avais suggéré.

Je m'aperçois que ça bloque dès la deuxième image. C'est sûr, il y a quelque chose que j'ai mal fait.

En fait, peut importe le nom de l'image par rapport à la référence. Une image n'a pas forcément la référence comme nom.

2026 05 25 183303

les 4 nouvelles images sont bien filtrées, elles apparaissent bien dans la colonne M.
Les noms des 3 images qui sont de la référence 19233 MC7 000 sont affichées en capture ci-dessous.

Merci de ton aide.

1test-v-36.zip (1.75 Mo)
2026 05 25 184138

Bonsoir Papicx, le Fil,

OK, j'ai téléchargé et regarderais après dîner.

Sans doute tu as ajouté un bout de code ou un caractère qui pose souci.

Si j'ai le temps de corriger et tester je répondrais en fin de soirée. Sinon demain.

À plus.

Suite,

Voici ci-dessous avec 2 images.

La première pour montrer la sortie jusqu'à la 4ème image de la référence 22100 MA1 000

captstk22100

Vérifie bien que sur la colonne BS sur feuille Honda le nombre d'images soit bien de 4.

La deuxième pour que tu effectues la correction dans le gestionnaire de Noms. Car pour le nom Mes Images il n'y avait que 3 lignes prises en compte. Et donc cela bloque lorsque il y a un plus grand nombre d'images.

captnoteshonda

Ta colonne H en feuille BDD indique bien la ligne 7 et en colonne M cela ressort bien 4 lignes. Mais vu que le nom MesImages est limité à 3 lignes, une quatrième image ne pouvait pas être affiché.

Pour ta photo pas d'image supplémentaire. Tu pourrais la désigner pas ou plus d'image et l'insérer par défaut au Label du contrôle Image1. Puisque ce Label ne s'affiche pas si des images existent mais se voit en cas d'erreur.

Bonne modification.

Bonjour X Cellus,

Grace à tes indications, j'ai enfin trouvé d'où venait cette anomalie (l'affichage de la photo manquante).
J'ai juste commenté la gestion de la suppression de l'image2. Tout simplement car dans le formulaire ModificationHonda, il n'y a pas d'image2, donc cette fonction s'activait à chaque fois dès qu'il y avait plus de 2 images à gérer.

Je ne me rappelais plus qu'on pouvait accéder au formules par le menu. D'ailleurs, je n'en suis pas l'auteur non plus.

Peut-être l'as tu effacé/désactivée dans ton fichier ou bien que ta version d'Excel ne gère pas cela.
Je ne vois que ça comme explication entre les 2 comportements pour un même fichier.

Sub Mon_Image(Optional N° As Integer)        'N° est le numéro de l'image demandé dans le cas où on a plusieurs images pour votre article
     Dim Ligne, r, aHonda, Answ, Col_Image1, iOffsetLigne
     If N° = 0 Then N° = 1
     r = Application.IfError(WorksheetFunction.XLookup("image1", Range("tabel19[tableau1]"), Range("tabel19[N°]"), 0, 0), 0)     'ligne pour l'image1 dans le tableau tabel19

     ' pour l'affichage du nombre d'image(s), puis le  .TextBoxNombreImage en fin de procédure
     With Range("tableau1").ListObject       'avec notre tableau structuré
          aHonda = .DataBodyRange.Value2     'matrice avec le contenu du tableau1
          iOffsetLigne = .Range.Row          'le décalage du tableau, donc "row" versus "listrow"
          Col_Image1 = .ListColumns("Image1").Index     'le numéro du "listcolumn" Image1 = le numéro de la colonne mais aussi décalé de 1, cad en réalité colonne 71 mais dans le TS listcolumn 70
     End With

     With MyUF                               'cet userform
          Ligne = --.TextBoxNumLigne.Text - iOffsetLigne     'lire N° du listrow dans ce textbox (décalage avec le numéro de la ligne avec les entêtes (maintenant le listobject comme référence
          If r > 0 Then                      'les coordinates de l'image1 dans le "tabel19" sont connus
               Range("Mon_Concat").Value2 = Join(Array(aHonda(Ligne, 1), aHonda(Ligne, 3), aHonda(Ligne, 7)), "|")     'concat ces 3 strings "Honda Original" & "honda New" & "designation" comme source dans BDD_images
               M_aImages
               If iImages > 0 Then
                    N° = Application.max(1, Application.Min(iImages, N°))     'eventuellement corriger le numéro de l'image demandé au nombre max d'images
                    On Error Resume Next     'continuer en cas d'erreur
                    MyImage.Picture = LoadPicture(aImages(N°))     'essayer d'importer l'image dans "image1"
                    MyImage.Tag = aImages(N°)     'ajouter le nom de l'image au tag de "image1"
                    MyImageLabel.Visible = False
                    If Err.Number <> 0 Then  'on a eu une erreur dans les 2 lignes précédentes
                         MyImage.Picture = LoadPicture(vbNullString)     'RAZ de l'image1
                         DoEvents
                         MyImage.Tag = "erreur"     'mettre "erreur" dans son tag
                         With MyImageLabel
                              .Caption = "fichier manquant " & vbLf & aImages(N°)
                              .Visible = True
                         End With
                         M_SupprimerImage aImages(N°)
                    End If

    '// DEBUT  ajout de 13 lignes pour l'affichage la deuxième image dans le formulaire AjouterAuDevis papicx 26/05/2026

                    MyImage2.Picture = LoadPicture(aImages(N° + 1))   'essayer d'importer l'image dans "image2"
                    MyImage2.Tag = aImages(N° + 1)   'ajouter le nom de l'image au tag de "image2"
                    MyImage2Label.Visible = False

                    If Err.Number <> 0 Then  'on a eu une erreur dans les 2 lignes précédentes
                         MyImage2.Picture = LoadPicture(vbNullString)     'RAZ de l'image2
                         DoEvents
                         MyImage2.Tag = "erreur"     'mettre "erreur" dans son tag
                         With MyImage2Label
                              .Caption = "fichier manquant " & vbLf & aImages(N° + 1)
                              .Visible = True
                         End With
               '          M_SupprimerImage aImages(N° + 1)
                    End If
      '// FIN  papicx 26/05/2026
                    On Error GoTo 0

               Else                          'partie pour des articles sans image
                    iImages = 0
                    MyImage.Picture = LoadPicture(vbNullString)
                    MyImage.Tag = "erreur"
                    With MyImageLabel
                         .Caption = "aucune image"
                         .Visible = True
                    End With
               End If
          End If

          .CB_First.Enabled = (iImages > 1)  'activer les 2 boutons "gauche" et "droite" si on a plusieurs images
          .CB_Next.Enabled = .CB_First.Enabled

          ' désactivation du bouton "next" quand la dernière image est atteinte. X Cellus 23/05/2026.
            .CB_Next.BackColor = IIf(N° < iImages, &H8000000F, &H8080FF)
            .CB_Next.Enabled = IIf(N° < iImages, .CB_First.Enabled, False)

          '    .TextBoxNombreImage = Cells((Ligne + 5), 69)     ' colonne BQ  Image1  affichage du nombre d'image(s)  remplacé par la ligne suivante le 13/07/2025 Bart
          .TextBoxNombreImage = aHonda(Ligne, Col_Image1)     'on a lu tableau1 dans la matrice aHonda, on utilise l'article du listrow"ligne" et le nombre d'image se trouve dans le liscolumn "Col_Image1"

          If .TextBoxNombreImage = 1 Then    ' change l'orthographe si singulier ou pluriel
               .LabelPhoto = "seule photo"      ' papicx 23/05/2026
          ElseIf .TextBoxNombreImage > 1 Then
               .LabelPhoto = "photos  " & "(" & N° & ")"    ' papicx 23/05/2026     https://forum.excel-pratique.com/s/goto/1267656
          Else
               .TextBoxNombreImage.Visible = False
               .LabelPhoto = ""
          End If

     End With
End Sub

Un grand MERCI à toi pour ta patience et ta persévérance.

L'explication de la modification de la formule est toute simple. Quand j'ai réduit le tableau dans l'onglet Images_BDD, j'ai maladroitement effacé les lignes de la colonne M. D'où correction de la formule qui, originellement, était déterminée à $M$1:$M$25. Je l'ai donc remise à cette valeur, tout en étant certain que je ne mettrais jamais autant de vue pour une pièce, mais bon.

Sur tes conseils, j'ai mis une photo dans le Label de l'image2. C'est tout simple et efficace.

2026 05 26 105401

Concernant la fonction Mon_Concat qui concatène les 3 champs : Je voudrais que les images ne soient à présent que dédiées à qu'au seul champs New_Ref_Honda.

Question : Au delà de la modification de la ligne VBA dans le module3 / Mon_Image , devrais-je aussi modifier la formule en passant par le menu comme précédemment, ou bien celle-ci va s'actualiser automatiquement ?

Module3 actuel

If r > 0 Then                      'les coordinates de l'image1 dans le "tabel19" sont connus
               Range("Mon_Concat").Value2 = Join(Array(aHonda(Ligne, 1), aHonda(Ligne, 3), aHonda(Ligne, 7)), "|")     'concat ces 3 strings "Honda Original" & "honda New" & "designation" comme source dans BDD_images
               M_aImages

modification envisagée du Module3

               Range("Mon_Concat").Value2 = aHonda(Ligne, New_Ref_Honda)

En nommant la colonne, je trouve cela plus clair. N'est-ce pas une meilleure méthode ?

J'ai bien conscience que toutes les valeurs enregistrées précédemment auront besoin d'être modifiées dans le tableau des images, mais ce sera plus pérenne pour la suite.

J'ai remarqué que la première formule sur ta capture affichait une erreur Honda#REF! et que MFC_1 reprennait cette erreur. J'ai eu beau chercher partout dans les lignes de code, je n'arrive pas à trouver où elles sont (d'où ma question précédente...) Je pense qu'elles ont été abandonnées au cours des différentes évolution de ce fichier. Partages tu cet avis ?

Merci de ton aide.

Bonsoir,

J'ai réussi à modifier le Mon_Concat et faisant comme suit :
Apparemment, ça fonctionne bien.

Modification de la fonction Mon_Concat pour ne tenir compte que de la New_Ref_honda - papicx 26/05/2026

 onglet Images_BDD, tableau TBL_Images, colonne 'concat'
        avant 
        =JOINDRE.TEXTE("|";0;TBL_Images[@[Honda_Origine]:[désignation]])

        Modifié
        =SI([@[New_Ref_Honda]]<>"";[@[New_Ref_Honda]];"")

    colonne Listrow
        avant
        =SIERREUR(EQUIV([@concat];Tableau1[Honda_Origine]&"|"&Tableau1[New_Ref_Honda]&"|"&Tableau1[designation];0);0)

        modifié
        =SIERREUR(EQUIV([@concat];Tableau1[New_Ref_Honda];0);0)

Module3 / MonImage
Sub Mon_Image(Optional N° As Integer)        'N° est le numéro de l'image demandé dans le cas où on a plusieurs images pour votre article

        ' // Modification de la fonction Mon_Concat pour ne tenir compte que de la New_Ref_honda - papicx 26/05/2026
            '    Range("Mon_Concat").Value2 = Join(Array(aHonda(Ligne, 1), aHonda(Ligne, 3), aHonda(Ligne, 7)), "|")     'concat ces 3 strings "Honda Original" & "honda New" & "designation" comme source dans BDD_images
                Range("Mon_Concat").Value2 = Array(aHonda(Ligne, 3), "")  'concat la 3ème colonne "New_Ref_Honda" comme source dans BDD_images  papicx 26/05/2026

Onglet Honda, Tableau1,     colonne  Image1 (BQ) 
    le nombre dimage ne s’affiche pas dans le formulaire

    avant 
    =NB.SI(TBL_Images[concat];JOINDRE.TEXTE("|";0;[@[Honda_Origine]];[@[New_Ref_Honda]];[@designation]))

    modifié
    =NB.SI(TBL_Images[concat];[@[New_Ref_Honda]])

Je mets le sujet en "Résolu", bien que je n'ai pas tout à fait résolu le but d'avoir un lien relatif pour le dossier Photos.

Je verrai cela plus tard.

UN GRAND GRAND MERCI à toi X Cellus, et à vous autres d'avoir essayé de m'aider. Vos indications n'ont pas été perdues.

Rechercher des sujets similaires à "afficher images formulaire"