IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

position d'une ligne dans une table est faussée par les tris


Sujet :

WinDev

  1. #1
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut position d'une ligne dans une table est faussée par les tris
    Bonjour à tous,

    je rencontre un problème pas facile à expliquer. J'ai déjà mis un petit moment à comprendre ce qui perturbait mon programme.

    J'ai un écran de gestion de stocks qui me permet de voir pour tous mes articles l'état du stock, la quantité attendue (les achats que l'on va recevoir tôt ou tard), le besoin (d'après les OFs qui ont besoin de l'article comme fourniture), ......

    J'ai donc une table TABLE_Stocks (la principale) qui est alimentée par une requête SQL, cette table a pour clé de parcourt la référence article, donc par défaut cette table est triée selon la colonne ARTICLE.

    Quand je clique sur une ligne d'un article j'ai le détail des besoins dans la table BESOINS en bas. Dans cette table je peux double-cliquer un OF pour lui affecter une quantité de fourniture, ce qui a pour conséquence de changer un certain nombre de compteurs, le stock, le besoin, ....

    Il faut donc que la table principale se raffraichisse tout en revenant sur la même ligne qu'auparavant. J'ai donc essayé ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // j'ai dans ma variable aid la clé de l'article
    Ouvre(FEN_Lancement_OF)
    Pos est un entier = TableCherche(TABLE_Stocks.COL_id, aid)
    Info(Pos)
    TableAffiche(TABLE_Stocks)
    TableSelectPlus(TABLE_Stocks, Pos)
    Et je remarque que ce code fonctionne bien tant qu'on ne touche pas aux fonctions de tri des différentes colonnes de la table TABLE_Stocks.

    Exemple : On considère l'article 70113 STATIQUE (en 6ème position dans la table).



    On voit que j'ai 982 statiques en stock, et un besoin sur 2 OF pour un total de 182 statiques. Je veux affecter 12 statiques à l'opération 501 de l'OF F1103075. Je double-clique sur la ligne de l'OF à alimenter, et je renseigne la fenêtre :



    Une fois que je clique VALIDER, le programme recherche la position de la ligne de l'article 70113 STATIQUE, et la trouve bien !!



    et mes données se rafraichissent toutes seules l'instant d'après :



    On a bien 12 pièces en moins sur le stock, 12 en moins sur le besoin, et le besoin sur l'OF F1103075 est passé de 82 à 70 aussi. Donc tout est ok.


    Maintenant, je joue un peu avec les colonnes, les tris surtout, au niveau des quantités, notamment la colonne STOCK, au point que je me retrouve dans cette configuration (l'article considéré est maintenant en position 2):



    De nouveau je vais faire un lancement de 9 statiques pour voir :



    Je valide, et de retour aux tables, le programme me calcule la ligne de l'article 70113 STATIQUE en position 3.



    On pourrait croire que c'est la bonne position mais regardez bien la toute première ligne !! Il s'est glissé une ligne qui n'a rien à faire là puisqu'elle ne respecte pas le filtre imposé (zone de saisie 70 tout en haut à gauche) mais pendant un court instant elle apparait en tête de la table et fausse le calcul de la position. Finalement, la ligne sélectionnée n'est pas la bonne et les infos affichées non plus !!



    Ce qui est étrange c'est que je lance la recherche de position avant la réactualisation de la table donc je ne vois pas ce qui déclenche l'apparition de cette ligne qui ne rentre pas dans le filtre.

    D'autre part, je ne rencontre le problème que lorsque j'ai cliqué sur les tris de colonnes avant.

    Enfin je précise que le filtrage des tables est réalisé en utilisant le traitement "Filtrage des enregistrements" associé aux objets "Tables", peut-être que c'est une piste....

    Désolé d'avoir été aussi long mais je voulais décrire parfaitement le probème.

    Merci à quiconque m'aidera à trouver la solution

  2. #2
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 351
    Points : 9 507
    Points
    9 507
    Par défaut
    Je penche également pour un problème de filtrage, mais essaye voir le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // j'ai dans ma variable aid la clé de l'article
    Pos est un entier = TableCherche(TABLE_Stocks.COL_id, aid)
    Ouvre(FEN_Lancement_OF)
    Info(Pos)
    TableAffiche(TABLE_Stocks)
    TableSelectPlus(TABLE_Stocks, Pos)
    Pour vois si c'est l'ouverture de la fenêtre qui perturberait...

  3. #3
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Ok j'ai testé sans même l'ouverture de la fenêtre, uniquement ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // j'ai dans ma variable aid la clé de l'article
    Pos est un entier = TableCherche(TABLE_Stocks.COL_id, aid)
    Info(Pos)
    Et dans la deuxième situation (en tri décroissant sur le stock) il me trouve toujours le même numero de ligne : 3

    Et toujours cet article "2310 CONTREPLAQUE" qui apparait en tête de table, et qui persiste cette fois... Pour info, cet article est celui qui a le stock le plus important. Est-ce que le mécanisme de filtrage fonctionnerait mal et laisserait passer le premier enregistrement de la requete ???

    Pour info, voici comment est réaliser le filtrage de ma table TABLE_Stocks :

    Attention c'est pas super lisible mais ce filtrage doit gérer la combinaison de 2 filtres : article et/ou emplacement de stockage


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    // TRAITEMENT Filtrage des enregistrements de TABLE_Stocks
     
    Monfiltre est une chaîne  = SAI_filtre     // le filtre sur reference article
    Monfiltre2 est une chaîne = SAI_filtre2   // le filtre sur nom de l'emplacement
     
    SI ((LISTE_articles..Valeur = 0 ET (Taille(Monfiltre) = 0 OU (Taille(Monfiltre) <> 0 ET Contient(REQ_Stocks.art_reference, Monfiltre, SansCasse)))) ...
    	OU LISTE_articles..Valeur = REQ_Stocks.stck_article) ...
    	ET
    	((LISTE_emplacements..Valeur = 0 ET (Taille(Monfiltre2) = 0 OU (Taille(Monfiltre2) <> 0 ET Contient(REQ_Stocks.empl_nom, Monfiltre2, SansCasse)))) ...
    	OU LISTE_emplacements..Valeur = REQ_Stocks.empl_id) ...
    ALORS 
    	RENVOYER Vrai
    SINON
    	RENVOYER Faux
    FIN
    Si ça se trouve il y a plus simple, plus performant, peut-être avec une H fonction placée dans l'évenement Fin d'initialisation de TABLE_Stocks ?

  4. #4
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 351
    Points : 9 507
    Points
    9 507
    Par défaut
    Ce ne serait pas ta req_stocks qui poserait problème ?
    Je pense que tu devrais essayer de simplifier ton filtrage. Je n'ai pas ton modèle de données mais tu dois avoir une liaison entre article et emplacement.
    Regarde du coté de hfiltre et de hcreevue.

  5. #5
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Ben en fait mon filtrage je le fait sur la requete REQ_Stocks qui alimente ma table TABLE_Stocks, est-ce que je devrais tester directement les enregistrements de la table et pas de la requête ?

    Comment ça marche Windev à ce niveau là ? Si je clique sur les tris de colonnes, est-ce que ça trie aussi ma requête qui est derrière ou bien c'est uniquement l'objet table qui gère tout seul les tris ?

    Ma requête REQ_Stocks elle est pas super compliquée, quoi qu'il y a un calcul de champs mais bon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT stck.*, empl.*, art.art_reference, art.art_stock_secu, 
    CASE WHEN (stck_besoin + art_stock_secu - stck_qte - stck_attendu) > 0 THEN (stck_besoin + art_stock_secu - stck_qte - stck_attendu) 
         WHEN (stck_besoin + art_stock_secu - stck_qte - stck_attendu) <= 0 THEN 0 
    END AS reappro 
    FROM stck, empl, art WHERE art_empl = empl_id AND stck_article = art_id;
    Pour ce qui est du HFiltre j'ai déjà creusé de ce côté là mais ça m'a pris la tête, je n'arrivais pas à écrire ma condition de filtrage...

  6. #6
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 351
    Points : 9 507
    Points
    9 507
    Par défaut
    Quelle est la liaison entre emplacement et article ?

    [EDIT]
    Ta ligne parasite, elle disparait après réaffichage ?
    As-tu essayé un tablesupprimetout() avant réaffichage ?

  7. #7
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Alors je te réponds dans l'ordre :

    La liaison entre ces 2 tables est : art_empl = empl_id // Un article ne peut être stocké qu'à qu'un seul emplacement.

    Pour le reste, voilà le code qui fonctionne, mais bon c'est pas propre quoi !!! 3 TableAffiche pour faire ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // j'ai dans ma variable aid la clé de l'article
    TableAffiche(TABLE_Stocks)   // si j'enlève cette ligne, alors ça ne marche pas
    Pos est un entier = TableCherche(TABLE_Stocks.COL_id, aid)
    Info(Pos)
    TableSupprimeTout(TABLE_Stocks)
    TableAffiche(TABLE_Stocks)
    TableSelectPlus(TABLE_Stocks, Pos)
    TableAffiche(TABLE_Besoins)
    Ca t'aide à comprendre d'où pourrait venir le pb ? Et là j'ai encore pas ajouté l'ouverture de ma fenêtre de lancement....

    EDIT

    Avec ce code, ça fonctionne quand je suis en tri décroissant sur le stock.
    MAIS quand je suis dans la première situation (cad aucun tri, si ce n'est sur la clé de parcourt donc tri ascendant sur la référence) hé bien ça ne fonctionne plus.... C'est à ne rien y comprendre... pffff

  8. #8
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 351
    Points : 9 507
    Points
    9 507
    Par défaut
    Lorsque tu change le tri, refais tu un filtrage (code lors de modification de la table). J'ai l'impression que wd veut "travailler sur" ta requête et s'emmêle les crayons.

    Je ne comprends pas le Contient(REQ_Stocks.art_reference, Monfiltre, SansCasse). Contient c'est une procédure à toi ou c'est une nouveauté wd17. (je suis sur wd12).

  9. #9
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Bon finalement j'ai changé ma façon de programmer.
    Je n'utilise plus le traitement "Filtrage des enregistrements de TABLE_Stocks".
    Au lieu de ça, je me suis fait une procédure locale à ma fenêtre, que je vais appeler à chaque modification des filtres ou sélection dans les listes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    PROCEDURE FiltrerStocks()
     
    Filtre_art est une chaîne = SAI_filtre
    Filtre_empl est une chaîne = SAI_filtre2
    aid est un entier = LISTE_articles..Valeur
    eid est un entier = LISTE_emplacements..Valeur
    Critere est une chaîne
     
    SI aid=0 ALORS
    	SI eid = 0 ALORS
    		// on utilise les 2 filtres
    		Critere = "art_reference ~] '" + Filtre_art + "' ET empl_nom ~] '" + Filtre_empl + "'"
    	SINON 
    		// on utilise filtre article et eid
    		Critere = "art_reference ~] '" + Filtre_art + "' ET empl_id = " + eid
    	FIN
    SINON
    	SI eid = 0 ALORS
    		// on utilise aid et filtre empl
    		Critere = "empl_nom ~] '" + Filtre_empl + "' ET stck_article = " + aid
    	SINON 
    		// on utilise eid et aid
    		Critere = "stck_article = " + aid + " ET empl_id = " + eid		
    	FIN
    FIN
     
    HFiltre(REQ_Stocks, Critere)
    TableSupprimeTout(TABLE_Stocks)
    TableAffiche(TABLE_Stocks)
    Et cette fois c'est bon, je n'ai plus de comportement étrange....

    La fonction Contient est apparue dans WD17 je crois.

    Je pense que je vais fonctionner comme ça un peu partout dans mes développements et éviter d'utiliser ce traitement "Filtrage" qui en plus n'est pas disponible sur tous les objets.

    Pour terminer, je voudrais juste dire que j'ai encore un bug d'affichage quand de l'action du filtrage (via différents objets) ne résulte qu'un seul enregistrement, exemple :



    L'unique ligne de la table Stocks est à moitié affichée, il faut que je clique dessus pour que les champs manquants (qui sont toujours de type texte) apparaissent !!! Si jamais ça vous dis qqchose....

    Encore merci

  10. #10
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 351
    Points : 9 507
    Points
    9 507
    Par défaut
    Essaye de mettre un tableaffiche(table_stock,tadebut)
    et/ou un multitacherepeint(fen_stock).

    Je ne garantis pas le fonctionnement.

    Sinon, simule un clic sur ta table : tableselectplus(..)

  11. #11
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Bon ben finalement ce que j'avais dit plus haut ne fonctionne pas du tout.

    J'ai l'impression que les tris que l'on peut faire sur l'objet table perturbent le réaffichage de ma table. Pas moyen d'obtenir la bonne position de ma référence !!!! C'est un truc de fou, j'en perd mon latin.

    Bon là, à priori, j'utilise une table fichier (je n'en suis pas sur). C'est une table avec comme reglage dans la section "CONTENU" un "accès direct (sans limite)" :



    J'ai cru comprendre qu'une table mémoire était en direct avec la base de données et que par conséquent toute modification dans la bd se voyait en temps réel dans l'objet table mémoire. C'est réellement comme ça que ça marche ou bien je crois au père noel !!?

    Parce qu'à la limite, si je pouvais trouver une solution pour que ligne sélectionnée dans la table Stocks en arrière plan se raffraichisse toute seule par une instruction de type FichierversEcran ou autre, ben ça m'enlèverait une sacrée épine du pied !

  12. #12
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 351
    Points : 9 507
    Points
    9 507
    Par défaut
    Essaye avec "chargé en mémoire". Parfois cela fonctionne mieux.

    Question : est-il nécessaire de faire des tris ?

  13. #13
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Bien sur qu'il est nécessaire de faire des tris, je veux que mon utilisateur final puisse trier selon les besoins ou la qté en stock, ça lui facilite la vie.

    Bon finalement j'ai du passer par du code maison pour rechercher la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Ouvre(FEN_Lancement_OF)  // ma fenêtre de lancement de fourniture    
     
    TableAffiche(TABLE_Stocks) // le rechargement de ma table Stocks pour avoir des valeurs à jour
     
    // la recherche de la ligne qui correspond à l'article
    POUR i=1 A TableOccurrence(TABLE_Stocks)
    	SI TABLE_Stocks.COL_id[i] = aid ALORS
    		pos = i
    	FIN
    FIN
     
    // et sélection de la bonne ligne
    TableSelectPlus(TABLE_Stocks, pos)
    Peut-être bien que je vais me faire une fonction que je vais stocker dans mes procédures globales afin de pouvoir la réutiliser plus tard dans d'autres écrans. Bon là c'est rapide parce que mon filtre avait réduit le nombre de résultats à une petite dizaine dans ma table. Maintenant la question est de savoir si une telle fonction avec une boucle et un test sera toujours aussi véloce quand il y aura 2000 lignes dans la table (en supposant qu'aucun filtre n'ait été défini) ....

  14. #14
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    lorsque tu as fini de modifier l'enregistrement, il faut que tu recharges la table en utilisant un TableAffiche(TABLE_Stocks,taRéExecuteRequete) et ça devrait remettre à jour les données de la table en réexécutant la dernière requête lancée (donc avec ou sans filtre).

  15. #15
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 351
    Points : 9 507
    Points
    9 507
    Par défaut
    2000 lignes c'est rien. Si tu m'avait dit 200 000 ou 2 millions, là je me serais posé des questions.

    Essaye déjà la proposition de Nicolas.

  16. #16
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Citation Envoyé par Nicolas_Jeanneau Voir le message
    lorsque tu as fini de modifier l'enregistrement, il faut que tu recharges la table en utilisant un TableAffiche(TABLE_Stocks,taRéExecuteRequete) et ça devrait remettre à jour les données de la table en réexécutant la dernière requête lancée (donc avec ou sans filtre).
    J'avais déjà essayé à peu près tous les paramètres possibles pour le TableAffiche() mais sans succès. Ok ça raffraichit bien la table mais le TableCherche me retourne la mauvaise position de ligne.

    Finalement j'ai opté pour une recherche via le bout de code précédent et plus via la fonction TableCherche... tant pi.

    Un jour j'aurai peut-être la solution, un bug de la version 17 peut-être ? Comme le fait que lorsque le filtre ne ramène qu'une ligne alors les colonnes de type textes sont "effacées" !!

  17. #17
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Citation Envoyé par frenchsting Voir le message
    2000 lignes c'est rien. Si tu m'avait dit 200 000 ou 2 millions, là je me serais posé des questions.

    Essaye déjà la proposition de Nicolas.
    Imagine que je doive reproduire cette moulinette sur une table qui liste les mouvements des articles (entrées, sorties) sur une certaine période je peux vite avoir des dizaines de milliers de lignes, si j'affiche tous les articles (sans filtre). Là ça deviendra peut-être longuet comme algo de recherche....

  18. #18
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Pour en revenir à la problématique de recherche, pourquoi ne pas prendre les devant en stockant en variable, lors de l'affichage de la table Besoins, la valeur de TABLE_Stocks.COL_id[TableSelect(TABLE_Stocks)] et tu n'as plus besoin de faire une recherche ...

  19. #19
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Citation Envoyé par Nicolas_Jeanneau Voir le message
    Pour en revenir à la problématique de recherche, pourquoi ne pas prendre les devant en stockant en variable, lors de l'affichage de la table Besoins, la valeur de TABLE_Stocks.COL_id[TableSelect(TABLE_Stocks)] et tu n'as plus besoin de faire une recherche ...
    Alors deux choses :

    - il fait quoi ce code ? Il mémorise la position de la ligne ? L'id de mon article je le connais, ce que je ne connais pas c'est à quelle ligne il se trouve dans ma table une fois qu'elle est réactualisée...

    - en fait il est probable que la position de l'article change si on est dans une vue triée selon une quantité par exemple, et que cette quantité change au point que l'article en question n'apparaitra plus à la même position une fois que la table (toujours triée) sera réactualisée. Il faudrait pouvoir prédire la future position et c'est impossible

Discussions similaires

  1. Récupérer une information d'une ligne dans une table
    Par Lebas dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/04/2013, 10h24
  2. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  3. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  4. [E-00] Syntaxe pour insérer une ligne ou une colonne dans une feuille
    Par Benjycool dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/02/2009, 09h27
  5. Réponses: 3
    Dernier message: 29/01/2008, 12h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo