Syntaxe nom de champ

Résolu/Fermé
Cabinfi Messages postés 14 Date d'inscription vendredi 25 mai 2018 Statut Membre Dernière intervention 22 janvier 2023 - 4 oct. 2022 à 18:42
Cabinfi Messages postés 14 Date d'inscription vendredi 25 mai 2018 Statut Membre Dernière intervention 22 janvier 2023 - 5 oct. 2022 à 16:18

Bonjour, j'ai une liste de champs nommés A,B,C etc et une autre nommés TA,TB, etc. je voudrais masquer les champs T & X selon la valeur du champ X. J'ai essayé le code suivant:.

If A>0 Then
 T & A.visible= False 
End If

j'ai essayé  "T" & A, '"T" & A'.... entre autre, à priori, je n'ai pas trouvé la bonne syntaxe. Un coup de main serait le bienvenu. Merci


Windows / Firefox 105.0

9 réponses

yg_be Messages postés 23329 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 novembre 2024 Ambassadeur 1 551
5 oct. 2022 à 08:19

bonjour,

ce sont des champs d'une table ou des contrôles d'un formulaire?

0
Cabinfi Messages postés 14 Date d'inscription vendredi 25 mai 2018 Statut Membre Dernière intervention 22 janvier 2023
Modifié le 5 oct. 2022 à 08:52

Bonjour yg_be,

ce sont des champs de formulaire, plus précisément les champ A,B, etc sont des champs d'une table, et les champs TA, TB ... sont des champs caculés de formulaire  Tous les noms sont donnés de la même façon: à A correspont TA, à B, correspont TB et ainsi de suite. Le but final étant de créer une fonction du genre

function montrer(nom_de_champ as double)
 If nom_de_champ >0 Then
  (T & nom_de_champ).Visible= True
End If

Que j'appellerai en quittant les champs A,B ou C

sub quitter ()
montrer(A)
end sub
0
yg_be Messages postés 23329 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 novembre 2024 1 551
5 oct. 2022 à 10:09

peut-être, en supposant que la fonction soit appelée dans le contexte du formulaire (pas testé):

sub montrer(nom_de_champ as string)
 If me.controls(nom_de_champ) >0 Then
  me.controls("T" + nom_de_champ).Visible= True
End If
end sub
0
Cabinfi Messages postés 14 Date d'inscription vendredi 25 mai 2018 Statut Membre Dernière intervention 22 janvier 2023
5 oct. 2022 à 10:36

Le problème est dans la syntaxe appelant le champ

"T" + nom_de_champ j'ai testé 
Function Diff(prod)
On Error Resume Next

 If prod > 0 Then
  "T" + nom_de_champ.visible = True
End If
    
End Function

qui me répond, sans grande surprise, "erreur de syntaxe".

 Je précise que je ne suis abslument pas programmeur, mais un simple autodidacte occupant une partie de son temps libre de retraité ;)

0
yg_be Messages postés 23329 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 novembre 2024 1 551
5 oct. 2022 à 11:04

Programmeur ou pas, il est utile de communiquer de façon organisée.

D'où sort tout à coup cette fonction diff(), sans lien ni avec ce que tu expliques au départ, ni avec le code que j'ai suggéré.

As-tu testé ma suggestion?

0
Cabinfi Messages postés 14 Date d'inscription vendredi 25 mai 2018 Statut Membre Dernière intervention 22 janvier 2023
5 oct. 2022 à 11:45

DSl, c'est le nom de la fonction que j'avais en test dans ma BD  . Mais il n'y a que le nom qui change. Bien sûr,  j'ai testé ton code : avec Me, il me dit utilisation incorrecte du mot clé Me. Si j'enlève Me. le msg devient "Sub ou Fonction non, définie" en me surlignant "Controls"

0
yg_be Messages postés 23329 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 novembre 2024 1 551
5 oct. 2022 à 12:01

Où la fonction montrer() est-elle déclarée?  Est-ce dans le module du formulaire?

0

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

Posez votre question
Cabinfi Messages postés 14 Date d'inscription vendredi 25 mai 2018 Statut Membre Dernière intervention 22 janvier 2023
Modifié le 5 oct. 2022 à 12:26

En effet, je ne l'avais pas mises dans le formulaire. Maintenant le msg est Microsoft Access ne trouve pas le champ 5 auquel il est fait référence dans votre expression et me surligne Me.Controls(Prod)

