none
Insertion d'image automatique selon condition

    General discussion

  • Bonjour,

    Je souhaite insérer des images dans une liste de produit automatiquement. mes images sont dans un classeur excel indépendant de celui où je souhaite qu'elles apparaissent. sous la version d'Excel 2003 il existait une formule (=afficheimage) qui permettait de réaliser cette action mais aujourd'hui, Excel 2007 et 2010 semble ne pas reconnaitre cette formule lorsque je l'écrit) je suis sous 2007 et même bientôt 2010.

    Je souhaite donc faire apparaitre une image selon un code article automatique dans une cellule et je ne sait pas comment faire sous 2007

    Quelsu'un peut t'il m'aider?


    Phimony

    Tuesday, June 26, 2012 7:09 AM

All replies

  • Bonjour,
    Il n'y a jamais eu une telle fonction dans Excel 2003. Tu avais sans
    doute une macro complémentaire pour cela. Le mieux serait de la
    récupérer; sinon, il faudra passer par une macro.
    Cordialement.
    Daniel
     
     
     
    Tuesday, June 26, 2012 8:23 AM
  • Bonjour,

    Je n'est plus mon fichier de base malheureusement. Je ne sait pas comment faire pour que lorsque je saisi mes lignes de code article mes photos apparaissent automatiquement. je peu en effet faire une macro en faisant un copié/coller. Ce que je voudrai faire c'est une recherche de la valeur de mon code article et qu'il me trouve la photo correspondante dans le fichier excel où se trouve la photo correspondante à celui-ci.

    Description de mon fichier:

    Code désignation référence

    2900     xxxxxxxx

    2900p   Image de la photo automatique si je saisi ce 29

     

    Puis nouvelle saisie pour suite du document

    1529      xxxxxxxxx

    1529p   nouvelle de photo

    etc

    Dans le fichier où ce trouve les photos, celle-ci ne sont pas nommé (Image 1, Image 5, etc...) et sont simplement insérer (via "insertion/image" et mis devant les cellules d'un tableau que j'ai créé avec des titres correspondant aux codes du tableau ci-dessus.

    Peut-être que je peu avancer sur une macro ou automatiser une recherche de valeur dans mon tableau d'image, entre le code saisi (2900p et le titre de mon tableau) et ensuite peut-être qu'il faudrait que mes image soit reliées aux cellules (comment faire?) enfin je pourrai effectuer une recherche Verticale avec une conditionnelle qui prendra la photo correspondante au code saisi sous le titre correspondant en dessous du titre exact. Qu'est ce que vous en pensez? Pouvez vous m'aiguiller SVP?

    Merci de votre aide.


    Phimony

    Tuesday, June 26, 2012 9:32 AM
  • Tu peux créer une image liée pointant vers une plage. Celle-ci s'actualisera chaque fois que la plage source s'actualise.

    En combinant cette technique avec une plage dynamique nommée, tu peux atteindre le résultat désiré sans VBA si le nombre d'image à afficher est déterminé à l'avance.

    Dans le cas contraire, il te faudra utiliser VBA, soit pour insérer le nombre voulu d'images dynamiques, soit pour insérer les images elle-mêmes.


    The Data Specialist (Blog)

    Tuesday, June 26, 2012 12:01 PM
  • Bonjour,

    Merci pour ton aide et ta réponse.

    le but étant simplement de faire apparaitre une image (situé dans un classeur indépendant) lié à un code article saisi dans une unique colonne.

    Comment créer une image liée à une plage. sachant que mon fichier de base est toujour vierge au départ.

    Je ne connais pas la méthode pour lié une image à une plage ni celle pour nommerune plage dynamique (comme vous le décrivez) ce qui effectivement serai (comme vous le dite) certainement la bonne solution).

    Pouvez vous m'aidez afin que je test cette méthode.

    Merci pour vos indications


    Phimony

    Tuesday, June 26, 2012 12:31 PM
  • La macro suivante va chercher le fichier jpg portant le nom entré en colonne A. A adapter.

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Column = 1 And Target.Value <> "" Then
            With ActiveSheet
                On Error Resume Next
                ActiveSheet.Shapes("IMG" & Target.Row & Target.Column).Delete
                On Error GoTo 0
                ActiveSheet.Shapes.AddPicture "C:\Users\Daniel\Pictures\" & Target.Value & ".jpg" _
                    , msoFalse, msoTrue, Target.Offset(, 1).Left, Target.Offset(, 1).Top, 500, 500
                ActiveSheet.Shapes(ActiveSheet.Shapes.Count).Name = "IMG" & Target.Row & Target.Column
            End With
        End If
    End Sub

    Daniel

    Tuesday, June 26, 2012 2:13 PM
  • Bonjour,

    merci pour la macro malheureusement la macro ne fonctionne pas et m'incrit end sub attendu.

    voici ce que j'ai inscrit,

    Sub Macro3()
    '
    ' Macro3 Macro
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Column = 1 And Target.Value <> "" Then
            With ActiveSheet
                On Error Resume Next
                ActiveSheet.Shapes("IMG" & Target.Row & Target.Column).Delete
                On Error GoTo 0
                ActiveSheet.Shapes.AddPicture "CC:\Users\Philippe\Pictures" & Target.Value & ".jpg" _
                    , msoFalse, msoTrue, Target.Offset(, 1).Left, Target.Offset(, 1).Top, 500, 500
                ActiveSheet.Shapes(ActiveSheet.Shapes.Count).Name = "IMG" & Target.Row & Target.Column
            End With
        End If
    End Sub


    Phimony

    Tuesday, June 26, 2012 2:34 PM
  • Pour créer une plage  nommée:

    1. Aller dans l'onglet Formule puis choisir "Définir un nom".
    2. Créer une plage du nom SourceImage
    3. Entrer la formule adéquate. Par exemple
      =CHOISIR(EQUIV(code_article;liste_des_codes;0);plage1;plage2; ...)

    Pour créer une image liée:

    1. Créer une image ou en créer une par collage spécial.
    2. Sélectionner l'image.
    3. Entrée de la formule =SourceImage dans la barre de formule

    À noter que les images originales doivent être alignées aux plages, pour que cela fonctionne.

    De plus, Excel n'aime pas trop les références relatives pour les images dynamiques.

    À toi de voir, si le scenario se prête à ce type de construction.


    The Data Specialist (Blog)

    Tuesday, June 26, 2012 2:56 PM
  • Il faut que tu copies la macro telle que je te l'ai donnée dans le module de la feuille (clic droit sur l'onglet et clic sur "visualiser le code"). Colle alors dans la partie de la feuille la macro (sans rien y ajouter).

    suppose que tu aies une image nommée "exemple.jpg" dans le dossier "C:\Users\Daniel\Pictures".Quand tu entreras "exemple" en colonne A, la macro se déclenchera automatiquera et insérera l'image "exemple.jpg" en cellule B.

    Daniel

     
    Tuesday, June 26, 2012 3:37 PM
  • Bonjour,

    Super cela fonctionne merci pour votre patience avec un novice sur VBA comme moi. par contre mon problème de base était que mes images correspondantes aux codes de désignations sont sur un classeur Excel classés par onglet comment incorporer cette adresse dans votre macro?

    De plus, pour votre macro, est-ce possible, lorsque qu'il ne reconnait pas une référence de la colonne A correspondante dans le dossier ou le fichier de référence, que le message d'erreur de la macro s'affiche et que donc je puisse continuer ma saisi de code?

    Pouvez-vous m'aider une fois de plus? sinon j'adapterai mon fichier avec une colonne caché ou quelque chose dans ce style c'est déjà super.

    merci déjà beaucoup.


    Phimony

    Wednesday, June 27, 2012 6:40 AM
  • Bonsoir,
    Il est préférable de faire rédérence à un fichier image. Il est posible
    d'extraire le chemin de l'image correspondante depuis le fichier
    source, mais il est plus simple de faire directement référence à ce
    fichier.
    Cordialement.
    Daniel
     
     
     
    Sunday, July 01, 2012 6:20 PM
  • Bonjour,

    Merci pour votre réponse même en Week end, cette solution fonctionne trés bien néanmoins je me rend compte que lorsque j'actionne les macros que j'avais mises en place (enregistrement du fichier dans un tableau, enregistrement dans un dossier, etc..) elles ne focntionnent et elles me mentionnent un message d'erreur soit "13" soit "14" soit "1004". 

    Est-ce que la macro enregister ne prime pas sur les autres et ne serait'il pas bon de l'enregistrer différemment dans un module ou autres afin que mes autres macro fonctionnent comme avant car je souhaite les garder elle me sont trés importantes.

    Aujourd'hui j'ai enregistré votre programme dans "visualiser le code" comme vous me l'avais dit . que faire?

    Merci encore de votre aide.


    Phimony

    Monday, July 02, 2012 7:16 AM
  • Bonjour,
    On peut procéder comme ceci : si tu as une image par feuille sur la
    feuille 1 du classeur; tu entres le nom du fichier - sauf l'extension -
    en colonne A et la macro colle l'image en colonne B. Alternativement,
    on peut utiliser 1 seul classeur et plusieurs feuilles avec et même
    plusieurs images sur le même onglet. Indique ce que tu préfères :
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Wbk As Workbook
    Const Chemin As String = "c:\temp\"
    If Target.Column <> 1 Then Exit Sub
    Application.ScreenUpdating = False
    On Error Resume Next
    Set Wbk = Workbooks.Open(Chemin & Target.Value & ".xlsm")
    If Err.Number <> 0 Then
    Err.Clear
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    MsgBox "Erreur de saisie"
    Exit Sub
    End If
    On Error GoTo 0
    Sheets(1).Select
    ActiveSheet.Shapes(1).Copy
    ThisWorkbook.Activate
    Target.Offset(, 1).Select
    Application.EnableEvents = False
    ActiveSheet.Pictures.Paste.Select
    Wbk.Close False
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    End Sub
     
    Pour les erreurs provoquées dans les autres macros, il faudrait que tu
    postes le code en indiquant la ligne en erreur avec le message exact.
    Daniel
     
     
     
    Monday, July 02, 2012 10:20 AM
  • Bonjour,

    pour la récupération d'image je souhaite enregistrer les images dans un dossier, donc la premiére commande que vous m'avais faite est trés bonne. le faite d'enregister mes images dans un dossier me permettra de sauvegarder mes images et de les renommer petits à petits au court de mon utilisation dans un dossier de référence que j'ai intégré dans le programme que vous m'avais transmis. Je le trouve parfait.

    Votre programme va donc chercher les images dans un dossier image où je place mes images et en fonction de ce que je saisi il place l'image où je la souhaite, c'est excelent.

    mon problème, reste dans l'execution de mes autres macros qui fonctionnent sans votre programme et dés lors que je mets ce programme, je peu l'actionner sans probleme (les images s'affichent et je peu travailler correctement) mais dés que j'actionne l'un des boutons auquel j'ai affecter des macros. il me donne un message d'erreur (une fenêtre s'ouvre et il est écrit : erreur d'execution '13' : incompatibilité de type) et me renvoi sur la ligne de votre programme (mis en gras) :

    Voici le programme:

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Column = 2 And Target.Value <> "" Then
            With ActiveSheet
                On Error Resume Next
                ActiveSheet.Shapes("IMG" & Target.Row & Target.Column).Delete
                ActiveSheet.Shapes.AddPicture "C:\Users\GUERARD Philippe\Pictures\" & Target.Value & ".gif" _
                    , msoFalse, msoTrue, Target.Offset(, 0).Left, Target.Offset(, 0).Top, 400, 130
                ActiveSheet.Shapes.AddPicture "C:\Users\GUERARD Philippe\Pictures\" & Target.Value & ".jpg" _
                    , msoFalse, msoTrue, Target.Offset(, 0).Left, Target.Offset(, 0).Top, 400, 130
                ActiveSheet.Shapes.AddPicture "C:\Users\GUERARD Philippe\Pictures\" & Target.Value & ".png" _
                    , msoFalse, msoTrue, Target.Offset(, 0).Left, Target.Offset(, 0).Top, 400, 130
                ActiveSheet.Shapes.AddPicture "C:\Users\GUERARD Philippe\Pictures\" & Target.Value & ".bmp" _
                    , msoFalse, msoTrue, Target.Offset(, 0).Left, Target.Offset(, 0).Top, 400, 130
                ActiveSheet.Shapes.AddPicture "C:\Users\GUERARD Philippe\Pictures\" & Target.Value & ".png" _
                    , msoFalse, msoTrue, Target.Offset(, 0).Left, Target.Offset(, 0).Top, 400, 130
                ActiveSheet.Shapes(ActiveSheet.Shapes.Count).Name = "IMG" & Target.Row & Target.Column
            End With
        End If
    End Sub

    merci encore,


    Phimony

    Monday, July 02, 2012 12:10 PM
  • Il faudrait que chacune de tes macros commencent par la ligne :

    Application.EnableEvents = False

    et se termine par la ligne :

    Application.EnableEvents = True

    Ce qui évitera de déclencher la macro :

    Private Sub Worksheet_Change

    Daniel

    Monday, July 02, 2012 1:04 PM
  • Bonjour, j'ai réalisé cette action sur l'une de mes macros ce qui me désactive ma macro qui contient ces 2 lignes donc cel fonctionne, merci.

    mais la macro : Private Sub Worksheet_Change est elle aussi désactivé. Deplus si je supprime les 2 ligne dans ma macro où j'ai appliqué les 2 lignes, (je devrai retrouver ma macro Private Sub Worksheet_Change) cela ne fonctionne pas.

    est-ce que elle aussi doit avoir c'est 2 lignes? que doi-je faire?


    Phimony

    Monday, July 02, 2012 1:48 PM
  • "Application.EnableEvents = False" désactive le fonctionnement des macros évènementielles comme celle qui insère les images. "Application.EnableEvents = False" les réactive. Je ne comprends pas ce qe tu cherches à faire en combinant les deux macros.

    Daniel

    Monday, July 02, 2012 1:57 PM
  • Merci pour ta réactivité,

    Je ne veu pas combiner les deux. Je veu qu'elles fonctionnent mais l'une pendant que je saisi (Private Sub Worksheet_Change ) donc événementiel comme tu dis, et les autres lorsque j'en ai le besoin (enregistrement spécifique, impression et réajustement, etc...).

    Tes commandes ("Application.EnableEvents = False" et "Application.EnableEvents = True") sont parfaites mais le probléme est que ma macro "Private Sub Worksheet_Change" est désactivé elle aussi sans mettre ces 2 lignes de commande.

    est-ce que elle aussi doit avoir c'est 2 lignes?


    Phimony

    Monday, July 02, 2012 2:06 PM
  • Salut,

    Milles et Milles excuses,

    Je viens de trouver mon erreur, comme je le disais Tes commandes ("Application.EnableEvents = False" et "Application.EnableEvents = True") sont parfaites.

    dans mon execution de ma macro celle-ci s'arretée aux chemin d'accés qui était déffaillant car sur mon disque dur que je n'est pas avec moi. en redefinissant mon chemin d'accés sur mon PC l'action de tes commande à pu se terminé et donc redonner l'évenement de ma macro actif. il désactivé la macro mais ne réactivé pas car il s'arrété en chemin.

    Je te remerci pour ton aide si précieuse et pour ta patience.


    Phimony

    Monday, July 02, 2012 2:18 PM
  • Bonjour,

    Je reviens sur cette question que j'avais qui grace a vous j'ai pu résolver.

    Aprés de nombreuses manipulation et essais, je me rend compte que quelquefois certaines images, que j'insert automatiquement, disparaissent lorsque je descend mon écran pour continuer a saisir mes écritures ou mes insertions.

    Lorsque que je remonte mon écran je m'apperçoit alors que celles-ci ont disparues (de temps en temps, et pas toutes). Je me suis rendu compte que ce n'est pas une question de "nombre" d'images.

    Même Lorsque j'ai enregistré le fichier ou même quité et réouvert le fichier cela ne change pas le Pb.

    Merci pour votre aide.


    Phimony

    Friday, August 31, 2012 7:48 AM
  • Bonjour, Il n'est pas impossible que :

    "IMG" & Target.Row & Target.Column

    ne crée pas de doublon, par exemple si target.row=1 et target.column=11 ou si target.row=11 et target.column=1, ce qui, dans les deux cas donne :

    IMG111

    Essaie comme ceci :

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Column = 2 And Target.Value <> "" Then
            With ActiveSheet
                On Error Resume Next
                ActiveSheet.Shapes("IMGR" & Target.Row & "C" & Target.Column).Delete
                ActiveSheet.Shapes.AddPicture "C:\Users\Daniel\Pictures\" & Target.Value & ".gif" _
                    , msoFalse, msoTrue, Target.Offset(, 0).Left, Target.Offset(, 0).Top, 400, 130
                ActiveSheet.Shapes.AddPicture "C:\Users\Daniel\Pictures\" & Target.Value & ".jpg" _
                    , msoFalse, msoTrue, Target.Offset(, 0).Left, Target.Offset(, 0).Top, 400, 130
                ActiveSheet.Shapes.AddPicture "C:\Users\Daniel\Pictures\" & Target.Value & ".png" _
                    , msoFalse, msoTrue, Target.Offset(, 0).Left, Target.Offset(, 0).Top, 400, 130
                ActiveSheet.Shapes.AddPicture "C:\Users\Daniel\Pictures\" & Target.Value & ".bmp" _
                    , msoFalse, msoTrue, Target.Offset(, 0).Left, Target.Offset(, 0).Top, 400, 130
                ActiveSheet.Shapes.AddPicture "C:\Users\Daniel\Pictures\" & Target.Value & ".png" _
                    , msoFalse, msoTrue, Target.Offset(, 0).Left, Target.Offset(, 0).Top, 400, 130
                ActiveSheet.Shapes(ActiveSheet.Shapes.Count).Name = "IMGR" & Target.Row & "C" & Target.Column
            End With
        End If
    End Sub

    Friday, August 31, 2012 9:13 AM