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 :

[Débutant] filtrage spécial à effectuer


Sujet :

Access

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 48
    Points : 53
    Points
    53
    Par défaut [Débutant] filtrage spécial à effectuer
    Bonjour, je me suis récemment mis à Access, car je dois analyser des fichiers de données trop gros pour Excel (600 000 lignes).

    Je maîtrise très bien Excel, mais pas vraiment Access (je maîtrise à peu près les relations entre les tables etc. mais ce n'est pas du tout le problème qui m'intéresse, puisque je cherche simplement à manipuler beaucoup de données de manière automatique) : j'ai l'impression que ce que je veux faire nécessite d'écrire du VBA (non accessible par les requètes classiques), mais je n'arrive pas du tout à rentrer dans le VBA car il n'y a pas l'option "Enregistrer une macro", que j'utilise d'habitude quand j'ai des doutes, et en plus je n'ai pas non plus l'option "traduire la macro en VBA" donc je suis bien dans la m....


    En fait, j'ai un tableau de quelques colonnes dont je ne veux conserver qu'un certain nombre de lignes : Pour chaque couple "Colonne A" "Colonne B" distinct, je dois sélectionner un enregistrement, celui qui a la date dans la "Colonne C" la plus récente.

    Je voudrais ensuite coller ces enregistrements dans une nouvelle table qui, je l'espère, rentrera dans Excel mon copain.

    En gros, je n'arrive à rien faire, je ne vois pas du tout comment en VBA (ni même en utilisant les macros disponibles) aller chercher les données dans la première table pour les coller dans la deuxième.

    Je ne connais pas du tout les règles d'adressage dans Access, et même en cherchant une petite heure dans les FAQ et les tutoriaux, je n'ai rien trouvé qui se rapporte à mon cas.

    Sans vous demander de m'expliquer tout ce que je dois faire (parce que j'aime bien comprendre quand même), je voudrais bien avoir quelques indices sur les chapitres à lire sur ce site. Je sais que ce que je veux faire n'est pas du tout adapté à Access, mais je ne connais rien d'autre qui permette de manipuler des entrées si nombreuses.


    Je vous remercie beaucoup de m'avoir lu, et si vous êtes passés directement à cette ligne sans me lire c'est pas bien.


    Magemax qui fait des analyses statistiques des données de Betfair.com

  2. #2
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello et bienvenue sur le forum,

    ton cas peut selon moi se régler par une requête ... comprenant 3 colonnes (à faire en mode interfacé qu'on appelle QBE)

    . crée une nouvelle requête
    . ajoute la table à ta requête
    . fait glisser les trois champs A, B et la date
    . passe la requête en mode regroupement (signe Sigma dans la barre . d'outils)
    . met Regroupement sur les 2 champs A et B (la ligne Opération)
    . met Min sur le champ date ...

    ça devrait passer

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 48
    Points : 53
    Points
    53
    Par défaut
    Merci beaucoup, mais j'ai encore un problème, car j'ai mal exprimé mon besoin :

    A chaque couple "Colonne 1" "Colonne 2", correspondent un certain nombre d'enregistrements. Parmi tous ceux là, un seul m'intéresse : celui dont la "Colonne 3" est maximum (la date la plus récente).

    Mais cet enregistrement là, j'ai besoin de l'avoir en entier, c'est à dire d'avoir aussi le contenu des autres colonnes correspondant à l'enregistrement dont la colonne 3 est maximum.


    Or, j'ai l'impression que l'opération "max" (qui si j'ai bien compris va prendre le maximum de toutes les valeurs de la colonne dans les cellules regroupées) n'est pas vraiment faite pour aller rechercher les valeurs des autres colonnes pour cet enregistrement précis.

    J'ai voulu utiliser l'opération "Premier" (ou "Dernier"), mais ca prend alors les lignes dans l'ordre d'importation, et non pas dans l'ordre de la colonne 3, ce qui m'intéresserait (même si je trie la table préalablement.) Par ailleurs je ne peux définir la colonne 3 comme clé primaire (pour cause de doublons), et impossible donc de faire en sorte que "Premier" s'applique à la première date dans l'ordre chronologique.

    Peut être l'opération "où" pourrait être utile, si je lui dis d'aller sélectionner la Colonne 4 de l'enregistrement où la Colonne 3 est maximale, mais j'ignore comment elle fonctionne, et c'est pas facile de chercher "où" dans la faq

    Sinon, il me suffirait de me débrouiller pour classer le tableau par colonne 3, afin de pouvoir appliquer "Premier" à la colonne 4, mais ca aussi je sais pas faire, et puis en plus ca sent un peu le bricolage, et je sens qu'il doit y avoir un moyen plus facile.

    A part ca, troisième possibilité, je pense m'en sortir si j'arrive à faire une fonction du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    function MonTableauFinalQueJeGalèreBienAFaire(Tableau 1 as Table) as Table
     
    Classer mon tableau par Colonne 3 décroissante
    Initialiser un Tableau2 contenant le même nombre de colonnes
     
    for i=1 to NbLignesTableau1
        if pour tout j Tableau1(i,1) <> Tableau2(j,1) or Tableau1(i,2) <> Tableau2(j,2)
        then rajouter la ligne i du Tableau1 dans le Tableau2
    Next i 
     
    MonTableauFinalQueJeGalèreBienAFaire = Tableau2
    End Function



    J'aurais aucun problème à faire un truc comme ca sous Excel, mais je sais vraiment pas si c'est possible sous Access, et je ne connais pas du tout la syntaxe à employer. C'est ce genre de fonction que je préfèrerais utiliser, car elle me permettrait sans trop de problème de faire ca pour les 12 fichiers de 600 000 lignes chacun, de les mettre dans 12 jolies feuilles Excel, car ca tiendra après ce premier filtre, et de ne plus jamais vous embêter

    Si quelqu'un pouvait m'éclairer sur le moyen le plus normal de régler mon problème, et me donner un lien (où les termes de recherche à employer) qui pourrait me permettre de réaliser cette sélection de données, ca m'aiderait pas mal.

    Merci

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 366
    Points : 23 834
    Points
    23 834
    Par défaut
    à priori, si j'ai bien compris, une simple union de tes deux tables 1 et 2 devrait donner le résultat attendu.

    Donc en mode création de requète puis en mode SQL (Le bouton en haut et à gauche avec la flèche à côté) tu tape

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Select * from table1
    union
    Select * from table 2
    Cela va faire une union et te donner tous les éléments qui sont uniques dans les deux tables 1 et 2.

    A+

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 366
    Points : 23 834
    Points
    23 834
    Par défaut
    à priori, si j'ai bien compris, une simple union de tes deux tables 1 et 2 devrait donner le résultat attendu.

    Donc en mode création de requète puis en mode SQL (Le bouton en haut et à gauche avec la flèche à côté) tu tape

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Select * from table1
    union
    Select * from table 2;
    Cela va faire une union et te donner tous les éléments qui sont uniques dans les deux tables 1 et 2.

    A+

  6. #6
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 48
    Points : 53
    Points
    53
    Par défaut
    Non non, c'est pas une union que je cherche à faire, laissez moi vous précisez mon problème



    J'ai un fichier contenant les données sur 600 000 paris effectués sur le site betfair.com

    Chaque ligne agrège les paris effectués qui ont ces trois caractéristiques communes : même évènement (event), même pari sur cet évènement (selection), même cote (odds).

    Pour ma part, je souhaiterais avoir la liste des derniers paris effectués. Je peux faire ça à partir d'une colonne où figure l'heure du dernier pari pris (LatestTaken).

    Mon but est donc de sélectionner, pour tout couple (event;selection), l'enregistrement auquel le dernier correspond, c'est-à-dire celui où la colonne LatestTaken est maximale. Une fois cet enregistrement sélectionné, je l'enregistre dans une nouvelle table, qui à la fin de la procédure contiendra la liste des cotes correspondant aux derniers paris pris.


    Je suis sûr que ca doit être simple, mais c'est dur de se débrouiller sans le vocabulaire propre à Access

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 366
    Points : 23 834
    Points
    23 834
    Par défaut
    Ok, je pense que j'ai compris.

    Tu vas procéder ainsi :

    1) tu fais une requète qui contient event;selection;LatestTaken

    2) Tu appuis sur le bouton Sigma (le 3 à l'envers) et tu choisi pour la colonne date max

    3) Ca va te donner pour tous les couples event;selection la date max donc celle du dernier paris.

    4) Si tu as besoin, tu fais un nouvelle requète qui reprends ta table des paris et tu la lie avec ta requète DateMax sur event;selection;LatestTaken pour récupérer d'autre info dont tu aurais besoin.

    A+

Discussions similaires

  1. [débutante] filtrage de graphe
    Par karmaki dans le forum Débuter
    Réponses: 5
    Dernier message: 02/08/2009, 07h21
  2. [Débutant] Filtrage personnalisé
    Par Blobette dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/03/2008, 11h49
  3. Réponses: 5
    Dernier message: 27/02/2007, 11h43
  4. [débutant] pistes pour un filtrage de Strings
    Par frett dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 27/08/2006, 15h59
  5. [Débutant] Effectuer une opération
    Par zsoh dans le forum Assembleur
    Réponses: 3
    Dernier message: 11/01/2006, 22h34

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