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 :

[AC-03] Synchroniser 2 form en l'absence d'index


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 681
    Par défaut [AC-03] Synchroniser 2 form en l'absence d'index
    Bonsoir,

    J'analyse par boucle tous les enregistrements de la table Tab1, pour détecter d'éventuelles anomalies de formattage ou d'orthographe de certains champs et pouvoir les corriger avant incorporation de Tab1 dans un fichier central.
    Lorsqu'une anomalie est détectée, un instantané Form2 de l'enregistrement est présenté à l'opérateur pour l'aider à remédier à l'anomalie. Le RecordSource de Form2 est donc la table Tab1.
    Voiçi le code en cause :
    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
    Set rst = MaBd.OpenRecordset(Tab1)
    with rst
      .MoveFirst
      Do While Not .EOF
         'Analyse de l'enregistrement
        If anomalie then 
          ident = .[Ind]
          DoCmd.OpenForm "Form2", acNormal, , "[Ind] = " & ident, acFormReadOnly, acWidowsNormal       Corr = InputBox("Entrer la correction retenue ")
          'Traitement de la correction 
          ...
          DoCmd.Close acForm, Forms(Form2), acSaveNo
        end if
        .MoveNext
      Loop
    end with
    .

    Mais lorsqu'il n'y a pas de champ indexé, comment peut-on faire pour afficher dans Form2 l'enregistrement actif ?

    Merci de l'aide
    Amitiés

  2. #2
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    salut AndréPe,

    excuse mon obscurantisme, pourrais tu reformuler:
    Citation Envoyé par AndréPe
    Mais lorsqu'il n'y a pas de champ indexé, comment peut-on faire pour afficher dans Form2 l'enregistrement actif ?
    concrètement comment ca se passe?

    perso j'alimenterais form2 avec:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from latable where anomalie
    avec un bouton corriger qui passera à l'enregistrement suivant en plus de la barre de défilement classique.


  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 681
    Par défaut
    Merci vodiem.
    Je précise : on passe en revue la table Tab1 pour voir si un champ texte contenant une date est correctement formatté (en particulier si les 4 derniers caractères sont bien des chiffres).
    Si le prg détecte une anomalie à l'enregistrement dont le champ Ind est ident, on affiche l'instantané de la tab1 correspondant à cet ident.

    Pour cela il faut qu'il n'y ait qu'un enregistrement correspondant à ident (clé primaire sur Ind).

    Si la table n'a pas de clé primaire (dans Tab1, c'est le champ Ind), comment faire pour repérer le bon enregistrement ?

    Autre précision : ce sont des tables de plusieurs dizaines de milliers de lignes qui,contiennent en général env 5 % d'erreurs et il est hors de question de faire cette opération manuellement.
    J'avais pensé utiliser la propriété Bookmark, mais je ne vois pas comment faire dans mon cas.
    A+

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 681
    Par défaut
    @vodiem
    Je m'aperçois que je n'ai pas répondu à ta suggestion
    perso j'alimenterais form2 avec:

    Code SQL :
    SELECT * FROM latable WHERE anomalie
    anomalie n'étant pas un champ, à quoi correspondrait le WHERE ?

    A+

  5. #5
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    désolé je ne vois pas ou se trouve le pb...
    ton code est assez explicite.

    et puisque form2 est alimenté par tab1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DoCmd.OpenForm "Form2", acNormal, , "[Ind] = " & ident, acFormReadOnly, acWidowsNormal
    Corr = InputBox("Entrer la correction retenue ")
    (Corr... doit se trouver sur une autre ligne sinon doit être séparé par ":")
    donc: la table qui contient la clé primaire <Ind> et alimente form2 contient bien cette clé...

    qu'elle est donc l'erreur?

    anomalie correspond à la condition que tu as mis ci-dessous:

  6. #6
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    D'après ce que j'en ai compris et s'il n'y a pas de champ (ou combinaison de champs) discriminant, je m'orienterais vers les bookmarks de l'objet Recordset ou alors la position (Recordcount) de l'enregistrement (à condition d'ouvrir rst en dynaset).

    N'aurait tu pas plutôt la possibilité de créer un champ NumAuto à la table en VBA (s'il n'existe pas) histoire d'être capable de naviguer tranquillement dans tes enregistrements ?

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

Discussions similaires

  1. [VI-2010] Synchronisation de formes
    Par Docserta dans le forum Visio
    Réponses: 0
    Dernier message: 23/01/2013, 15h07
  2. Réponses: 5
    Dernier message: 07/06/2011, 09h11
  3. Synchronisation .WAV et Form
    Par andreditdd dans le forum Delphi
    Réponses: 12
    Dernier message: 06/09/2007, 10h54
  4. synchroniser un sous-Form avec un form
    Par maverick91 dans le forum IHM
    Réponses: 1
    Dernier message: 29/11/2006, 10h29
  5. Réponses: 2
    Dernier message: 08/12/2005, 15h34

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