Image changeante suivant valeur d'un champ

Résolu
Bonjour,

Comme indiqué dans le titre, je souhaite agir sur une image en fonction du contenu d'un champ.
En détail:
j'ai un champ numérique (monétaire) et je voudrais afficher à coté une flèche verte pointant vers le haut (image1) quand le contenu est positif et la cacher quand il est négatif.
Bien sur, même chose avec la flèche rouge pointant vers le bas (image2) visible quand le champ numérique est négatif et cachée quand ce n'est pas le cas.

Les deux images seront superposées

En poussant un peu plus loin, même si cela devrait être très rare, les 2 flèches cachées quand le résultat est à 0 ou vide.

Ah oui, un détail important, cela dans un formulaire continu (tabulaire)

J'arrive dans un formulaire unique à cacher ou rendre visible une image en fonction du résultat d'un champ, mais dans un formulaire continu, il affiche à toutes les ligne la même chose suivant le champ sélectionné.
Si je clique sur un champ négatif une flèche rouge s'affiche partout même sur les valeurs positives et inversement.

En vous remerciant par avance

15 réponses

  1. Bonjour,

    Non, ce n'est pas la même chose.
    D’ailleurs, le lien que tu m'a envoyé était déjà une de mes questions et l'aide obtenue fonctionne à merveille grace à la "Mise en forme conditionnelle"

    Ici, il ne s'agit pas d'un champ qui change de couleur, mais bien d'une image qui doit disparaître ou pas suivant le résultat d'un champ

    J'ai aussi essayé dans les "Expressions" de "Mise en forme conditionnelle", mais je n'y arrive pas

    J'ai aussi essayé ceci:
    Private Sub Form_Current()
    If [texte] < 0 Then
    [flecheverte].Visible = False
    [flecherouge].Visible = True
    Else
    [flecherouge].Visible = False
    [flecheverte].Visible = True
    End If
    End Sub

    Private Sub texte_Click()
    If [texte] < 0 Then
    [flecheverte].Visible = False
    [flecherouge].Visible = True
    Else
    [flecherouge].Visible = False
    [flecheverte].Visible = True
    End If
    End Sub


    Mais comme je le dit plus haut, même couleur de flèche à chaque ligne


    La flèche change si je clique dans les cellules , mais il n'est pas prévu que le champ sur lequel cela doit s'appliquer soit modifié manuellement, il s'agit d'un total, et le champ est désactivé et verrouillé
    0
    1. J'ai vu que c'était toi...

      Désolé, je pensais que la mise en forme conditionnelle permettait d'afficher ou pas une zone de texte que tu aurais pu mettre au dessus des images (effectivement, elles ne seraient pas superposées).

      Je suis comme toi, devant un os...

      J'essaie de réfléchir à une manière de détourner cela et si l'éclair arrive, je reviens te dire.

      A+
      0
      1. Oui, j'ai bien du mal avec ça et pourtant je pense que se doit être un détail, mais je ne trouve rien à ce sujet.
        Voici ci dessous ce que j’obtiens et ce qu'il me faudrait :

        (Le résultat souhaité doit être obtenu sans sélection de champ, uniquement à l'ouverture du formulaire)

        0
        1. Ce n'est malheureusement pas un détail, tu as là les limites d'access...

          On ne peut pas mettre en forme un controle avec la mise en forme conditionnelle, et le code vba ne concerne que l'enregistrement actif.

          Je sèche.

          A+
          0
          1. Oui, de mon coté je ne trouve rien non plus !!!!!!
            Pourtant il doit surement y avoir une solution, ce n'est pas possible que que soit si facile sur Excel et impossible sur Access

            Bon, je continu mes recherches !!!
            0
            1. Re,
              en m'endormant je pense à un truc, à peaufiner :
              j'imagine que ton form continu est basé sur une requête (requête1).
              L'idée (pas testé et je ne pense pas pouvoir tester demain, enfin j'essaierai de trouver le temps) :

              1/ Stocker dans le répertoire de ta base les 3 icones (flèche verte et rouge et une blanche) une bonne fois pour toute

              2/ Créer un recordset la requête1 au chargement de ton formulaire, et mettre à jour via DAO une autre requete (requete2) qui contiendra les champs de la requête1 + un champ pour l'icone suivant ton champ calculé.
              De cette manière, ta requête2 ainsi générée devrait avoir les lignes de ta requête1 avec en plus l'icone kivabien.
              Tu recharges ensuite ton form sur requete2.

              C'est à tester, je n'ai jamais mis en oeuvre pour ce type de problématique.

              Et si cela fonctionne, si tu peux mettre à jour certains champs qui auraient une influence sur le champs calculé, il faudra faire cette opération à chaque changement, et ça peut vite ralentir ton affichage, je pense.
              Allez, je me rendors

              A+
              0
              1. Contributeur Ambassadeur
                si on pouvait obtenir une icone via une requête, ce serait simple.
                0
            2. Contributeur Ambassadeur
              bonjour, peux-tu partager ton fichier?
              0
              1. Voici ce que j'ai pu faire :
                https://www.cjoint.com/c/JFEn0wBu7hU

                Il y a les 2 fichiers .png à mettre dans le même répertoire que la base (sinon modifies le code vba).
                Le principe est celui auquel j'ai pensé hier soir : parcourir la table en vba et mettre à jour un champ qui contient le chemin et nom de l'image.

                C'est crado, mais il faut bien contourner...

                A+
                0
                1. J'ai revérifié, ma gestion du null est NOK

                  Modifies donc comme suit en mettant bien entendu une image "nul.png" dans le dossier courant :

                  With rsTable

                  .MoveFirst

                  Do While Not .EOF

                  .Edit

                  If IsNull(.Fields("texte1")) Then 'le champ est vide

                  .Fields("nomimage") = "nulle"
                  .Fields("nomfichier") = CurrentProject.Path & "\nul.png"

                  ElseIf .Fields("Texte1") >= 0 Then

                  .Fields("nomimage") = "vert"
                  .Fields("nomfichier") = CurrentProject.Path & "\vert.png"

                  Else
                  .Fields("nomimage") = "rouge"
                  .Fields("nomfichier") = CurrentProject.Path & "\rouge.png"

                  End If

                  .Update

                  .MoveNext

                  Loop
                  End With
                  0
                  1. Contributeur Ambassadeur
                    pourquoi passer par du VBA qui modifie une table au lieu d'utiliser comme source du formulaire une requête qui retourne nomfichier?
                    0
                2. Car l'image peut changer selon les lignes de la requête (là j'ai utilisé la table pour son exemple)...
                  On ne peut pas savoir *avant* quelle image va correspondre.
                  0
                  1. Contributeur Ambassadeur
                    deux façons de faire via une requête:
                    select *, iif(text1>0 ; "imagea"; "imageb") as nomfichier from latable

                    ou bien
                    select *, nomdufichier(text1) as nomfichier from latable
                    , nomdelimage étant une fonction VBA qui retourne le nom en fonction de la valeur de text1

                    cela devrait aussi mieux se passer via une requête quand les valeurs changent.
                    0
                3. Yes,

                  mais du coup obligé de passer par une fonction.

                  Mais effectivement, ça sera moins lourdingue, je suis juste reparti de mon idée nocture d'hier, sans prendre le temps de ré-approfondir.

                  A+
                  0
                  1. Bonsoir RV71 et Yg_be,

                    Encore merci pour vos recherches !!!!!

                    Je viens de tester les deux versions.
                    C'est vrai que la première fonctionne bien même si elle est très lourde.
                    La seconde version fonctionne à merveille, avec l'avantage de s'actualiser immédiatement.

                    C'est génial !!!!

                    Je vous remercie une nouvelle foi pour votre démarche.

                    Maintenant, je vais décortiquer cela pour bien comprendre son fonctionnement.
                    0
                    1. Ya plus qu'à mettre "résolu".

                      A+
                      0