Image changeante suivant valeur d'un champ [Résolu]

Signaler
Messages postés
45
Date d'inscription
jeudi 18 avril 2013
Statut
Membre
Dernière intervention
15 juillet 2020
-
Messages postés
487
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
20 novembre 2020
-
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

Messages postés
487
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
20 novembre 2020
31
Bonjour,

la discussion suivante https://forums.commentcamarche.net/forum/affich-36641663-changement-de-couleur-sur-oui-non ne peut pas te mettre sur la voie ?

A+
Messages postés
45
Date d'inscription
jeudi 18 avril 2013
Statut
Membre
Dernière intervention
15 juillet 2020

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é
Messages postés
487
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
20 novembre 2020
31
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+
Messages postés
45
Date d'inscription
jeudi 18 avril 2013
Statut
Membre
Dernière intervention
15 juillet 2020

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)

Messages postés
487
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
20 novembre 2020
31
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+
Messages postés
45
Date d'inscription
jeudi 18 avril 2013
Statut
Membre
Dernière intervention
15 juillet 2020

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 !!!
Messages postés
487
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
20 novembre 2020
31
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+
Messages postés
13252
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 novembre 2020
743
si on pouvait obtenir une icone via une requête, ce serait simple.
Messages postés
13252
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 novembre 2020
743
bonjour, peux-tu partager ton fichier?
Messages postés
45
Date d'inscription
jeudi 18 avril 2013
Statut
Membre
Dernière intervention
15 juillet 2020

Bonjour,

Voici la bd qui me sert à faire mon essai:
https://www.cjoint.com/c/JFEknBMxb5c

Merci bien
Messages postés
487
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
20 novembre 2020
31
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+
Messages postés
487
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
20 novembre 2020
31
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
Messages postés
13252
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 novembre 2020
743
pourquoi passer par du VBA qui modifie une table au lieu d'utiliser comme source du formulaire une requête qui retourne nomfichier?
Messages postés
487
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
20 novembre 2020
31
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.
Messages postés
13252
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 novembre 2020
743
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.
Messages postés
487
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
20 novembre 2020
31
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+
Messages postés
487
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
20 novembre 2020
31
Voici comme suggéré avec une requête et la fonction.

C'est nettement + rapide.
https://www.cjoint.com/c/JFEpUsDA01U

A+
Messages postés
45
Date d'inscription
jeudi 18 avril 2013
Statut
Membre
Dernière intervention
15 juillet 2020

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.
Messages postés
487
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
20 novembre 2020
31
Ya plus qu'à mettre "résolu".

A+