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 :

[VBA-A]Rafraichissement d'un flexgrid


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2005
    Messages : 218
    Par défaut [VBA-A]Rafraichissement d'un flexgrid
    Bonjour,

    je n'arrive pas a rafraichier mon flexgrid.
    Je m'explique, j'ai un flexgrid que je remplis dynamiquement à l'aide d'un recordset, suivant le code ci dessous :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    Public Sub RemplirFlex(msflex As Object, rs As Adodb.Recordset, Query As String)
    'Permet de remplir une flexgrid en fonction du recordset et d'une requête.
    DoEvents
    Dim i As Integer
    Dim j As Integer
    Dim r As Integer
    Dim c As Integer
     
    On Error GoTo GestionErreur
     
     
    '-- Remplir le flex s'il y a une requete
      If Query <> vbNullString Then
        'Tester si le recordset rattaché au flexgrid est ouvert. Dans ce cas, il est fermé, puis réouvert.
        'Sinon, on l'ouvre directement.
        If rs.State = adStateOpen Then
        rs.Close
        rs.CursorLocation = adUseServer
        Else
        rs.CursorLocation = adUseServer
        End If
     
     
     
        rs.Open Query, CurrentProject.Connection, adOpenKeyset, adLockPessimistic
     
        msflex.Clear
        msflex.Redraw = False
        msflex.Visible = False
     
            msflex.FixedRows = 1
            msflex.FixedCols = 0
            msflex.RowHeight(0) = 300
            msflex.RowHeightMin = 650
     
            msflex.WordWrap = True
     
           If Not rs.EOF Then
            rs.MoveLast
            rs.MoveFirst
     
     
            msflex.Rows = rs.RecordCount + 1
            msflex.Cols = rs.Fields.Count
     
                For i = 0 To rs.Fields.Count - 1
                    msflex.TextMatrix(0, i) = rs.Fields(i).Name
                Next
     
                i = 1
                Do While Not rs.EOF
     
                    For j = 0 To rs.Fields.Count - 1
                        If Not IsNull(rs.Fields(j).Value) Then
                            msflex.TextMatrix(i, j) = rs.Fields(j).Value
                        End If
                    Next
     
                i = i + 1
                rs.MoveNext
                Loop
     
            End If
     
     
     
        msflex.Redraw = True
        msflex.Visible = True
        msflex.Refresh
     
     Else
     msflex.Clear
     
    End If
    Exit Sub
     
    GestionErreur:
    MsgBox Err.desc, vbInformation, AppName & " " & AppVersion
     
    End Sub
    Mon problème, c'est que parfois, le flexgrid ne se rafraichit pas instantanément. Je dois le fermer et le réouvrir pour que les bonnes valeurs apparaissent. Pourtant, au niveau du recordset la valeur est changée comme demandée.

    Avez-vous déja expérimenté un probleme de rafraichissement avec un flexgrid? Comment en êtes vous sortis??

    Merci

    Anikeh!

  2. #2
    Membre expérimenté
    Inscrit en
    Novembre 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 130
    Par défaut
    Salut anikeh

    Que veux-tu dire par:
    Je dois le fermer et le réouvrir pour que les bonnes valeurs apparaissent
    en parlant de ton flexgrid

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2005
    Messages : 218
    Par défaut
    Citation Envoyé par bouley
    Salut anikeh

    Que veux-tu dire par:
    Je dois le fermer et le réouvrir pour que les bonnes valeurs apparaissent
    en parlant de ton flexgrid

    je veux dire fermer le formulaire sur lequel le flexgrid est, puis le relancer. Les valeurs affichées dans le flexgrid sont alors les bonnes.

  4. #4
    Membre expérimenté
    Inscrit en
    Novembre 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 130
    Par défaut
    je viens de m'apercevoir que c'est du VBA access
    et la je ne connais pas
    en vba excel je ferai un repaint de mon formulaire ou userform plus exactement, regarde si cette propriété existe en access.
    @+

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2005
    Messages : 218
    Par défaut
    non repaint ne marche pas.

  6. #6
    Membre expérimenté
    Inscrit en
    Novembre 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 130
    Par défaut
    dis moi anikeh
    tu remplis ta flexgrid via la propriete textmatrix mais comment sais tu le nombre de lignes qu'il te faut ?
    Ou définis-tu le nombre de ligne ?
    Sinon un additem de chaque ligne de ton recordset suffirai !

    tu dis
    @+

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2005
    Messages : 218
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
                Do While Not rs.EOF 
     
                    For j = 0 To rs.Fields.Count - 1 
                        If Not IsNull(rs.Fields(j).Value) Then 
                            msflex.TextMatrix(i, j) = rs.Fields(j).Value 
                        End If 
                    Next 
     
                i = i + 1 
                rs.MoveNext
    Voici comment je remplis le flexgrid.
    je remplis tant que le curseur n'est pas sur le dernière ligne du recordset.

    La addItem si je voulais faire uniquement des insertions. Or je fais aussi des Mise à jour.

    J espere que ca repond à ta question parce que je l'ai pas entierement comprise.

  8. #8
    Membre expérimenté
    Inscrit en
    Novembre 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 130
    Par défaut
    A moins que je me trompe,
    tu fais un clear de ta flexgrid avant de la remplir donc tu la vide non ?
    tu ne fais pas q'une mise à jour !
    Donc en supprimant toutes les lignes et en les recréant par des additem
    je suis sur que serai plus rapide et ton problème de rafraichissement résolu.

    @+

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2005
    Messages : 218
    Par défaut
    tu as peut etre raison. Je teste ca et je te tiens au courant.
    Est ce que t'as la syntaxe du ADDitem?

  10. #10
    Membre expérimenté
    Inscrit en
    Novembre 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 130
    Par défaut
    voila pour toi,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msflex.additem rs.fields(0) & chr(9) & rs.fields(1)........& rs.fields(n)
    Bon courage
    @+

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2005
    Messages : 218
    Par défaut
    Je ne connais pas à lavance le nombre de colonne. Il est calculé dans la fonction. Je ne peux pas utliser le AddItem.

  12. #12
    Membre expérimenté
    Inscrit en
    Novembre 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 130
    Par défaut
    mais si

    tu construis ta ligne à ajouter de la même manière que tu rempli tes cellules

    AInserer = AInserer & rs.fields(j) & chr(9)
    si rs.fields(j) est null AInserer = AInserer & "" chr(9)
    à la fin tu suprimmes le chr(9) de trop par un left(AInserer ,Len(AInserer) - 1)
    @+

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2005
    Messages : 218
    Par défaut
    Désolé de ce temps de réponse.
    Je viens d'essayer la solution que tu as donné ( à savoir le AddItem). Mais cela ne change rien au problème, ma flexgrid ne se rafraichit toujours pas.

    Je me demande si cela n'a pas un rapport avec le tps de rafraichissement du recordset dont je me sers pour remplir la flexgrid.

    Si qq'un a une idée...

    Anikeh!

  14. #14
    Expert confirmé
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Par défaut
    et pourquoi ne pas utiliser tout simplement le Datasource de la Flexrid au lieu de se compliquer la vie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Set MSGrid1.DataSource = rs

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2005
    Messages : 218
    Par défaut
    Je vais essayer. Je ne connaissais pas. Je vous tiens au courant.

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2005
    Messages : 218
    Par défaut
    Ca ne marche pas. Je ne pense pas que le flexgrid puisse être ainsi rattaché a un recordset ADO.

  17. #17
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Oh ! ... Tu en es sur ?

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2005
    Messages : 218
    Par défaut
    Il me semble bien.
    Si tu peux me demontrer le contraire, je t en serais reconnaissant parce que je patine là dessus depuis un bout de temps...

  19. #19
    Expert confirmé
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Par défaut
    Utilise une MSHFlexgrid qui accepte les recordsets ADO sans soucis et qui très peu différente d'une MSFlexGrid quanq don l'utilse sur un seul niveau

    c'est ce que à quoi je pensais, dans mon dernier post

    Parce qu'en plus, on ne peut pas affecter le Datasource par le code dans une MSFlex

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2005
    Messages : 218
    Par défaut
    c'aurait été avec plaisir mais je dois jouer de malchance car je n'ai pas mshFlexgrid dans ma liste de composants.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [VBA]Supprimer le message de rafraichissement
    Par alsips dans le forum SDK
    Réponses: 7
    Dernier message: 04/01/2007, 13h42
  2. [VBA-E] Rafraichissement d'un graphe
    Par getea85 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 16/05/2006, 19h41
  3. Réponses: 1
    Dernier message: 26/04/2006, 12h01
  4. [VBA-E]rafraichissement d'une listbox
    Par bastien62200 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/02/2006, 13h27
  5. [VBA] [Excel] Probleme de rafraichissement d'un label
    Par lejert dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/11/2005, 17h09

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