Insertion d'image automatique selon condition
-
26 Juni 2012 7:09
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
- Jenis yang Diubah Aurel BeraMicrosoft Contingent Staff, Owner 16 Oktober 2012 12:56 Pas de reponse
Semua Balasan
-
26 Juni 2012 8:23Bonjour,Il n'y a jamais eu une telle fonction dans Excel 2003. Tu avais sansdoute une macro complémentaire pour cela. Le mieux serait de larécupérer; sinon, il faudra passer par une macro.Cordialement.Daniel
-
26 Juni 2012 9:32
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
-
26 Juni 2012 12:01
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.
-
26 Juni 2012 12:31
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
-
26 Juni 2012 14:13
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 SubDaniel
-
26 Juni 2012 14:34
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 SubPhimony
-
26 Juni 2012 14:56
Pour créer une plage nommée:
- Aller dans l'onglet Formule puis choisir "Définir un nom".
- Créer une plage du nom SourceImage
- Entrer la formule adéquate. Par exemple
=CHOISIR(EQUIV(code_article;liste_des_codes;0);plage1;plage2; ...)
Pour créer une image liée:
- Créer une image ou en créer une par collage spécial.
- Sélectionner l'image.
- 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.
-
26 Juni 2012 15:37
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
-
27 Juni 2012 6:40
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
-
01 Juli 2012 18:20Bonsoir,Il est préférable de faire rédérence à un fichier image. Il est posibled'extraire le chemin de l'image correspondante depuis le fichiersource, mais il est plus simple de faire directement référence à cefichier.Cordialement.Daniel
-
02 Juli 2012 7:16
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
-
02 Juli 2012 10:20Bonjour,On peut procéder comme ceci : si tu as une image par feuille sur lafeuille 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êmeplusieurs images sur le même onglet. Indique ce que tu préfères :Private Sub Worksheet_Change(ByVal Target As Range)Dim Wbk As WorkbookConst Chemin As String = "c:\temp\"If Target.Column <> 1 Then Exit SubApplication.ScreenUpdating = FalseOn Error Resume NextSet Wbk = Workbooks.Open(Chemin & Target.Value & ".xlsm")If Err.Number <> 0 ThenErr.ClearApplication.EnableEvents = TrueApplication.ScreenUpdating = TrueMsgBox "Erreur de saisie"Exit SubEnd IfOn Error GoTo 0Sheets(1).SelectActiveSheet.Shapes(1).CopyThisWorkbook.ActivateTarget.Offset(, 1).SelectApplication.EnableEvents = FalseActiveSheet.Pictures.Paste.SelectWbk.Close FalseApplication.EnableEvents = TrueApplication.ScreenUpdating = TrueEnd SubPour les erreurs provoquées dans les autres macros, il faudrait que tupostes le code en indiquant la ligne en erreur avec le message exact.Daniel
-
02 Juli 2012 12:10
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 Submerci encore,
Phimony
-
02 Juli 2012 13:04
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
-
02 Juli 2012 13:48
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
-
02 Juli 2012 13:57
"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
-
02 Juli 2012 14:06
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
-
02 Juli 2012 14:18
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
-
31 Agustus 2012 7:48
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
-
31 Agustus 2012 9:13
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