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

Access Discussion :

Probleme de rafraichissement d'un formulaire continu [AC-2003]


Sujet :

Access

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 157
    Points : 81
    Points
    81
    Par défaut Probleme de rafraichissement d'un formulaire continu
    Bonjour,

    J'ai une fois de plus une question tordue,... bon je me lance.

    Dans un application, j'ai un formulaire continu qui contient pas mal de ligne, les utilisateurs ne peuvent pas modifier directement dans ce formulaire, il passent par un petit form popup qui s'ouvre avec un double click sur le champ a modifier.
    Sur clic d'un bouton dans le popup le champ à modifier dans mon formulaire (d'origine) se met à jour sans problème grâce au 'requery' le problème est que requery 'rafraichi' tout le formulaire et renvoi le focus sur le premier champ de la première ligne; c'est gênant pour l'utilisateur qui modifie la 1418 éme ligne et qui après modif est bon pour retrouver sa ligne si il a d'autre chose à y modifier.

    Bref je cherche un moyen pour remettre le focus idéalement sur le champ sur lequel il a fait un double clic ou au pire sur la ligne concernée.

    Je pensais à un truc du genre gotorecord ... mais je vois pas trop.

    QQ a-t-il une idée ?

    Merci

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonsoir,

    J'imagine que tu appelles l'enregistrement correspondant du formulaire pop-up avec un Id.
    Il faut le mettre dans un variable global.
    A la réception du focus du formulaire appelant, ou à son activation, il faut lancer la procédure pour retrouver l'Id en variable global, ce serait du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms![F_Appelant].Recordset.FindFirst "[Id]=" & IdVarGlobal
    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 157
    Points : 81
    Points
    81
    Par défaut
    Merci pour cette réponse, j'essaye tout de suite

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 157
    Points : 81
    Points
    81
    Par défaut
    Salut,

    Naturellement je reçois une erreur '91 : Variable objet ou variable de bloc with non définie' !!

    J'ai mis le code juste après le 'requery'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form_F10_Vue_Tab.Recordset.FindFirst "[Cle]=" & Me.CLE
    Je n'ai pas with / end with dans ce code ...

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Le problème du FindRecord c'est qu'il déplace le curseur d'affichage et fait remonter l'enregistrement en haut de la fenêtre des enregistrements affichés.

    Dans une des mes applis où le formulaire continu est un sous-formulaire j'ai trouvé par hazard que :

    mettait à jour les enregistrements du sous-formulaire SANS déplacer le curseur dans le sous-formulaire. Donc l'enregistrement actuellement sélectionné le reste et il reste à sa place courrante dans l'écran.

    Apparement le recalc ne touche pas l'affichage ni la sélection.

    Peut-être que cela marchera aussi dans ton cas.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 157
    Points : 81
    Points
    81
    Par défaut
    Hélas ça ne donne rien

    J'ai essayé une combinaison de refresh, recalc, repaint ... mais pas de résultat, le focus reste bien sur la ligne voulue (c'est déjà ça ) mais il n'y a que le requery qui modifie l'affichage des données du formulaire.

    J'ai essayé un truc du genre :

    Le_form_continu.requery

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with form_Le_form_continu
    .DoCmd.FindRecord ma_cle
    end with
    mais il me renvoi une erreur de compilation : Methode or data member not found

    ....

  7. #7
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Une piste peut-être du coté de RecorsetClone et BookMark

    Ce qui te permet de marquer l'enregistrement choisi et d'y retourner ensuite
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  8. #8
    Membre chevronné Avatar de Renardo
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 648
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 648
    Points : 2 019
    Points
    2 019
    Par défaut
    Bonjour
    as tu essayé

  9. #9
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 003
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 003
    Points : 30 910
    Points
    30 910
    Billets dans le blog
    16
    Par défaut
    Bonsoir,

    Pour ma part, j’utilise aussi un sous-formulaire que l’utilisateur n’a pas le droit de modifier, mais il a quand même le droit de cliquer sur une ligne de ce sous-formulaire : je joue donc avec l’événement MouseUp pour savoir quelle est la ligne sur laquelle il a cliqué, ce que je mémorise dans la propriété Tag du sous-formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Form_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single) 
    ...
    Me.Tag = Me.CurrentRecord
    ...
    End Sub
    Ce qui est ballot, c’est que l’événement Current a priorité sur MouseUp, il faut donc que celui-ci ne vienne pas ficher la patouille. A cet effet, je code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Form_Current()
    ...
    If Me.Form.Visible = True Then
        If Me.CurrentRecord > 1 Then  
            DoCmd.GoToRecord , , acGoTo, Me.CurrentRecord
        Else
            DoCmd.GoToRecord , , acGoTo, Me.Tag
        End If
    End If
    ...
    End Sub
    Où j’ai pris soin de m’assurer que le sous-formulaire est visible pour opérer, sinon ACCESS rouspète.


    Au chargement du sous-formulaire, j’initialise Me.Tag, car il peut se passer pas mal de choses entre Load et Current, pouvant là aussi ficher la zoubia :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Private Sub Form_Load()
    ...
    Me.Tag = 1
    ...
    End Sub
    Reste le problème de l’accès au tout 1er enregistrement, car avec mon système, juste retour des choses ! il est inaccessible... Mais on trouvera bien un moyen d’y arriver...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  10. #10
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 003
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 003
    Points : 30 910
    Points
    30 910
    Billets dans le blog
    16
    Par défaut
    Bonsoir,

    A propos de l’accès à la 1re ligne :
    Pour que cet accès soit rendu possible, j’ajoute au sous-formulaire un contrôle de type label, que je nomme MouseActivee (persistance oblige), ce qui permet de vérifier si l’accès à cette ligne est la conséquence d’un clic.

    Le code évolue ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Form_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single) 
    ...
    Me.Tag = Me.CurrentRecord
    DoCmd.GoToRecord , , acGoTo, Me.Tag
    Me.MouseActivee.Caption = "oui"
    ...
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Form_Current()
    ...
    If Me.Form.Visible = True Then
        If Me.CurrentRecord > 1 Or Me.MouseActivee.Caption = "oui" Then
            DoCmd.GoToRecord , , acGoTo, Me.CurrentRecord
            Me.MouseActivee.Caption = "non"
        Else
            DoCmd.GoToRecord , , acGoTo, Me.Tag
        End If
    End If
    ...
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Private Sub Form_Load()
    ...
    Me.Tag = 1
    Me.MouseActivee.Caption = "non"
    ...
    End Sub
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 157
    Points : 81
    Points
    81
    Par défaut
    Eureka,

    Ca y est j'ai trouvé, J'ai placé ce code sur le bouton de fermeture du formulaire 'POP_UP'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     Dim rst As DAO.Recordset
     Dim Critere As String
     
    Critere = "[cle] like '" & Me.ref_cle & "'"
     
     Set rst = Formulaire_liste.RecordsetClone
     rst.FindFirst Critere
     
    Formulaire_liste.Bookmark = rst.Bookmark
     
     Set rst = Nothing
     
     DoCmd.Close acForm, "Formulaire_POP_UP"
    Merci à tous mais surtout à Jeannot45 qui m'a mi sur la piste

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

Discussions similaires

  1. [AC-2010] Rafraichissement listes filtrées dans un formulaire continu
    Par sardaucar dans le forum IHM
    Réponses: 1
    Dernier message: 25/11/2013, 12h06
  2. [FLTK] Probleme de rafraichissement continu
    Par kitsune dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 12/11/2008, 12h16
  3. probleme de rafraichissement de formulaire
    Par doogybreton dans le forum IHM
    Réponses: 2
    Dernier message: 22/01/2008, 23h03
  4. Probleme de rafraichissement d'un BDGrid
    Par marmotte dans le forum Bases de données
    Réponses: 10
    Dernier message: 28/05/2004, 18h07
  5. Figer colonnes dans formulaire continu
    Par Mr.Gus dans le forum IHM
    Réponses: 10
    Dernier message: 30/11/2003, 13h59

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