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 :

regroupement par cellule et somme


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 257
    Par défaut regroupement par cellule et somme
    Bonjour,

    J'ai une feuille excel qui contient 4 colonnes et plusieurs lignes. Je souhaite a l'aide d'une macro regrouper plusieurs ligne (qui ont la meme valeur dans la colonne A) et addtionner les autres colonnes sur la meme ligne pour n'obtenir qu'a la fin une seule ligne avec la valeur de colonne A et la valeur de la colonne B et C additionné.

    Exemple, voici ce que j'ai au depart :

    Projet/Cout/Amortissement/Type
    projetA/25$/14$/F
    projetA/35$/-32$/F
    projetB/15$/25$/F
    projetC/54$/15$/D
    projetC/12$/10$/D


    J'aimerais avoir ceci :

    Projet/Cout/Amortissement/Type
    projetA/60$/-18$/F
    projetB/15$/25$/F
    projetC/68$/25$/D

    Je reussi a regrouper les colonnes mais je n'arrive pas a afficher une seul valeur pur le meme projet et la somme des autres.

    Votre aide est grandement apprécié. Merci !

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Y a-t-il une raison particulière à le faire en VBA? Ou est-ce simplement parce que tu ne vois pas d'autre solution?

    Car sans VBA, les Tableaux Croisés Dynamiques (TCD) sont l'outil idéal d'Excel pour ce genre d'analyse...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 257
    Par défaut
    Oui, tu as bien raison mais en ce moment il sont en tableau croisés dynamiques et le but est d'éviter le tableau croisée dynamique (l'usager a de la difficulté a mettre a jour son tableau croisé dynamique a chaque fois que les données générés dans la feuille augmente). Il est obligé manuellement de changer la plage de son tableau croisé dynamique pour tenir compte des nouvelles lignes ajouter dans la feuille qui recupère les donéées de la base.

    Par ailleurs, le but est aussi de pouvoir mieux manipuler ce fichier pour d'autres besoins et à l'aide des macros, je trouve cela beaucoup plus flexible a modifier ou ajouter des nouvelles fonctionnalités.

    Qu'en penses tu ? Merci

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Je pense qu'il y a une solution pour chaque cas...

    Si la plage source du TCD augmente, il peut être utile de nommer la plage en la référençant avec la fonction DECALER()...

    Une simple macro de mise à jour du TCD à l'activation de la feuille qui le supporte affiche les nouvelles données dans le TCD

    Cela me semble plus simple que de tenter de "réinventer la roue" via une macro...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 257
    Par défaut
    comment utiliser la fonction decaler ? effectivement, si cela fonctionne, c'est deja un grand pas

    Merci

  6. #6
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Heu... Au risque de dire une sottise... Est-ce que la fonction Sous-totaux du menu Données ne serait pas suffisante?

  7. #7
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 257
    Par défaut
    salut,

    je comprends pas ton point zazaraignée. Je desire simplement pouvoir mettre a jour le tableau croisse dynamique automatiquement lorsqu'il y a des ajouts dans la feuille qui recupere les données de la base (base essbase en passant)

    Si parxemple, ya des nouveaux projets ajoutés, ben que le tableau croisse en tienne compte automatiquement apres une mise a jour.

    Voila pourquoi je demande comment faire la macro de mise a jour (decaler) proposé par Pierre Fauconnier.

    Merci

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    En fait, DECALER() renvoie une plage de cellules. L'intérêt est que ses paramètres peuvent être dynamiques et donc modifiés en fonction de la configuration de la feuille



    Syntaxe:
    DECALER(RéfOrigine;LignesDecalage;ColonnesDecalage;[NbreLignes];[NbreColonnes])
    Traduction pour l'exemple illustré.

    On par de A1 et on décale de 0 lignes et de 0 colonnes pour définir le coin supérieur gauche de la plage renvoyée par DECALER (soit A1). On définit le nombre de lignes en comptant le nombre de valeurs saisies en A et le nombre de colonnes en comptant le nombre d'intitulés placés en ligne 1.

    Cela sous-entend qu'il ne faut rien d'autre que le tableau sur la feuille. Il y a moyen de s'affranchir de ces contraintes dans certaines limites, mais cela devient plus complexe.
    On mentionne la plage nommé en source du TCD à la deuxième étape de la création...

    Après, pour autant qu'à chaque nouvelle saisie, il y ait une valeur en colonne A, la plage va grandir toute seule. De même, si tu ajoutes un champ en colonne E, la plage va s'étendre sur la droite et à la prochaine mise à jour du TCD, tu disposeras du nouveau champ.

    Pour mettre le TCD à jour à l'activation de la feuille qui le supporte (je pars du principe que tu n'as que le TCD sur la feuille)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Activate()
        Me.PivotTables(1).RefreshTable
    End Sub
    dans le module de la feuille.

    [EDIT] Comme tu parles de données essbase, je suppose qu'elles sont externes. Ne peux-tu pas alors appuyer directement ton TCD sur les données externes (Etape 1, choisir Données externes).

    Autre chose: Si tu récupères les données essbase via MSQuery, Excel créé automatiquement une plage nommée qui grandira à chaque mise à jour et qui peut servir de source au TCD à l'étape 2 de l'assistant... Tu peux d'ailleurs renommer cette plage via clic droit puis propriétés sur une des cellules de résultat de MSQuery...
    [/EDIT]
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Je me demandais simplement si les sous-totaux n'étaient pas plus simple à utiliser qu'un TCD. Mais vu que la présentation finale diffère totalement (sans vouloir faire de mauvais jeux de mots) de celle du TCD, finalement, ma proposition ne tient pas vraiment debout.

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

Discussions similaires

  1. [VxiR2] Calcul somme regroupée par région
    Par lolymeupy dans le forum Webi
    Réponses: 9
    Dernier message: 20/05/2015, 13h16
  2. Somme de temps regroupés par nom
    Par Jonathan Raucy dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/08/2008, 08h39
  3. Réponses: 5
    Dernier message: 29/09/2004, 11h05
  4. [DB2]Requête regroupement par intervals
    Par sm dans le forum DB2
    Réponses: 8
    Dernier message: 01/09/2004, 17h19
  5. Regroupement par mois
    Par fplanglois dans le forum SQL
    Réponses: 7
    Dernier message: 29/07/2003, 16h32

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