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

Macros Access Discussion :

Regroupement de données avec ajout de colonnes


Sujet :

Macros Access

  1. #1
    Candidat au Club
    Homme Profil pro
    Analyste Pricing
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyste Pricing
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Regroupement de données avec ajout de colonnes
    Bonjour,

    Je suis nouveau sur Access et Microsoft office en générale. Je fait appel a vous car ça fait une semaine que je cherche a automatiser le traitement de données que j'ai l'habitude de faire sous excel avec des formules.

    Je vais essayer d'être le plus claire possible, mais comme je débute n'hésitez pas a me reprendre.

    les données a traiter, sont importez de puis excel, environ 30K lignes avec des références d'articles liés a d'autres articles (des compositions), dont voici le format sous excel :

    Ref parent qté enfant ref enfant
    111111 2 666666
    111111 1 999999
    222222 1 888888
    333333 4 999999
    333333 2 555555
    333333 2 123456
    444555 2 123456

    Après import dans access avec doublons indexées et clé primaire on retrouve avec une table :


    ID Ref parent qté enfant ref enfant
    1 111111 2 666666
    2 111111 1 999999
    3 222222 1 888888
    4 333333 4 999999
    5 333333 2 555555
    6 333333 2 123456
    7 444555 2 123456

    Le resultat que je souhaite obtenir est :

    Ref parent qte enfant 1 ref enfant 1 qte enfant 2 ref enfant 2 qte enfant 3 ref enfant 3
    111111 2 666666 1 999999
    222222 1 888888
    333333 4 999999 2 555555 2 123456
    444555 2 123456

    En sachant que le nombre d'enfants est variable, mais que plus de 80% des références parents on un seul enfant. Pour les 20 % restants ils peuvent atteindre plus de 300 références enfants.

    La table de base sous excel est mise a jour 2 fois par mois. Le but de cette démarche est de me simplifier le traitement de mes extractions. De base j'ai une base de données avec plus de 300K références et je me suis fait une macro sous excel qui lance une requête access pour me récupérer des informations fournisseurs sur une liste donner, mais je continu de traiter les compostions a la main, et je trouve cela une perte de temps.

    Est que se que je veux faire est possible, ou avez vous de meilleurs idées pour traiter ces compositions, vous avez beaucoup plus d’expérience que moi dans ce domaine et j’espère que vous pouvez m'aider.

    Je reste dans l'attente de vos réponses, bonne journée.

    P.S. J’espère avoir été claire, si vous comprenez pas hésitez pas a me demander plus d'informations.

  2. #2
    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
    Bonjour.

    Ce que tu demandes n'est pas possible avec les outils standards de Access.
    En règle général Access a de la misère à créer des tableaux en 2 dimensions.
    La solution la plus simple : faire un tableau croisé dynamique dans Excel à partir des données de Access.

    La solution nettement moins simple mais 100% Access est peut-être une combinaison de requêtes d'analyse croisées dynamique puis de requêtes de sélection.
    Une requête d'analyse croisée dynamique qui va te donner les nombres d'enfants par parent (utilise l'assistant pour créer cette requête) (reqNbEnfant).
    Une requête d'analyse croisée dynamique qui va te donner les ref d'enfants par parent (utilise l'assistant pour créer cette requête) (reqRefEnfant).
    Une requête de sélection qui va mettre en jointrure :
    1. La liste des parents.
    2. reqNbEnfant
    3. reqRefEnfant


    en relation sur la référence parent.

    Et il faut changer le type de la jointure en cliquant avec le bouton droit sur le trait, choisir propriété, et ensuite Tous les enregistrements de parent et ceux qui correspondent dans reqNbEnfant.
    Même chose pour reqRefEnfant.

    ET il faut t'assurer que les requêtes croisées dynamiques retournent toujours toutes les colonnes en définissant la propriété entête dans ces requêtes.

    Bref c'est compliqué et cela reste fragile, si tu te rates avec les entêtes (ou si tu en as une nouvelle), ça va briser.
    Les Tableaux croisés dynamiques de Excel font cela très bien sans soucis majeur.

    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.

  3. #3
    Candidat au Club
    Homme Profil pro
    Analyste Pricing
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyste Pricing
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Merci, pour votre réponse, je vais essayer aujourd'hui.
    Mais je pense qu'il faut que je trouve une autre méthode pour gérer ces compositions.

    Bonne journée.

  4. #4
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Question : est-ce une nomenclature à un seul niveau ? dans ce cas c'est relativement simple à traiter avec ACCESS

    sinon un enfant peut lui-même être parent, alors c'est une nomenclature à combien de niveaux ? : et les vraies questions commencent

    CDLT
    "Always look at the bright side of life." Monty Python.

  5. #5
    Candidat au Club
    Homme Profil pro
    Analyste Pricing
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyste Pricing
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bonjour micniv,

    Dans la théorie un enfant ne peut pas être parent, quand c'est le cas c'est une erreur d'encodage de l'article. En revanche un enfant peut avoir plusieurs parents et y être présent sous différentes quantités.

    J’espère avoir été compréhensible.

  6. #6
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Dans ce cas, ce n'est pas compliqué.
    Et j'adopterais la 1 ère solution exposée par Marot_r
    Tu as tes données dans ta table ACCESS (ref parent, qte enfant, ref enfant)
    En automatique par VBA, tu exportes cette table (ou seulement la partie désiré) dans Excel et tu crées le tableau croisé dynamique avec le format souhaité.

    CDLT
    "Always look at the bright side of life." Monty Python.

  7. #7
    Candidat au Club
    Homme Profil pro
    Analyste Pricing
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyste Pricing
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Merci à vous de votre aide, je viens de tester avec un tableau dynamique et le résultat, n'est pas super concluant, car je n'arrive pas à reprendre les infos, comme je le souhaite après.

    Je pense que le mieux est que je vous expliquer tout le processus pour que vous ayez une idée plus globale de ce que je veux faire.


    Je suis Analyste Pricing et je fais souvent des tableurs Excel pour travailler les prix, d'une famille de produits, pour des clients en particulier ou autres. Pour faire cela on me donne une liste de références à travailler, qui peut varier de quelques dizaines à des milliers de références (pour le moment le plus gros dossier +30K références à traiter). Pour faire les prix de ventes il me faut évidement les prix d'achat. À ma disposition un fichier Excel avec toutes les références qui sont créées (environ 350K), avec toutes les informations achats de notre groupe, car on est basés dans plusieurs pays. Comme on fait des achats interco, et que l'on me demande de faire des prix pour la France, je dois aller chercher les infos achats de UK, si on achète là-bas. La méthode que l'on m'a montré pour récupérer toutes ces infos, était des rechercheV sous Excel, en filtrant, et modifiant les plages de recherche. Une méthode qui demandait beaucoup trop de temps à mon avis. J'ai donc créé une base de données sous Access, ou j'ai fait des requêtes pour avoir un tableau final, group_price_fr, et avec une macro sous Excel je lance une requête Excel pour récupérer les infos sur les références que je dois travailler.

    Là tout fonctionne bien, le seul problème que j'ai maintenant ce sont les compositions, qui ont toujours le même numéro fournisseur, donc faciles à isoler. J'ai un autre fichier Excel où toutes les compositions sont répertoriées sous la forme du tableau que vous ai donné plus haut.

    Ref parent qté enfant ref enfant
    111111 2 666666
    111111 1 999999
    222222 1 888888
    333333 4 999999
    333333 2 555555
    333333 2 123456
    444555 2 123456

    Le but étant que sur ma requête faite depuis Excel, j'ai le même résultat que actuellement, mais que quand le fournisseur est "987555" (exemple), j'ai le vrai prix d'achat FR de la composition, et accessoirement un autre tableau sous la forme :

    Ref parent qte enfant 1 ref enfant 1 qte enfant 2 ref enfant 2 qte enfant 3 ref enfant 3
    111111 2 666666 1 999999
    222222 1 888888
    333333 4 999999 2 555555 2 123456
    444555 2 123456

    ou une autre forme, sur une autre feuille du classeur. La méthode que j'utilise actuellement sous Excel, est de filtrer par numéro fournisseur, et effectuer des INDEX en matricielle pour récupérer les quantités et références des enfants et des rechercheV pour les infos fournisseur, très long à traiter :/

    J’espère que vous avez une meilleur vu d'ensemble de mon projet, et si vous trouvez que ma méthode est bancale, n'hésitez pas a me le dire. Car j'ai commencer avec Access il y a à peine 2 semaines et Excel 3 mois. Je travaillais sur les applications Google avant que l'on me propose ce poste, mais vu la quantité de données que je dois traiter maintenant ce n'est plus possible.

    Merci encore de votre aide, je reste à l'écoute.

    Bonne journée.

  8. #8
    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
    Bonjour.

    Si tu ne tiens pas absolument à la présentation en tableau, tu peux utiliser les états et sous-états ou les fonctions de groupage/tri des états de Access pour présenter tes données en colonne avec des regroupements successifs.
    Le problème de cette solution est que les états ne sont pas "dynamiques". Si tu veux changer l'ordre des regroupements, il faut faire un nouvel état ou modifier celui que tu as déjà.

    Pour les tableaux croisés, tu mets en ligne les parents et en colonne les enfants et les références côte à côte et cela devrait te donner ton tableau initial.

    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.

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/08/2012, 17h08
  2. [XL-2003] transfert de plusieurs lignes en une seule avec ajout des colonnes
    Par ghatfan99 dans le forum Excel
    Réponses: 0
    Dernier message: 10/08/2011, 20h33
  3. Réponses: 5
    Dernier message: 16/06/2006, 22h39
  4. problème ajout données avec db.execute et access
    Par Dauphind dans le forum Access
    Réponses: 2
    Dernier message: 29/11/2005, 12h03

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