|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
| Mise n couleur cellule d'un TCD selon critères "extérieur" |
| Débuté par Eric F., 24 juin 2025 12:44 - 11 réponses |
| |
| | | |
|
| |
Membre enregistré 107 messages |
|
| Posté le 24 juin 2025 - 12:44 |
Bonjour,
j'ai lu les différents posts sur la manipulation des cellules d'un TCD, mais je n'ai pas trouvé de solution. Voici mon problème :
j'affiche dans un TCD un tableau des prix proposés à une date donnée pour les articles par des fournisseurs, en partance de leurs différents dépôts. Mon tcd affiche en colonne les produits, et en ligne les couples fournisseurs/dépôts
....................................................|..Article 1.....|..Article 2....| ------------------------------------------------------------------------------------- Fournisseur 1........................|.........................|.......................| .................. dépôt 11..............|....prix 111........|...prix 112.......| .................. dépôt 12..............|...prix 121........|...prix 122.......| Fournisseur 2........................|.........................|.......................| .................. dépôt 21..............|...prix 211........|...prix 212.......|
Je voudrais mettre en couleur la case du prix pour laquelle j'ai passé commande ce jour là. C'est à dire si j'ai commandé au fournisseur 1, sur son dépôt 12, de l'article 2, je veux mettre en vert la case prix 122
Mon problème est que cette info n'est pas affichée. Et la mise en valeur d'une case, je ne sais le faire qu'avec l'événement "en affichage d'une cellule". Je n'ai alors sous le coude que la valeur du prix.
Comment connaître l'article, le fournisseur et le dépôt qui correspondent à la cellule en cours d'affichage ?
TCDPosition part des coordonnées pour avoir la cellule. Je voudrais l'inverse... depuis la cellule en cours d'affichage, accéder à ses coordonnées.
Si quelqu'un connait l'astuce...
Par avance merci !
EricMessage modifié, 24 juin 2025 - 13:12 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 010 messages |
|
| Posté le 24 juin 2025 - 15:26 |
Bonjour je ne suis pas utilisateur du TCD donc ma réponse ne correspond peut-être pas, mais qu'entendez-vous par "en cours d'affichage" ? Si il s'agit d'une cellule sélectionnée, vous avez :
TCDSelect (Fonction) https://doc.pcsoft.fr/fr-FR/?1000021024
Cdlt |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 010 messages |
|
| Posté le 24 juin 2025 - 16:49 |
De retour pour une autre idée, ne serait-ce pas :
TCDListePositionEntête (Fonction) https://doc.pcsoft.fr/fr-FR/?1000020975
Dans la seconde partie de l'exemple (qui renvoie toutes les villes) : Col_Ville serait Col_Article2
dans la condition : SI (dim.Pays ~= "FRANCE") ALORS dim.pays serait dim.Fournisseur "FRANCE" serait "dépôt12"
enfin quelque chose comme ça pour vous renvoyer le Tableau de tcdPosition
Aucune certitude de ma part Cdlt |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 107 messages |
|
| Posté le 24 juin 2025 - 22:05 |
Cédric_34 a écrit :
De retour pour une autre idée, ne serait-ce pas : TCDListePositionEntête (Fonction) https://doc.pcsoft.fr/fr-FR/?1000020975Dans la seconde partie de l'exemple (qui renvoie toutes les villes) : Col_Ville serait Col_Article2 dans la condition : SI (dim.Pays ~= "FRANCE") ALORS dim.pays serait dim.Fournisseur "FRANCE" serait "dépôt12" enfin quelque chose comme ça pour vous renvoyer le Tableau de tcdPosition Aucune certitude de ma part Cdlt
merci pour votre aide. je vais investiguer sur la fonction TCDListePositionEntête
En fait, pour mettre à jour la couleur d'une cellule, la doc du wl langage indique d'utiliser l'événement "Affichage d'une cellule" Ainsi, on peut écrire : SI VAL_PRIX > 500 ALORS VAL_PRIX..CouleurFond = VertPastel FIN Sauf, que dans ce code, on n'a aucun indice de ligne, ni de colonne. On est sur une cellule en cours d'affichage, mais on ne peut tester que la valeur de la cellule, on n'a rien pour faire une recherche "ailleurs", par exemple lancer une requête ou cherche dans un tableau mémoire selon l'article, le fournisseur et le dépôt.
Eric |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 107 messages |
|
| Posté le 24 juin 2025 - 22:25 |
Bon, ben, j'essaie par tous mes petits moyens d'utiliser TCDListePositionEntête, et je n'y arrive pas.
tabPos est un tableau de tcdPosition tabPos = TCDListePositionEntête(TCD_INFO, COL_SFourn) POUR TOUT dim de tabPos Trace(dim.COL_SFourn, dim.COL_SCarb, dim.COL_SDepot, dim.val_PrixHT ) FIN
tabPos est toujours vide. Le débogueur me dit que tabPos est un tableau de 0 TCDPosition
J'ai essayé avec toutes les colonnes possibles, nom des colonnes ou des lignes, rien n'y fait, toujours rien en retour.
Ce code WL langage est dans un bouton et je clique dessus alors que le tcd est affiché et bien rempli.
Quelqu'un saurait m'expliquer comment s'utilise cette fonction ? Mon code est un quasi copié-collé de l'aide windev.
Eric |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 010 messages |
|
| Posté le 24 juin 2025 - 22:34 |
pour la ligne : tabPos = TCDListePositionEntête(TCD_INFO, COL_SFourn)
Avez-vous essayé avec la colonne "Article 2" de votre post #1 (je ne connais pas son nom) ?
Le but étant de savoir si vous pouvez trouver "Prix 122" dans le tableau des résultatsMessage modifié, 24 juin 2025 - 22:36 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 010 messages |
|
| Posté le 24 juin 2025 - 23:28 |
Je viens de faire un essai avec l'exemple de Windev : WD TableauCroiséDynamique
j'ai mis ceci sur un bouton (donc effectivement après la fin d'affichage du TCD)
tabPos est un tableau de tcdPosition
tabPos = TCDListePositionEntête(TCD_Statistiques, COL__DateCommande_Trimestre) POUR TOUT dim de tabPos Trace(dim.COL__DateCommande_Trimestre) FIN
J'ai bien un retour au premier essai, et pas un tableau vide. Voici le résultat du Trace
2010T1 2010T2 2010T3 2010T4 2011T1 2011T2 2011T3 2011T4 2012T1 2012T2 2012T3 2012T4
Vous devez avoir un souci avec les intitulés de colonnes Mais comme je vous l'ai dit, je n'ai pas d'expérience avec les TCD. Le retour de Trace que j'obtiens correspond à l'année et au Trimestre, il faudrait approfondir pour cibler le bon nom de colonne.
CdltMessage modifié, 24 juin 2025 - 23:30 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 010 messages |
|
| Posté le 25 juin 2025 - 00:53 |
Est-ce que ceci va vous permettre de trouver la réponse ?
Suite au résultat précédent (Post #7), je suis retourné sur la documentation de :
tcdPosition (Type de variable) https://doc.pcsoft.fr/fr-FR/?1000020726
et j'ai utilisé les résultats obtenus post #7 dans le code de la fonction (toujours sur l'exemple "WD TableauCroiséDynamique" de Windev). J'ai testé avec la première valeur obtenue, soit 2010T1. Donc pour x, la complétion m'a proposé "COL_DateCommande_Année", j'ai saisi : 2010 Pour le trimestre : "2010T1" Pour le Mois, j'ai choisi "201002" donc le mois de Février etc... suivant le code ci-dessous :
x est une tcdPosition de TCD_Statistiques
x.COL_DateCommande_Année = "2010" x.COL__DateCommande_Trimestre = "2010T1" x.COL__DateCommande_Mois = "201002" x.COL_Pays = "Allemagne" x.COL_Ville = "Hamburg"
Trace(TCD_Statistiques.VAL_CA[x])
et le trace m'a renvoyé : 44023.564 Effectivement, quand on Déplie le Trimestre 1 sur le TCD, on trouve bien cette valeur à "Hamburg" pour le mois de Février 2010.
Je pense que vous n'avez plus beaucoup à creuser pour obtenir ce que vous souhaitez. Cdlt |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 107 messages |
|
| Posté le 25 juin 2025 - 11:38 |
Cédric,
merci pour votre aide !
je suis parti sur cette dernière voie et j'ai trouvé une solution :
Je n'utilise plus l'évènement "affichage d'une cellule".
Après calcul du TCD, je parcours toutes les cellules avec ce code :
TCDCalculeTout(TCD_INFO)
x est un tcdPosition de TCD_INFO
POUR nLig = 1 _À_ TableOccurrence(TABLE) x.COL_SCarb = TABLE.COL_CARB[nLig] x.COL_DDate_Jour = TABLE.COL_DATE[nLig] x.COL_SFourn = TABLE.COL_FOURN[nLig] x.COL_SDepot = TABLE.COL_DEPOT[nLig] SI TABLE.COL_CDENUM[nLig] <> "" ALORS TCD_INFO.VAL_PrixHT[x]..CouleurFond = VertPastel FIN FIN
Voilà, je reparcours donc ma source, et non mon TCD !
Je base mon parcours sur la table mémoire qui me sert à remplir le tableau de structure alimentant mon TCD. Grâce à "x est un tcdPosition de TCD_INFO", lorsque j'écris x., windev me propose les noms des "COLxxx"
Encore une fois merci pour l'indication.
Eric |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 010 messages |
|
| Posté le 25 juin 2025 - 12:32 |
Bonjour, Parfait, il restait effectivement à apporter les valeurs pour la fonction "tcdPosition". Bonne continuation |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 010 messages |
|
| Posté le 25 juin 2025 - 14:58 |
A propos, vous pouvez filtrer la source sur la condition : COL_CDENUM[nLig] <> "" puis vous parcourez le résultat de ce filtre pour la Variable tcdPosition. Ainsi, vous n'avez pas à parcourir toute la source, je suppose qu'il ne resterait que quelques valeurs à traiter après filtre.
Cdlt |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 107 messages |
|
| Posté le 25 juin 2025 - 19:34 |
Poser un filtre sur la table mémoire ?
Ce qui est sûr, c'est que je m'aperçois que mon "SI TABLE.COL_CDENUM[nLig] <> "" ALORS" j'aurai dû le mettre avant le remplissage de x !!!!
Par contre, si on fait un tableActivefiltre, un "POUR nLig = 1 _À_ TableOccurrence(TABLE)" ne traite que les lignes filtrées ? Bon, j'ai au maximum, une centaines de lignes... mais je vais tester!
Merci beaucoup. |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|