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

IHM Discussion :

Gros formulaire lent : comment organisez vous les votres ?


Sujet :

IHM

  1. #1
    Membre à l'essai
    Homme Profil pro
    Analyste fonctionnel AMOA
    Inscrit en
    Janvier 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Analyste fonctionnel AMOA
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2018
    Messages : 27
    Points : 22
    Points
    22
    Par défaut Gros formulaire lent : comment organisez vous les votres ?
    Bonjour,

    J'ai un formulaire dont la table a 26 champs. Le formulaire a autant de contrôles dépendants que de champs + quelques champs dépendants en double car affichés dans la liste (mode continu) du formulaire + autant de champs mais indépendant pour servant au filtrage de la liste + autant encore servant à des actions (ajout enregistrement, dupliquer avec certains champs modifiés, modifier en masse).

    Et mon formulaire est assez lent, surtout quand je passe du mode création au mode formulaire et vise versa, idem quand j'enregistre après une modif dans le code vba).

    Ais je trop de contrôles dans mon formulaire ? Comment puis je faire pour l'alléger afin qu'il soit plus réactif ? Est ce que mettre les contrôles indépendants dans des fenêtres séparées pourrait régler le problème ?

    Qu'en pensez vous svp ?

    Cdlt
    Jérôme

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Bonjour.

    Cela m'est arrivé aussi sans que j'en comprenne vraiment la source.

    Les contournements que j'ai trouvé.
    1. Mettre l'appli et ses données dans le même répertoire local sur le PC de dév.
    2. Ne prendre qu'un sous-ensemble des données (ex les 10 premiers enregistrements de chaque table de données).


    Note que mon appli restait parfaitement fonctionnelle en utilisation par l'utilisateur (pas de lenteurs particulières).
    C'est seulement moi qui était impacté en dév.

    Sinon un coupable fréquent des lenteurs d'un formulaire sont les listes déroulantes "copieuses".
    Quand il ouvre un formulaire, Access charge toutes les données nécessaires pour toutes les listes déroulantes.
    Vois si tu peux différer le chargement des données des listes au moment où tu les utilises (getFocus).

    Une autre astuce si tu as des sous-formulaires dans des onglets est de synchroniser le chargement des données avec l'affichage de l'onglet.
    Donc tu mets un contrôle sous-formulaire mais tu n'assigne pas l'objet formulaire associé.
    Au moment de l'affichage de l'onglet, là tu assignes le formulaire à utiliser.

    Le temps global n'est pas plus court mais il est morcelé en plusieurs étapes ce qui donne l'impression que l'application répond plus vite.

    A+

  3. #3
    Membre à l'essai
    Homme Profil pro
    Analyste fonctionnel AMOA
    Inscrit en
    Janvier 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Analyste fonctionnel AMOA
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2018
    Messages : 27
    Points : 22
    Points
    22
    Par défaut
    Merci beaucoup pour tes conseils. Je vais essayer de les appliquer.

    J'ai beaucoup de listes déroulantes derrière lesquels il y a une requête qui a pour source une autre requête. De plus, cette requête permet de mettre côte à côte en affichage 10 niveaux de catégories/sous-catégories/sous-sous...
    En fait, la même table contient parents et enfants.
    Table Categorie_Tbl :
    Id
    Libellé
    ParentId
    Niveau

    Donc je pense que çà demande de la ressource de relier 10 fois la même table avec elle-même (ParentId et Id) et ce autant de fois qu'il y a de liste déroulante soit plusieurs dizaine de fois.

    Hormis pour les listes qui affichent les données de l'enregistrement en cours (sinon elles ne s'afficheront pas), ton idée de charger les listes indépendantes une à une lors de leur activation est une très bonne idée pour répartir la ressource nécessaire. Cependant comment l'appliquer ? En renseignant en vba la source de la liste déroulante à réception du focus si j'ai bien compris ce que tu proposes ?

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Bonjour.

    En renseignant en vba la source de la liste déroulante à réception du focus si j'ai bien compris ce que tu proposes ?
    Oui.

    Et si tu veux et que tes hiérarchies changent peu et pas à 50 places différentes, tu peux envisager de précalculer ta généalogie au moment de la saisie.
    Chaque élément connait alors tous ses descendants (ou ascendants selon le besoin).
    Tu stockes le résultat (la liste des identifiants) dans un champ mémo (ou peut-être un champ multi-valué) et tu te sers de ce champ comme source d'affichage.
    Tu vas payer le prix au moment de la saisie mais tu vas gagner à l'affichage.
    Évidement ce n'est pas 3ième Forme Normale et il faut faire super attention aux modifs mais cela peut rendre ton appli plus réactive.

    A+

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Et j'ouubliais mais avant de te lancer dans une complète ré-architecture vérifie en faisant un formulaire test sans les liste déroulantes si ce sont bien elles qui sont en cause.

    Parfois c'est seulement une des listes qui ralentit tout, donc tu voudras peut-être procéder une liste à la fois et ne traiter que celle ou celles qui posent problème.

    A+

  6. #6
    Membre à l'essai
    Homme Profil pro
    Analyste fonctionnel AMOA
    Inscrit en
    Janvier 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Analyste fonctionnel AMOA
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2018
    Messages : 27
    Points : 22
    Points
    22
    Par défaut
    Merci Marot pour tous tes conseils.
    Je regarde cela dès que je peux et je viendrais dire ici si j'ai réussi et quelle option j'ai choisi.
    Bien à toi.

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/05/2008, 09h43
  2. Réponses: 8
    Dernier message: 11/10/2006, 01h57
  3. [.NET][C#][WinForms]Comment récupérez-vous les dates?
    Par Floyd dans le forum Windows Forms
    Réponses: 5
    Dernier message: 02/11/2005, 16h16
  4. Comment gérez-vous les NULL dans 1 insert ?
    Par qi130 dans le forum Bases de données
    Réponses: 4
    Dernier message: 12/02/2005, 22h01
  5. Réponses: 19
    Dernier message: 14/08/2003, 11h37

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