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 :

ETAT : n'afficher que les données non vides


Sujet :

IHM

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut ETAT : n'afficher que les données non vides
    Bonjur à tous,
    Je vous fais part d'un problème que je rencontre sur un état. Voilà, grâce aux membres du forum, j'ai pû avancer sur ma base mais je rencontre un soucis que les états.
    J'ai une base qui compare pour chaque fournisseur les champs qui on été modifié (d'un jour sur l'autre). J'ai donc une TableJ et une TableJ-1.
    Avec du code VBA et l'aide de certains membres, j'ai pu réalisé la fonction de comparaison qui me crée une table en sortie qui me reprend tous les champs de la tableJ et me liste par fournisseur chaque champ modifié (un champs modifié sera donc par défaut non vide). J'ai 36 champs qui sont comparés, par conséquent j'aimerai créer un état en y indiquant que les champs qui ont été modifiés et en rappelant le champ du jour précédent (TableJ-1).
    Par ex, si le champ RIB a été modifié pour le fournisseur F10000, alors n'afficher dans l'état que le champs RIB de la tableJ et le champs RIB de la tableJ-1.
    Pour le fournisseur F10001, le champ Adress a été modifié, alors n'afficher dans l'état que le champs Adress de la tableJ et le champs Adress de la tableJ-1.
    etc, etc...
    Y a-il une façon simple de le faire ? ou faut-il utiliser du VBA?

    D'avance merci pour votre aide (en espérant avoir été clair)

    Nass

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    325
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 325
    Points : 207
    Points
    207
    Par défaut
    bonjour,

    Je suis pas sure d'avoir tout suivit.
    essaye en mettant dans les propriétés de tes champs "auto-réductible"

  3. #3
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Je ne sais pas comment tu as construit ta table résultante de la comparaison, mais tout est dans la manière de contruire cette table.

    Apparement tu as créé une seule table avec 36 champs, ce n'est d'après moi pas le bon choix.

    A ta place j'aurais créé une table de cette forme :

    IDFournisseur : long
    NomDuChamp : string
    AncienneValeur :string (en transtypant les valeurs numériques et date en string)
    NouvelleValeur : string (idem dessus)

    Et lors de la procédure de comparaison, je n'aurais enregistré dans cette table que les champs qui auraient subi un changement, ansi ton état n'aurait pas se préoccuper de savoir si modif il y a eu ou pas.

  4. #4
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Re-bonsoir,

    En fait les 2 tables comparé ont chacune 36 champs et chaque champ est comparé. par ex :
    TableJ: (celle du jour)
    NumFour: F10000
    NomFour: LAbo DURAND
    Date_création: 01/10/2002
    Adress: 3 rue des jacobins
    CP: 69002
    etc... etc....(sur les 36 champs)

    TableJ-1 (celle de veille)
    NumFour: F10000
    NomFour: LAbo DURAND
    Date_création: 01/10/2002
    Adress: 18 rue des jacobins
    CP: 69002
    etc... etc....(sur les 36 champs)

    J'ai un code qui me compare les 2 tables et qui me crée en sortie un table Résultat :
    NumFour: F10000
    NomFour:
    Date_création:
    Adress: 3 rue des jacobins
    CP:
    etc... etc....(sur les 36 champs)

    donc lors de la création d'un état, les modifications d'un fournisseur à un autre, ne seront pas les mêmes. J'aimerai n'afficher que les champs modifiés + rappel du champ Table-1
    Dans l'état j'aimerai avoir par ex :
    NumFour: F10000
    Adress nouvelle (tableJ): 18 rue des jacobins
    Ancienne adress (TableJ-1) : 3 rue des jacobins

    Et le suivant pourrait être un champs différent qui a été modifié.

    J'esère avoir été plus précis et merci pour votre aide.

    Nass

  5. #5
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    J'avais bien compris le besoin, qui était parfaitement expliqué des le début.

    Donc je reste sur l'idée qu'il faut auparavant stocker le résultat de la comparaison des 2 tables dans une table résutalt qui a la forme indiqué precedemment et baser l'état sur cette table résultat.

  6. #6
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    J'ai essayé de mettre en pratique ce que DelphiManiac a proposé.
    Voici le code que j'ai créé à partir du code de ma comparaison des 2 tables.
    Ici je prends le résultat de la table créer (TableResultat) et vient la comparer avec celle de TableJ-1 (Data2)
    Dans la TableResultat, j'ai ajouté un champ qui me permet de savoir si pour 1 fournisseur il y a eu au moins un changement.

    Voici ce que j'ai fait :

    Requête Result_B qui fait :
    Lien entre la tableResultat (TableResultat) et TableJ-1 (Data2) sur le code fournisseur en filtrant sur le champ Nbre <>0 (je n'ai que les fournisseurs qui ont été modifiés)

    Ensuite j'ai fait :

    requète Result_A qui prend tous les champs de la tableResultat et tu la relie à Result_Bsur le code fournisseur
    requète Result_C qui prend tous les champs de la tableJm1 et tu la relie à Result_B sur le code fournisseur

    Comme cela j'ai les enr qui sont communs aux deux tables

    J'ai ensuite créer une table TableETAT avec les champs suivant :
    IDFournisseur
    NomDuChamp
    AncienneValeur
    NouvelleValeur
    pour y mettre le résultat de mon code VBA :


    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
    Private Sub TableEtat()
     
    Dim db As Database: Set db = CurrentDb
     
    Dim rJ As Recordset: Set rJ = db.OpenRecordset("Result_A")
    Dim rJm1 As Recordset: Set rJm1 = db.OpenRecordset("Result_C")
    Dim rResult As Recordset: Set rResult = db.OpenRecordset("TableETAT")
    Dim f As Field
     
     
        Do While Not rJ.EOF
     
                If rJ![NCPT] <> rJm1![NCPT] Then
                 Error (5): 'Juste une sécurité durant le débugage, ça ne doit jamais se produire.
                End If
     
     
                        For Each f In rJ.Fields
     
     
                            If IsNull(f.Value) = False Then
     
                            rResult.AddNew
                            rResult![IdFourn] = rJ![NCPT]
                            Debug.Print "Champ " & f; Name & " ds rJ : " & f.Value, " ds rJm1 : "; rJm1.Fields(f.Name).Value
     
                            rResult![NomduChamp] = f.Name
                            rResult![AncienneValeur] = rJm1.Fields(f.Name).Value
                            rResult![NouvelleValeur] = f.Value
                            End If
     
     
                        Next f
     
     
           rResult.Update
           rJ.MoveNext
           rJm1.MoveNext
        Loop
     
    rJm1.Close: Set rJm1 = Nothing
    rJ.Close: Set rJ = Nothing
    rResult.Close: Set rResult = Nothing
    db.Close: Set db = Nothing
     
    End Sub
    Le problème c'est que pour 1 fournisseur donné, il ne me garde que le dernier champ modifié au lieu de les cumuler.

    Ou ai-je fait une erreur,

    Merci pour votre aide

  7. #7
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Le " rResult.Update" est en dehors de la boucle, donc il n'écrit qu'une fois, la dernière différence trouvé, par fournisseur.

  8. #8
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Ok, çà marche !!!!

    Merci DelphiManiac.

    Nass

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

Discussions similaires

  1. [XL-2003] combobox doit afficher que les cellules non vides
    Par mikadoo57 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/04/2012, 14h30
  2. [XL-2003] Inserer que les cellules non vides
    Par makila64 dans le forum Excel
    Réponses: 4
    Dernier message: 06/03/2012, 14h52
  3. Réponses: 4
    Dernier message: 05/08/2011, 17h19
  4. Réponses: 2
    Dernier message: 30/03/2009, 13h13
  5. [MySQL] N'afficher que les fichiers du serveur Ftp insérés dans la base de données
    Par jack_1981 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 03/08/2006, 19h41

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