Bonjour à tous,
Après avoir recherché sur ce forum (et d'autres) je n'ai toujours pas trouvé de solution qui me convienne:
Je cherche à insérer une image en tant mise en forme conditionnelle, sans macro et sans liste déroulante, de sorte que quelle que soit la cellule où j'inscrit la valeur correspondante, l'image s'affiche dans ladite cellule.
Il s'agit d'un planning de travail (production) composé de plusieurs onglets selon le produit à fabriquer, et un onglet qui se rempli automatiquement en fonction du produit choisi (dont le déroulement est préalablement planifié dans l'onglet correspondant). Chaque tâche est définie par un abrégé qui lorsqu'il est entré dans une cellule, met en forme ladite cellule dans une couleur définie par mise en forme conditionnelle. Il s'agit dont de faire la même chose avec les images qui correspondent en l’occurrence à des actions spécifiques (prise d'échantillon par exemple) à des moments spécifiques.
Ce planning est destiné à être utilisé par ma responsable qui connaît très peu excel, j'aimerais éviter si possible de lui compliquer la vie plus que nécessaire...
Je prépare un fichier neutre à joindre ultérieurement pour aider à mieux cerner mon problème, mais pour l'heure le temps me manque.
D'avance merci à tous ceux qui sauront m'aider, ou du moins qui essaieront !
Bonjour job75, et merci pour cette réponse rapide, bien qu'elle ne réponde pas exactement à mon besoin.
Je reprécise : Il s'agit d'afficher une image (de petite taille) en fonction d'une valeur écrite dans la cellule ou doit s'afficher ladite image, de la même manière qu'une mise en forme conditionnelle.
Par exemple, lorsque j'inscrit "St" dans une cellule, où que ce soit dans le document, cette cellule devient orange, ainsi que toutes les cellules contenant la même valeur.
Mais lors de certaines étapes, il y a des actions ponctuelles à réaliser en cours de route, comme la prise d'un échantillon par exemple, représentée par un logo (en l’occurrence pour ce cas précis, l'image d'un tube à essais). ce que j'aimerais c'est trouver un moyen d'afficher ce tube à essais dans n'importe quelle cellule du document simplement en inscrivant une valeur dans la cellule correspondante.
Je ne sais pas si c'est possible de faire aussi simple, mais la manière dont fonctionne le fichier ne permet pas une méthode comme la vôtre.
Je reprécise : Il s'agit d'afficher une image (de petite taille) en fonction d'une valeur écrite dans la cellule ou doit s'afficher ladite image, de la même manière qu'une mise en forme conditionnelle.
peut etre que le demandeur devrait savoir qu'il est impossible de mettre un background autre q'une couleur ou un gradient dans une cellule
de ce fait l'image couvrirait la cellule et empêcherait donc de la sélectionner pour modification
il y a bien une astuce simple en terme de raisonnement , mais je m'interroge si ça vaut le coup
pour l'astuce relire les deux dernière lignes vous devriez trouver tout seul
Je ne vois guère d'astuce autre que d'utiliser le VBA avec cette solution très classique :
VB:
Private Sub WorkSheet_Change(ByVal Target As Range)
Dim txt$, s As Shape, fichier$, c As Range
txt = "tube" 'texte en minuscules à adapter
Set s = Sheets("Image").Shapes(1) 'à adapter
fichier = ThisWorkbook.Path & "\MonImage.gif"
Application.ScreenUpdating = False
Cells.ClearComments 'RAZ
If Application.CountIf(Cells, txt) = 0 Then Exit Sub
'---création du fichier image gif---
s.CopyPicture
With s.Parent.ChartObjects.Add(0, 0, s.Width, s.Height).Chart
.Parent.Activate 'force le focus sur l'objet
.Paste
.Export fichier, "GIF"
.Parent.Delete 'supprime le graphique temporaire
End With
'---création des commentaires contenant l'image---
For Each c In UsedRange
If LCase(CStr(c)) = txt Then
With c.AddComment("").Shape
.Width = s.Width
.Height = s.Height
.Fill.UserPicture fichier 'image en motif du commentaire
End With
End If
Next
Kill fichier 'supprime le fichier gif
Me.Activate
End Sub
Voyez le fichier joint, les commentaires créés contiennent l'image du tube en motif.
re
ou on peut faire un insert picture en lui affectant un click
et dans le click la rendre invisible et faire une select sur le topleftcell du shapes(application.caller)
ou meme pas forcement la rendre invisible mais la décaler
et le sheets change réattribue tout
une sorte de bascule shape/cell
Merci patricktoulon, cette réponse me confirme ce que je soupçonnais.
Reste à savoir si une autre solution peut être trouvée pour régler ce problème, sinon ma chef se contentera d'un planning sans ses petits logos !
Je vais continuer à chercher, après tout, ça contribue à me former...
tu tape roi ou fou ou tour en colonne "A"et tu a l'image sur la cellule
tu re clique sur l'image en colonne A ca te supprime l'image et vide la cellule ,il te reste plus qu'a retaper une autre des 2 autres images
tu tape roi ou fou ou tour en colonne "A"et tu a l'image sur la cellule
tu re clique sur l'image en colonne A ca te supprime l'image et vide la cellule ,il te reste plus qu'a retaper une autre des 2 autres images
C'est génial les macros, ce truc marche très bien, presque exactement comme je le voudrais.
Reste à savoir comment le reproduire, et l'adapter à mon fichier...
Il faudrait aussi que toute valeur autre que le nom d'une image soit ignorée par la macro.
Vu ce que je connais des macros (rien donc) je ne suis pas près d'y arriver... hélas.
Plus je parcoure ce forum, plus je constate que j'ai énormément de choses à apprendre, et c'est de plus en plus passionnant !
Private Sub WorkSheet_SelectionChange(ByVal Target As Range)
WorkSheet_Change Selection
End Sub
Private Sub WorkSheet_Change(ByVal Target As Range)
If Target.CountLarge > 1 Then Exit Sub
Dim fichier$, s As Shape
fichier = ThisWorkbook.Path & "\MonImage.gif"
For Each s In Sheets("Images").Shapes
If LCase(s.Name) = LCase(CStr(Target)) Then Exit For
Next
If s Is Nothing Then Unload UserForm1: Application.DisplayFullScreen = False: Exit Sub
Target.Select
Application.DisplayFullScreen = True 'mode Plein écran
Application.ScreenUpdating = False
'---création du fichier image gif---
s.CopyPicture
With s.Parent.ChartObjects.Add(0, 0, s.Width, s.Height).Chart
.Parent.Activate 'force le focus sur l'objet
.Paste
.Export fichier, "GIF"
.Parent.Delete 'supprime le graphique temporaire
End With
Me.Activate
'---remplissage et positionnement de l'UserForm---
With UserForm1
.Caption = s.Name
.PictureSizeMode = fmPictureSizeModeStretch
.Picture = LoadPicture(fichier)
Kill fichier 'suppression du fichier image
.StartUpPosition = 0 'Manual
.Top = Application.Top + 22 - 14 * ActiveWindow.DisplayHeadings + Target.Top
.Left = Application.Left - 20 * ActiveWindow.DisplayHeadings + Target(1, 2).Left
Application.ScreenUpdating = True
.Show 0 'non modal
End With
End Sub
tu tape roi ou fou ou tour en colonne "A"et tu a l'image sur la cellule
tu re clique sur l'image en colonne A ca te supprime l'image et vide la cellule ,il te reste plus qu'a retaper une autre des 2 autres images
Bonjour à tous, et merci pour votre acharnement.
A voir votre enthousiasme pour m'aider, je ne peux que continuer à chercher de mon côté, et bien que je n'y connaisse rien au VBA, je me renseigne, je lis des tutos, mais ça ne m'avance pas beaucoup.
Cela dit, j'ai au moins réussi à modifier le code du "bascule pict-cell" de manière à étendre son action à toute la feuille (il suffisait de supprimer la partie "Target.Column = 1").
Reste à comprendre comment faire en sorte que le code ignore toute autre expression ne faisant pas référence à une image. Des idées ?
(Fichier modifié ci-joint, original en feuille 1, modif en feuille 2)
Bonjour à tous, et merci pour votre acharnement.
A voir votre enthousiasme pour m'aider, je ne peux que continuer à chercher de mon côté, et bien que je n'y connaisse rien au VBA, je me renseigne, je lis des tutos, mais ça ne m'avance pas beaucoup.
Cela dit, j'ai au moins réussi à modifier le code du "bascule pict-cell" de manière à étendre son action à toute la feuille (il suffisait de supprimer la partie "Target.Column = 1").
Reste à comprendre comment faire en sorte que le code ignore toute autre expression ne faisant pas référence à une image. Des idées ?
ben a vrai dire je t'ai donné quelque chose d'assez abordable même pour un débutant
et visiblement tu n'a pas atteint ce niveau
il est alors pas sympa de ta part de sous entendre que personne s’intéresse a ton sujet sous prétexte que tu n'en comprends pas encore la mécanique
quand aux modifs que tu a fait elle prouve bien que tu n'a pas compris cette mécanique
dis moi un peu a quoi servirait la boucle de suppression dans l’événement change
sachant que quand il y a image il est pas possible de sélectionner et donc taper un texte qui déclencherait l’événement change
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
If Target <> "" Then
With ActiveSheet
For Each pict In .Pictures
If pict.TopLeftCell.Address = Target.Address Then
pict.Delete
End If
Next
d'autant plus que la demande secondaire qi est d'exclure ce qui ne serait pas un nom pour une image est le B à BA Du vba
donc mon conseil serait de t’attaquer a des choses plus simples disons les bases et progresser a ton rythme et ne pas culpabiliser les autres pour tes lacunes
ben a vrai dire je t'ai donné quelque chose d'assez abordable même pour un débutant
et visiblement tu n'a pas atteint ce niveau
il est alors pas sympa de ta part de sous entendre que personne s’intéresse a ton sujet sous prétexte que tu n'en comprends pas encore la mécanique
quand aux modifs que tu a fait elle prouve bien que tu n'a pas compris cette mécanique
dis moi un peu a quoi servirait la boucle de suppression dans l’événement change
sachant que quand il y a image il est pas possible de sélectionner et donc taper un texte qui déclencherait l’événement change
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
If Target <> "" Then
With ActiveSheet
For Each pict In .Pictures
If pict.TopLeftCell.Address = Target.Address Then
pict.Delete
End If
Next
donc mon conseil serait de t’attaquer a des choses plus simples disons les bases
Je ne sous entend pas que personne s'intéresse à mon sujet, bien au contraire, je suis surpris par l'engouement qu'il provoque ;-)
Je n'ai effectivement pas compris la mécanique de ce code, ni d'aucun autre d'ailleurs. Je n'ai pas la prétention de devenir un expert VBA en quelques heures ^^, en revanche, la suppression de ce bout de code permet de l'appliquer à toute la feuille, c'est un fait et c'est ce que je veux (même si je ne sais pas comment ça fonctionne)
Le fait de sélectionner l'image la supprime et vide la cellule, la libérant ainsi pour une nouvelle saisie. (Par ailleurs, on peut aussi accéder à ladite cellule par d'autres moyens sans la sélectionner, y entrer une nouvelle donnée, changeant ainsi l'image affichée...)
Si l’événement change n'est pas adapté à mon besoin, qu'est-ce qui l'est?
Il est certain que ce topic n'est pas le lieu pour un cour complet sur le VBA, et ça n'est effectivement pas ma demande, je cherche juste une solution qui fonctionne (et que je comprenne un peu) pour une problème unique.
Dans tous les cas merci mon cher patricktoulon, ton titre d'XLDNaute impliqué n'est pas usurpé !