Image changeante suivant valeur d'un champ

Résolu/Fermé
Ollam Messages postés 77 Date d'inscription jeudi 18 avril 2013 Statut Membre Dernière intervention 15 août 2022 - 29 juin 2020 à 12:22
RV71 Messages postés 610 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 27 novembre 2024 - 1 juil. 2020 à 07:26
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
A voir également:

15 réponses

RV71 Messages postés 610 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 27 novembre 2024 31
29 juin 2020 à 15:21
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+
0
Ollam Messages postés 77 Date d'inscription jeudi 18 avril 2013 Statut Membre Dernière intervention 15 août 2022
Modifié le 29 juin 2020 à 16:57
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
RV71 Messages postés 610 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 27 novembre 2024 31
29 juin 2020 à 16:50
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
Ollam Messages postés 77 Date d'inscription jeudi 18 avril 2013 Statut Membre Dernière intervention 15 août 2022
Modifié le 29 juin 2020 à 17:45
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
RV71 Messages postés 610 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 27 novembre 2024 31
29 juin 2020 à 18:33
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
Ollam Messages postés 77 Date d'inscription jeudi 18 avril 2013 Statut Membre Dernière intervention 15 août 2022
29 juin 2020 à 22:16
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
RV71 Messages postés 610 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 27 novembre 2024 31
Modifié le 29 juin 2020 à 23:35
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
yg_be Messages postés 23392 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 décembre 2024 1 556
30 juin 2020 à 14:49
si on pouvait obtenir une icone via une requête, ce serait simple.
0
yg_be Messages postés 23392 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 décembre 2024 Ambassadeur 1 556
30 juin 2020 à 11:13
bonjour, peux-tu partager ton fichier?
0
Ollam Messages postés 77 Date d'inscription jeudi 18 avril 2013 Statut Membre Dernière intervention 15 août 2022
30 juin 2020 à 12:14
Bonjour,

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

Merci bien
0
RV71 Messages postés 610 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 27 novembre 2024 31
30 juin 2020 à 15:55
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
RV71 Messages postés 610 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 27 novembre 2024 31
30 juin 2020 à 16:19
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
yg_be Messages postés 23392 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 décembre 2024 1 556
30 juin 2020 à 16:38
pourquoi passer par du VBA qui modifie une table au lieu d'utiliser comme source du formulaire une requête qui retourne nomfichier?
0
RV71 Messages postés 610 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 27 novembre 2024 31
30 juin 2020 à 16:43
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
yg_be Messages postés 23392 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 décembre 2024 1 556
30 juin 2020 à 17:03
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
RV71 Messages postés 610 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 27 novembre 2024 31
30 juin 2020 à 17:08
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
RV71 Messages postés 610 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 27 novembre 2024 31
Modifié le 30 juin 2020 à 17:46
Voici comme suggéré avec une requête et la fonction.

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

A+
0
Ollam Messages postés 77 Date d'inscription jeudi 18 avril 2013 Statut Membre Dernière intervention 15 août 2022
30 juin 2020 à 22:26
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
RV71 Messages postés 610 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 27 novembre 2024 31
1 juil. 2020 à 07:26
Ya plus qu'à mettre "résolu".

A+
0