Excel : Afficher une image et condition SI [Fermé]

Signaler
Messages postés
301
Date d'inscription
jeudi 19 juin 2008
Statut
Membre
Dernière intervention
13 février 2018
-
 cjard1 -
Bonjour,

J'ai une formule de type : SI(F40=1;"Oui";SI(F40=2;"Non";SI(F40=0;"";)))

et au lieu d'afficher Oui ou Non, j'aimerais afficher une image en différente en fonction de la valeur de F40.

Avez vous une idée de la syntaxe / formule à utiliser.

Merci par avance de votre réponse

3 réponses

Messages postés
907
Date d'inscription
mardi 19 août 2008
Statut
Contributeur
Dernière intervention
8 décembre 2009
235
Bonjour J_BA, Raymond

Cette formule doit le faire :
=Si(A1="OUI";Image("Monfichier.jpg";"MonChemin");image(""))

le 2eme critère est optionnel, si les images sont dans le même répertoire que le classeur

Mais avant : (je triche raymond, rassure toi, la fonction d'affichage d'image n'existe pas dans Excel)
tu vas dans le VBA : Click droit sur le nom de l'onglet / Visualiser le code
tu changes de fenêtre et tu arrives Sur VBA
Menu Insertion / Module
et tu fais un copier coller des lignes ci-dessous
Function Image(img_nom As Variant, Optional chemin As String = "") As String
    ' Declaration des variables
    Dim ref As Range, sh As Shape, drap As Boolean
    ' ref : la cellule qui provoque la fonction
    ' sh : les shapes
    ' Drap : drapeau definissant si la shape est trouvée
    Application.Volatile ' defini une fonction qui se recalcule automatiquement
' teste le type de variable soit une cellule soit une valeur alphanumerique
    Select Case TypeName(img_nom)
        Case "Range" ' c'est une reference cellule
            Image = img_nom.Value
        Case "String" ' c'est une valeur alphanumerique
            Image = img_nom
        Case Else ' c'est une erreur
            Image = "#ERROR"
            Exit Function
    End Select
' le chemin est un parametre optionnel, s'il est omis, la valeur est le chemin du classeur
    If chemin = "" Then chemin = ThisWorkbook.Path
' le chemin ne se termine pas forcemment par \ je le rajoute
    If Right(chemin, 1) <> "\" Then chemin = chemin & "\"
    Set ref = Application.Caller ' affectaction à ref de la cellule qui lance la fonction
    If ref.MergeCells = True Then Set ref = Range(ref.MergeArea.Address)
    drap = False ' initialisation du drapeau
    For Each sh In ref.Worksheet.Shapes ' je passe en revue toute les shapes
' je teste son nom construite plus bas pour savoir si c'est la bonne shappe
        If "Img-" & ref.Address = Left(sh.Name, Len(ref.Address) + 4) Then drap = True: Exit For
    Next
    If drap = True Then ' c'est la bonne shape
' je teste maintenant si c'est la meme que celle de la formule pour ne pas refaire le traitement
' Le gain de temps n'est pas negligeable
       If "Img-" & ref.Address & "-" & Image = sh.Name Then GoTo fin ' egalité parfaite, je sors
    End If
    On Error Resume Next ' controle d'erreur, si la shape n'existe pas encore, l'instruction suivante provoque une erreur
    sh.Delete ' je detruits la shap
    If Image = "" Then Exit Function ' la valeur est à "" alors pas de shape à affecter
' j'inserre la shape, avec l'image en lui mettant les tailles necessaires pour la cellule
    Set sh = ref.Worksheet.Shapes.AddPicture(chemin & Image, True, True, ref.Left, ref.Top, ref.Width, ref.Height)
    sh.Name = "Img-" & ref.Address & "-" & Image ' je definis son nom pour la trouver plus tard
fin:
    Image = "Img" & ref.Address ' j'affecte un nom pour resultat
End Function

La fonction adapte la taille de l'image à la taille de la cellule, si ce sont des cellules fusionnées, elle en tient compte

Cordialement
Wilfried

ps: n'oubliez pas de mettre votre fil sur résolu quand vous obtenez ce que vous cherchez. Merci
21
Merci

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez Comment Ça Marche

CCM 65492 internautes nous ont dit merci ce mois-ci

Alors là, chapeau l'artiste ! Merci beaucoup, c'est formidable le savoir de certains.
Bravo et merci encore.
Bonjour,
Super le tuyau, cela fonctionne bien à mon niveau, par contre, une fois que l'image est apparue elle ne s'enlève pas si la valeur de la cellule ne correspond plus, il y a t-il moyen de l'enlever si changement de valeur dans la cellule ?
Messages postés
53307
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
22 février 2021
15 325
Si tu nous précises quelle est la fonction Excel qui affiche une image, oui, ou peut t'aider.
Il y avait un petit bug dans la macro de wilfried_42 dans le cas ou on utilise la fonction sur plusieurs feuilles dans la même plage de cellule.

A la place de :
If ref.MergeCells = True Then Set ref = Range(ref.MergeArea.Address)

il faut écrire :

If ref.MergeCells = True Then Set ref = ref.Worksheet.Range(ref.MergeArea.Address)

J'ai un peu galéré pour trouver le bug ... il a fallu que je décortique la macro ...
Mais sinon elle fonctionne très bien.
Merci

Olliem