PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Procédure globale avec nom de table et colonne en parametre
Procédure globale avec nom de table et colonne en parametre
Débuté par Cyril_DSH, 04 juin 2025 16:39 - 6 réponses
Membre enregistré
7 messages
Posté le 04 juin 2025 - 16:39
Bonjour dans un projet j'ai ce petit bout de code pour changer la couleur d'une cellule d'une table tout dépend la combo de la colonne à côté.

Mon problème est que je n'arrive pas à envoyer le nom de la table et le nom des colonnes dans la procédure.

SI Table_Programmation.KitIEM..ValeurAffichée = "Production" ALORS
Table_Programmation.NbreIEMPocketHF[IndiceEnCours()]..CouleurFond = JauneOr
Table_Programmation.NbreIEMPocketHF[IndiceEnCours()]..Couleur = RougeFoncé
SINON SI Table_Programmation.KitIEM..ValeurAffichée = "Festival" ALORS
Table_Programmation.NbreIEMPocketHF[IndiceEnCours()].CouleurFond = Blanc
Table_Programmation.NbreIEMPocketHF[IndiceEnCours()]..Couleur = Noir
FIN

Celle-ci fonctionne très bien. J'aimerai en faire une procédure globale pour l'utiliser avec d'autres tables d'autres colonnes.
J'ai renseigné ceci à la place de mon petit bout de code ci dessus
PG_PRODUCTION_Couleurs(Table_Programmation,KitIEM,NbreIEMPocketHF)

Et dans la déclaration des procédures cela:
Procedure PG_PRODUCTION_Couleurs(Ta est une chaîne ANSI, CoTrig est une chaîne ANSI, CoCha est une chaîne ANSI) // Ta nom de table, CoTrig Colonne Trigger, CoCha Colonne à changer
SI Ta[CoTrig]..Valeur = "Production" ALORS
Ta[CoCha][IndiceEnCours()]..CouleurFond = JauneOr
Ta[CoCha][IndiceEnCours()]..Couleur = RougeFoncé
Ta[CoCha][IndiceEnCours()]..CouleurFond = Blanc
Ta[CoCha][IndiceEnCours()]..Couleur = Noir
SINON SI Ta[CoTrig].Valeur = "Festival" ALORS
Ta[CoCha][IndiceEnCours()]..CouleurFond = JauneOr
FIN


Je n'ai pas d'erreur mais cela ne fonctionne pas .
J'ai bien entendu essayé sans les "" pour les déclaration de variables dela table et colonne mais cela ne fonctionnait pas mieux.

Des idées svp ?

Merci pour votre lecture.
Membre enregistré
20 messages
Posté le 04 juin 2025 - 18:06
Bonjour,
Je n'ai pas testé mais j'aurais plus vu un code comme ci-dessous :
Procedure PG_PRODUCTION_Couleurs(CoTrig est un champ, CoCha est un champ, nIndiceEnCours est un entier)
SI CoTrig..ValeurAffichée = "Production" ALORS
CoCha[nIndiceEnCours]..CouleurFond = JauneOr
CoCha[nIndiceEnCours]..Couleur = RougeFoncé
SINON SI CoTrig..ValeurAffichée = "Festival" ALORS
CoCha[nIndiceEnCours].CouleurFond = Blanc
CoCha[nIndiceEnCours]..Couleur = Noir
FIN

Avec l'appel :
PG_PRODUCTION_Couleurs(Table_Programmation.KitIEM, Table_Programmation.NbreIEMPocketHF, IndiceEnCours())

NN12
Membre enregistré
950 messages
Posté le 04 juin 2025 - 18:54
Bonjour
ça fonctionne pour moi en passant les noms de table, champ, colonne à une indirection

appel de la procédure :

ChangeCouleur("Fen_32_Table_Selecteur.Table_utilisateurs.Nom")


dans la procédure :

Procedure ChangeCouleur(MaVariable est une chaîne)

{MaVariable, indChamp}[1]..CouleurFond = Jaune
{MaVariable, indChamp}[1]..Couleur = Bleu


Cdlt
Membre enregistré
950 messages
Posté le 04 juin 2025 - 21:44
Le code de la procédure au post #3 ne fonctionnera pas car les constantes de couleurs ne sont pas correctes :

Procedure ChangeCouleur(MaVariable est une chaîne)

{MaVariable, indChamp}[1]..CouleurFond = JauneOr
{MaVariable, indChamp}[1]..Couleur = RougeFoncé




Autre méthode ,
j'en profite pour vous montrer le code avec l'indice dans l'appel de la procédure :

ChangeCouleur("Fen_32_Table_Selecteur.Table_utilisateurs.Nom[" + Table_utilisateurs + "]")


Code de la procédure :

Procedure ChangeCouleur(MaVariable est une chaîne)

{MaVariable, indChamp}..CouleurFond = JauneOr
{MaVariable, indChamp}..Couleur = RougeFoncé


Cdlt
Membre enregistré
7 messages
Posté le 05 juin 2025 - 09:18
Merci Cedric et NN12 pour vos réponses.
@NN12 j'ai suivi ton conseil non testé qui fonctionne bravo et j'ai donc écrit ceci.
L'appel de la procédure
PG_PRODUCTION_Couleurs(Table_Programmation.KitIEM,Table_Programmation.NbreIEMPocketHF)


La procédure
Procedure PG_PRODUCTION_Couleurs( CoTrig est un Champ, CoCha est un Champ ) // CoTrig Table.Colonne Trigger, CoCha Table.Colonne à changer
SI CoTrig..ValeurAffichée = "Production" ALORS
CoCha[IndiceEnCours()]..CouleurFond = JauneOr
CoCha[IndiceEnCours()]..Couleur = RougeFoncé
SINON SI CoTrig..ValeurAffichée = "Festival" ALORS
CoCha[IndiceEnCours()]..CouleurFond = Blanc
CoCha[IndiceEnCours()]..Couleur = Noir
FIN


Une question subsidiaire en faisant un GO je teste ma table je peux écrire cela se sauvegarde mais le changement de couleur opéré par la procédure ne se sauvegarde pas comment faire?
Membre enregistré
7 messages
Posté le 05 juin 2025 - 09:26
Cedric dans le post #4 désolé je suis un tout nouveau dans WINDEV j'ai du mal à comprendre
ChangeCouleur("Fen_32_Table_Selecteur.Table_utilisateurs.Nom[" + Table_utilisateurs + "]")

Fen_32_Table_Selecteur: la fenêtre où se trouve la table en question pour moi FEN_Programmations
Table_utilisateurs: la table concernée pour moi Table_Programmation
Nom: colonne ? pour moi KitIEM ?
[" + Table_utilisateurs + "] : l'indice en cours ?????

J'aime bien comprendre quand on me donne des conseils ;)

Merci en tout cas.
Membre enregistré
950 messages
Posté le 05 juin 2025 - 09:49
[" + Table_utilisateurs + "] : l'indice en cours ?????

oui, je récupère le numéro de ligne en cours dans la table.
Cdlt