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

VBA Access Discussion :

Affichage de données dans un formulaire (lenteur)


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 41
    Points : 30
    Points
    30
    Par défaut Affichage de données dans un formulaire (lenteur)
    Bonjour,

    dans mon formulaire en mode continu j'affiche les données via une requête sur table source ODBC (en temps réel), j'ai remarqué que l'affichage des données dans mon formulaire est assez lent, limite ligne par ligne, et quand je veux faire une modif il y a un petit décalage avec des rafraichissements, c'est lourd à l'utilisation..., pourtant il n'y a pas énorment d'infos dans mon form, mais dès que je passe le formulaire avec du contenu en édition puis en affichage, tout devient beaucoup plus rapide!!, c'est instantané, je me demandais d'ou cela peut venir ?

    PS : dans mon form j'ai une liste déroulante "idCategorie", l'affichage dépend du choix dans cette liste mais je doute qu'elle en soit la cause, j'ai mis le select ci-dessous dans Contenu,

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [categories_description].[categories_id], [categories_description].[categories_name] 
    FROM categories_description 
    ORDER BY [categories_description].[categories_name];

    dans la requête Access je comme critère,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [forms]![FRM_PRODUCT]![idCategorie]
    et enfin dans VBA j'ai inséré ce bout de code au click de la zone de liste,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub idCategorie_Click()
        Me.Requery
    End Sub
    je pense que la méthode est bonne et le simple faite de faire édition/affichage juste après un 1er affichage des données, ça accrue la vistesse là je comprend pas..

    merci pour vos réponses

  2. #2
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonjour,

    Je ne suis pas sur que le problème vienne de là mais je serai toi , j'essaierai d'éliminer de la requête source un lien avec le form. En faisant ainsi, tu "mélanges les mondes" entre ODBC / moteur Jet / Objets Access...

    Je te suggère de :
    - supprimer le critère en lien avec ta liste déroulante
    - Créer une procédure qui applique un filtre sur le formulaire en appliquant la valeur de la liste déroulante
    - Lancer cette procédure à l'ouverture du form et chaque modif de la liste déroulante

    Un exemple de code (écris à la volée dans ce message... non testé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub mp_Fitrer()
        DoCmd.ApplyFilter , "categories_id=" & Me!idCategorie
    End sub

  3. #3
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    En y réfléchissant,... si j'ai bien compris la navigation dans ton formulaire est directement liée ta liste déroulante (qui sert de fonction de recherche de catégorie c'est ça?).

    Dans ce cas il serait sans doute préférable de définir la source du formulaire par exclusivement par code, suite à la sélection d'une catégorie dans la liste.
    Ainsi tu évites un premier chargement de la source non filtrée, lors de l'ouverture de ton formulaire.

    Pour être plus clair:
    • tu vires la source de ton form (propriété Source vide).
    • tu créées une procédure dans le module du form pour afficher un enregistrement
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      Sub mp_Afficher(ByVal IDCat As Long)
      Dim sSQL As String
       
          sSQL = "SELECT ..." & _
                 " FROM ..." & _
                 " WHERE Categorie_id = " & IDCat
       
          Me.RecordSource = sSQL
          Me.Requery
       
      End Sub
    • Tu appelles cette procédure depuis la liste déroulante (sur Avant MAJ de la liste par exemple)

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      mp_Afficher Me!idCategorie
    • Enfin tu appelles cette procédure au démarrage de ton form en attribuant une valeur d'id invlaide 0 par exemple si cela n'existe pas) de façon à afficher le formulaire vierge au démarrage.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
       
      me!idCategorie =""
      mp_Afficher 0


  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    Bonjour mout1234,

    ça fonctionne très bien cette façon chapeau !!!, jamais j'aurai imaginé seul une telle possibilité merci beaucoup, je recontre à présent si je peux me permettre un 2ème problème et oui... j'ai homis de préciser que dans les données reçus il y a 2 champs que je met à jour, le problème en passant la requête par VBA c'est que je ne peux plus modifier les valeurs avec l'erreur suivante, Impossible de mettre à jour Recordset. Dans la Source controle des champs du form je saisie les champs de la requête VB, est-ce bien ce qu'il faut faire ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    j'ai finalement opté pour la 1ère solution qui fonctionne très bien..

    merci bcp pour les réponses

  6. #6
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Citation Envoyé par Yohann_x Voir le message
    merci bcp pour les réponses
    De rien


    Bon dev

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/10/2010, 06h20
  2. Réponses: 3
    Dernier message: 19/11/2009, 14h43
  3. Non affichage des données dans le formulaire
    Par enkie dans le forum IHM
    Réponses: 11
    Dernier message: 11/07/2008, 13h25
  4. Affichage de données dans sous formulaire
    Par karibou47 dans le forum Access
    Réponses: 1
    Dernier message: 16/08/2006, 20h58
  5. C# - Affichage des données dans un formulaire
    Par paradeofphp dans le forum Windows Forms
    Réponses: 6
    Dernier message: 25/07/2006, 19h23

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