![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Membre habitué
![]() Date d'inscription: mars 2008
Messages: 150
|
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 (permalink) |
![]() |
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...
__________________
Pierre Fauconnier -------------------- "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire) Pensez au tag ![]() Mon blog sur DVP - Mes petits papiers sur DVP Je ne peux en aucun cas être tenu pour responsable des conséquences de l'utilisation des codes que je fournis dans le cadre des réponses apportées sur les forums, même s'il s'avérait que ces codes sont erronés ou amènent à des dysfonctionnements, de manière manifeste ou non. |
|
|
|
|
|
#3 (permalink) |
|
Membre habitué
![]() Date d'inscription: mars 2008
Messages: 150
|
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 (permalink) |
![]() |
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...
__________________
Pierre Fauconnier -------------------- "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire) Pensez au tag ![]() Mon blog sur DVP - Mes petits papiers sur DVP Je ne peux en aucun cas être tenu pour responsable des conséquences de l'utilisation des codes que je fournis dans le cadre des réponses apportées sur les forums, même s'il s'avérait que ces codes sont erronés ou amènent à des dysfonctionnements, de manière manifeste ou non. |
|
|
|
|
|
#6 (permalink) |
![]() Date d'inscription: février 2004
Localisation: Rimouski
Messages: 3 067
|
Heu... Au risque de dire une sottise... Est-ce que la fonction Sous-totaux du menu Données ne serait pas suffisante?
__________________
|
|
|
|
|
|
#7 (permalink) |
|
Membre habitué
![]() Date d'inscription: mars 2008
Messages: 150
|
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 (permalink) | |
![]() |
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: Citation:
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 :
Private Sub Worksheet_Activate() Me.PivotTables(1).RefreshTable End Sub [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]
__________________
Pierre Fauconnier -------------------- "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire) Pensez au tag ![]() Mon blog sur DVP - Mes petits papiers sur DVP Je ne peux en aucun cas être tenu pour responsable des conséquences de l'utilisation des codes que je fournis dans le cadre des réponses apportées sur les forums, même s'il s'avérait que ces codes sont erronés ou amènent à des dysfonctionnements, de manière manifeste ou non. |
|
|
|
|
|
|
#9 (permalink) |
![]() Date d'inscription: février 2004
Localisation: Rimouski
Messages: 3 067
|
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.
__________________
|
|
|
|
|
|
#10 (permalink) |
|
Membre habitué
![]() Date d'inscription: mars 2008
Messages: 150
|
Merci Pierre pour ton aide. en passant c'ext exactement ce que je fais au niveau de essabase. je recupere les donnes via msquery et la source de mon TCD est bel et bien la feuille genere par ce MSQUERY.à
si mon excel est en anglais, connaitrais tu la fonction decaler en anglais en anglais ? je cherche mais je trouve pas merci infiniment encore pour ton aide (jèessaie cela et je fais un suivi) |
|
|
|
|
|
#11 (permalink) |
![]() Date d'inscription: février 2004
Localisation: Rimouski
Messages: 3 067
|
Enregistre une macro dans laquelle tu utilise cette fonction. L'enregistreur la traduira pour toi.
__________________
|
|
|
|
|
|
#12 (permalink) |
|
Membre habitué
![]() Date d'inscription: mars 2008
Messages: 150
|
Merci enormement Pierre pour ton aide.. Je vais finalement rester avec les TCD. En suivant ton sonceil, je reussi a appeler la feuille nomme par ma requete MSQUERY sur mon TCD. et ca marches bien.
Merci infiniment et merci a toi aussi zazaraignee pour ton aide !
|
|
|
|
|
|
#13 (permalink) |
![]() |
DECALER = OFFSET
__________________
Pierre Fauconnier -------------------- "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire) Pensez au tag ![]() Mon blog sur DVP - Mes petits papiers sur DVP Je ne peux en aucun cas être tenu pour responsable des conséquences de l'utilisation des codes que je fournis dans le cadre des réponses apportées sur les forums, même s'il s'avérait que ces codes sont erronés ou amènent à des dysfonctionnements, de manière manifeste ou non. |
|
|
|
|
![]() |
![]() |
||
regroupement par cellule et somme
|
||
Offres d'
emploi informatique
sur Lesjeudis.com
|
| Outils de la discussion | |
|
|