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 et VBA Excel Discussion :

macro pour mise en forme de données


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 39
    Par défaut macro pour mise en forme de données
    Bonjour les développeurs,

    Dans le cadre de mon projet professionnel, je vous sollicite car j'ai besoin de votre aide et précieux conseils. Voici le problème qui m'occupe depuis une semaine :

    - Dans un meme repertoire, j'ai plusieurs classeurs .csv contenant chacun une seule feuille de données. La feuille 1 de chaque classeur est composée d'une colonne A2:A357 contenant des noms de groupes et d'une ligne B1:B1337 contenant des noms d'ouvrages. Pour chaque couple groupe-ouvrage correspond une valeur numérique. Dis autrement, j'ai 475972 valeurs numériques dans la feuille 1 du classeur A.

    - Dans chaque classeur les données sont organisées de façon non identique.
    En effet, le classeur A (exemple simplifié en pièce jointe) possède des lignes et des colonnes qui sont ordonnancés différemment du classeur B.
    De plus, certaines données du classeur A sont absentes du classeur B et réciproquement.

    L'objectif n°1 : créer un classeur de synthèse qui répertorie tous les groupes et ouvrages des 100 classeurs. C'est à dire avoir sur le classeur de synthèse un ordonnancement exhaustif de l'intégralité des groupes (colonne A2) et ouvrages (ligne B1).

    L'objectif n°2 : Une fois que la structure exhaustive du classeur de synthèse obtenue, il s'agirait de calculer une moyenne (sur les 100 classeurs) pour chaque couple groupe-ouvrage.
    ( moyenne qui ne prend pas en compte les zéros)

    J'ai réussi à atteindre ces deux objectifs tout d'abord en créant la structure du classeur synthèse à la main ( copier coller les colonnes A2 et ligne B1 des 100 classeurs et supprimer les doublons et classer par ordre alphabétique). Puis en utilisant la formule suivante, je transforme chacun de mes classeurs de façon à les standardiser (même structure des données) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SIERREUR(INDIRECT("AA!"&ADRESSE(EQUIV($A2;AA!$A:$A;0);EQUIV(B$1;AA!$1:$1;0)));"")
    Une fois cette étape préliminaire faite, je me retrouve avec 100 classeurs identiques en termes d'ordonnancement des groupes et ouvrages. Ainsi, je peux créer une feuille de synthèse MOYENNE qui va calculer la moyenne sur la centaine de classeurs.

    Là ou ca bloque, c'est qu'initialement je travaillais avec des classeurs de taille raisonnable ( 10000 valeurs). Ma fonction de "standardisation" fonctionnait plutôt bien et assez rapidement.
    A présent je traite des fichiers contenant 400000 valeurs. Dis autrement, le temps de calcul est beaucoup plus long et il arrive fréquemment des bugs...


    Je suis actuellement en recherche active d'informations sur les forums, de bouts de code à adapter ou autre. Je ne sais pas quelle stratégie adopter, si une macro serait plus adaptée qu'un tableau croisé dynamique.
    Je ne suis pas la à attendre qu'un code tout cuit me tombe dans la bouche. Mes connaissances en vba sont plutôt limitées, je suis prêt et motivé à faire le taff
    Si vous avez des conseils à me donner ou des suggestions je suis preneur.


    Cheers,
    Ryan
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par ryan.ighilahriz Voir le message
    classeurs .csv contenant chacun une seule feuille de données.
    C'est un pléonasme car un fichier CSV ne peut pas contenir plus d'une feuille.

    une ligne B1:B1337
    Je pense qu'il y a une erreur dans cette donnée.

    L'objectif n°1 : créer un classeur de synthèse qui répertorie tous les groupes et ouvrages des 100 classeurs. C'est à dire avoir sur le classeur de synthèse un ordonnancement exhaustif de l'intégralité des groupes (colonne A2) et ouvrages (ligne B1).
    Brutalement, tu ouvres un classeur vierge.
    Dans la première colonne, tu copies toutes les colonnes A de tous les fichiers CSV.
    Dans la seconde colonne, tu copies toutes les ligne 1 (par transposée pour les transformer en colonne) de tous les fichiers CSV.
    Une fois que tu as ça, tu fais un bon gros RemoveDuplicate sur chacune de ces colonnes (attention, pas les deux en même temps).
    https://msdn.microsoft.com/fr-fr/lib...3(v=office.15)
    Tu récupères ainsi toutes les références de tes fichiers sources.
    Tu fais ensuite une copie transposée de la colonne B pour la placer en ligne 1 et le tour est joué.

    L'objectif n°2 : Une fois que la structure exhaustive du classeur de synthèse obtenue, il s'agirait de calculer une moyenne (sur les 100 classeurs) pour chaque couple groupe-ouvrage.
    ( moyenne qui ne prend pas en compte les zéros)
    Dans ta macro, tu crées deux tableaux de variables de type Double dont la taille correspond au tableau obtenu ci-dessus.
    Tu scrutes tous tes fichiers sources.
    Pour chacun, dans l'un des tableaux de variables, tu additionnes les valeurs correspondant au couple et dans l'autre, tu ajoutes +1 pour chaque valeur additionnée du couple.

    Une fois que c'est fait pour tous les tableaux, tu places dans les cellules de la feuille Excel, le rapport entre les deux tableaux de variables (somme/nombre) pour chaque couple, ce qui te donnera la moyenne.

    si une macro serait plus adaptée qu'un tableau croisé dynamique.
    Je doute qu'un TCD te permette de traiter une structure à deux dimensions comme la tienne.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 39
    Par défaut
    Merci pour les indications !
    Objectif n°1 atteint.
    Je ferme cette discussion et ouvre une seconde pour l'objectif n°2.

    Cordialement,

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

Discussions similaires

  1. [XL-2010] Macro pour mise en forme dans nouvelle feuille de lignes selectionnées
    Par leflohic dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/04/2015, 19h00
  2. Première macro en autonomie pour la mise en forme de données
    Par Caroline_Débutante dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/01/2015, 10h38
  3. Macro pour remise en forme de données
    Par Mawax dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 04/06/2013, 14h21
  4. Réponses: 1
    Dernier message: 20/04/2009, 15h26
  5. macro pour mise en forme conditionnelle
    Par dodo28 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/03/2009, 20h21

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