Function Montrer(prod As String)

If Me.Controls(prod) > 0 Then
  Me.Controls("T" + prod).visible = True
End If
    
End Function


Private Sub N_Exit(Cancel As Integer)
Montrer (N)
End Sub


0
yg_be Messages postés 23329 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 novembre 2024 1 551
Modifié le 5 oct. 2022 à 12:55

Il est utile de préciser la ligne de code qui cause le message d'erreur.

En haut de chaque module, peux-tu t'assurer d'avoir une ligne avec "option explicit"?

Que contient la variable "N"?

0
Cabinfi Messages postés 14 Date d'inscription vendredi 25 mai 2018 Statut Membre Dernière intervention 22 janvier 2023
5 oct. 2022 à 13:39

OK pour Option Explicit, c'est fait, ainsi que le msg d'erreur. N contient une valeur numérique au format standard, le champ TN calculé est un nombre décimal au format standard également

0
Cabinfi Messages postés 14 Date d'inscription vendredi 25 mai 2018 Statut Membre Dernière intervention 22 janvier 2023
Modifié le 5 oct. 2022 à 13:52

Avec ce code, ce que je veux faire fonctionne trés bien (les champs de style T+NomDuChamp sont par défault non visibles:

Private Sub P2O5_Exit(Cancel As Integer)

If Me.P2O5 > 0 Then
    Me.TP2O5.visible = True
Else
    Me.TP2O5.visible = False
End If

End Sub

Il y a 15 champs "A" concernés, la fonction devant permettre d'éviter quelques lignes de code. Mais peut-être que je me complique la vie pour rien ;)

0
yg_be Messages postés 23329 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 novembre 2024 1 551
5 oct. 2022 à 13:58

Je ne comprends pas le rôle de la variable N.  Elle vient d'où?

sans doute:

Private Sub P2O5_Exit(Cancel As Integer)
Montrer("P205")
End Sub
0
yg_be Messages postés 23329 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 novembre 2024 1 551 > yg_be Messages postés 23329 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 novembre 2024
5 oct. 2022 à 14:01

ou bien, peut-être:

Private Sub N_Exit(Cancel As Integer)
Montrer (N.Name)
End Sub
1
Cabinfi Messages postés 14 Date d'inscription vendredi 25 mai 2018 Statut Membre Dernière intervention 22 janvier 2023
Modifié le 5 oct. 2022 à 14:44

N est le nom d'un des 15 champs dont la valeur doit conditionner la propriété visible de leur correspondant de forme T & NomDeCHamp: exemple : si N est > à 0 alors Tn doit être visible,idem pour  P2O5 et TP2O5 etrc. J'espère que je suis assez clair . En fait, TN calcul et verifie le dosage de matière déclaré dans N, TP2O5 calcul et vérifie le dosage de P2O5 et ainsi de suite

Il me faut m'absenter, je reprendrais plus tard dans l'après-midi. Merci pour ta patience et le temps donné

0
yg_be Messages postés 23329 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 novembre 2024 1 551
5 oct. 2022 à 14:49

En fait, N fait référence au contrôle du formulaire, ce que tu appelles "champ".

Dans le code, quand on utilises N, c'est équivalent à N.Value, cela retourne la valeur dans le contrôle.

Tu veux récupérer le nom du contrôle, afin de pouvoir y ajouter "T" devant.  Il faut donc faire soit "N", soit N.Name.

1
Cabinfi Messages postés 14 Date d'inscription vendredi 25 mai 2018 Statut Membre Dernière intervention 22 janvier 2023
5 oct. 2022 à 16:18

Ça y est, grace à tes dernières remarques, j'ai trouvé qqchose qui fonctionne:

Option Compare Database
Option Explicit
Dim prod As String
_______________________________________________
Function Montrer(prod As String) As String
On Error Resume Next
If Me.Controls(prod) > 0 Then
    Me.Controls("T" + prod).visible = True
    Me.Controls("DifT" + prod).visible = True
Else
    Me.Controls("T" + prod).visible = False
    Me.Controls("DifT" + prod).visible = False
End If
End Function
_____________________________________________
Private Sub N_Exit(Cancel As Integer)
prod = Me.N.name
Montrer (prod)
End Sub

Merci encore pour le temps que tu m'as consacré.

je passe en résolu

0