Image selon valeur dans colonne

Bonjour,

J'ai en C49:C60 des valeurs (Numéro et texte) qui s'inscrive automatiquement selon un formulaire.... (formule et autre champs enlever afin d'alléger l'exemple.

Je souhaite que les images associés (petit carré rouge dans l'exemple, ou n'importe quoi d'autre) s'affiche sur le graphique à la droite du texte (voir fichier exemple).

Donc chaque ligne ( C49:C60 , dont le texte viens d'une plage ) doit avoir une image, forme, ou autre qui lui est associé. et lorsque le texte s'affiche dans une des lignes de la colonnes 'C49:C60' l'image, forme ou autre s'affiche à sa place sur le graphique (exemple un carré rouge à la gauche du clavier s'affiche lorsque le code "25 - Tablette gauche - mini égratignure" se retrouve dans la colonne C49:C60.

Fichier joint

13testimage.xlsm (110.41 Ko)

Votre aide, comme toujours sera grandement apprécié

Bonjour,

Avec un Select Case sur l'événement Change() de la feuille, tu quadrilles ta zone avec les cellules aux dimensions de tes images, mettons 20 pour les lignes et 3 pour les colonnes et tes images en 20 x 20 et en fonction du texte entré, tu positionnes sur la cellule correspondante (c'est à toi de faire correspondre) :

Private Sub Worksheet_Change(ByVal Target As Range)

    If Intersect(Target, Range("C49:C60")) Is Nothing Then Exit Sub

    Select Case Target.Value

        Case "11 - Dessus arrière centre - mini égratignure"
            ActiveSheet.Shapes("ZoneTexte 10").Top = Range("J56").Top
            ActiveSheet.Shapes("ZoneTexte 10").Left = Range("J56").Left

        Case "12 - Dessus arrière droit - égratignure"
            ActiveSheet.Shapes("ZoneTexte 11").Top = Range("M45").Top
            ActiveSheet.Shapes("ZoneTexte 11").Left = Range("M45").Left

        Case ...

        Case ...

    End Select

End Sub

Bonjour Theze,

Merci de prendre le temps de m'aider

Ton idée devrait fonctionner, mais, demande trop de modification, car beaucoup de chose font faite sur ce graphique et sur d'autre feuille, par-contre, je crois qu'une petite modification ferait le travail.

Si je met des carrés rouges la ou les codes font allusion, et que je les nommes (chaque carré) au nom du code "ex. DOM_P_27"

(ex. . On peut les faire apparaître si le numéro de code se retrouve dans la colonne C49:C60

Ça pourrait-il ressembler à quelque chose du genre...

(Valeur d'une des cellules "27 - Table d'harmonie arrière - poussière") (ici la suite du message " - poussière" vient d'une formule et peut changer selon les cas, pour cette raison je tenterais de l'écrire comme ci-dessous

(Carré rouge nommé ici "DOM_P_27")

Case "27 - Table d'harmonie arrière" & "*"

ActiveSheet.Shapes("DOM_P_27").Show

Tu crois que ça pourrait fonctionner ?

Voici ou j'en suis dans mes tentatives et recherche...

J'ai une feuille "LISTEDOMMAGE" avec des colonnes contenant des codes de dommage suivit d'une colonne ayant des Formes (carré rouge avec numéro du code) et chaque Forme est Nommé (ex. DOM_P_27 pour le code 27)

Dans ma feuille "FORMULAIRE" sur mon "Image de piano" je souhaite faire apparaître au bon emplacement les Formes (carré rouge DOM_P_27)

Par un show ou hide

Lorsque Code apparaît dans la colonnes C49:C60 , la Forme correspondante s'affiche à son emplacement sur l'image du piano

Ou si je n'aurai vraiment pas le choix de modifier mon formulaire pour que mon Image de piano se retrouve au dessus de cellule genre 30 mini colonne et 60 rangé.... j'aimerais tellement le faire autrement !

Bonjour,

Tu peux positionner toutes tes images à leur place respective et les cacher si le texte les concernant n'apparaît pas dans la cellule.

La fonction Split() extrait le numéro du code du dommage comme par exemple le nombre 27 de la chaine "27 - Table d'harmonie arrière - poussière" il suffit alors que le nom de l'image comporte le numéro du dommage à la fin avec comme préfixe commun à toutes les images "DOM_P_" :

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim S As Shape
    Dim Cel As Range

    'sort si pas dans la plage
    If Intersect(Target, Range("C49:C60")) Is Nothing Then Exit Sub

    Application.ScreenUpdating = False

    'cache d'abords toutes les images...
    For Each S In ActiveSheet.Shapes
        If S.Name <> "Image 9" Then S.Visible = msoFalse
    Next S

    '...puis affiche les images concernées
    For Each Cel In Range("C49:C60")
        If Cel.Value <> "" Then ActiveSheet.Shapes("DOM_P_" & Split(Cel.Value, " ")(0)).Visible = True
    Next Cel

    Application.ScreenUpdating = True

End Sub

Bon matin Theze,

Merci pour le temps que tu consacres à mon problème.

Voici ce que j'ai tenté de faire insérer ton code dans le code déjà existant.

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$H$7" Then

If IsEmpty(Target) Then Exit Sub

Application.EnableEvents = False

Target.Value = Split(Target.Value)(0)

Application.EnableEvents = True

End If

Dim S As Shape

Dim Cel As Range

'sort si pas dans la plage

If Intersect(Target, Range("C49:C60")) Is Nothing Then Exit Sub

Application.ScreenUpdating = False

'cache d'abords toutes les images...

For Each S In ActiveSheet.Shapes

If S.Name <> "Image 17" Then S.Visible = msoFalse

Next S

'...puis affiche les images concernées

For Each Cel In Range("C49:C60")

If Cel.Value <> "" Then ActiveSheet.Shapes("DOM_P_" & Split(Cel.Value, " ")(0)).Visible = True

Next Cel

Application.ScreenUpdating = True

End Sub

Mais lorsque je change d'article et que je sélectionne un article n'ayant pas, dans cet exemple un code DOM_P_30... la forme reste affiché (carré rouge)

Je tiens à préciser que le texte "30 - Table d'harmonie arrière - poussière" provient d'une formule, je ne sais pas si ça peut avoir une incidence sur le résultat....

Bonjour,

Il te faut faire coïncider les suffixes avec les numéros de code de dommage afin que les zones de texte correspondantes soient affichées ou cachées :

13testimage-v2.xlsm (98.27 Ko)

Bonjour Theze,

merci pour ton aide encore une fois,

Ton code fonctionne à merveille, mais des que je copie au complet dans ma feuille, ça ne fonctionne plus...

Ça ne masque pas les formes en ouvrant la feuille, je dois vérifié si j'aurais pas une variable qui causerait le problème, j'ai testé de plusieurs façon, mais dès que je le fais sur mon 'vrai' classeur, ça ne fonctionne plus

je dois inspecter le code de chacune des page voir quelque chose causerait un conflis

Bon , après des tonnes de test, je crois avoir trouvé le problème...

Le contenu des cellules C49:C60 sont des résultats de formules et non du texte...

Copie de la formule =SIERREUR(INDEX(DOMMAGELISTE;PETITE.VALEUR(SI(DOMMAGE!$A$2:$A$20001=$H$7;LIGNE(DOMMAGE!$A$2:$A$20001);"");LIGNE(4:4)));"")

Lorsque je remplace la formule par exemple 10, j'obtiens le résultat souhaité....

Donc ma nouvelle question, comment modifier le VBA pour qu'il utilise la valeur de la cellule, et non (je crois) la formule ou autre chose qu'il voit !

Bonjour,

Dans ce cas, soit utiliser la procédure événementielle "Calculate()" de la feuille :

Private Sub Worksheet_Calculate()

    Dim S As Shape
    Dim Cel As Range

    Application.ScreenUpdating = False

    'cache d'abords toutes les images...
    For Each S In ActiveSheet.Shapes
        If S.Name <> "ImgPiano" Then S.Visible = msoFalse
    Next S

    '...puis affiche les images concernées
    For Each Cel In Range("C49:C60")
        If Cel.Value <> "" Then ActiveSheet.Shapes("DOM_P_" & Split(Cel.Value, " ")(0)).Visible = True
    Next Cel

    Application.ScreenUpdating = True

End Sub

soit viser les cellules où se fait la modif pour que les formules soient calculées

GÉNIAL

Ça fonctionne super bien

UN MÉGA MERCI

merci pour ton aide

merci pour ton temps

c'est très apprécié !

MERCI THEZE

Content de t'avoir aidé

Peut etre une mini question ,

lorsque les 'shape' sont effacé, le logo de la compagnie disparait aussi...

de quelle manière on pourrait effacer uniquement les forme se nommant DOM_P_* ?

Comme pour l'image du piano, il te suffit de l'éviter, remplace "Nom de ton Logo" par le nom de ton logo :

For Each S In ActiveSheet.Shapes
    If S.Name <> "ImgPiano" And S.Name <> "Nom de ton Logo" Then S.Visible = msoFalse
Next S

encore une fois MERCI !

Rechercher des sujets similaires à "image valeur colonne"