Automatiser un tableau sous excel grâce à une macro

Résolu/Fermé
jacinthelafleur Messages postés 88 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 7 octobre 2013 - 11 févr. 2013 à 20:21
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 - 22 mai 2013 à 22:10
Bonjour à tous,

je suis vraiment débutante en macro et j'aimerais s'il vous plaît que vous m'aidiez.

J'aimerais à partir des différentes feuilles "rubis", "tulipe", "hortensia", "lilas", "orchidée", "hibiscus","iris" , "marguerite", "mimosa", "tournesol", "baobab", "ravioli", "riz", "grenadine" (voir le fichier ci joint https://www.cjoint.com/?0BkwGLRQeuE ) , créer une macro me permettant d'avoir comme résultat le tableau présent sur la feuille" base de travail" du fichier ci-joint.

Le résultat que j'aimerais obtenir est le suivant:

1) à chaque fois que je rajoute de nouvelles feuilles tout en renseignant les colonnes "Code ISIN", "Libellé", "Acquisition","DEV","Valo Bours dev","Val Bours. €", "+/- value YTD" "dont Perf YTD " (présentes à la fois sur les feuilles que j'aurai rajouter et sur la feuille "base de travail" ), que ma macro me permettent d'actualiser, automatiquement la feuille "base de travail" tout en renseignant uniquement les colonnes énoncées ci-dessus.

2) grâce à la macro que j'aurai créer, que la colonne "entité" de la feuille "base de travail" de mon fichier ci-joint soit renseignée automatiquement par les noms des différentes feuilles.
Par exemple on retrouve dans la colonne "entité", "rubis" le nom de l'une des feuilles.

Comment faire s'il vous plait? Merci d'avance pour votre réponse.

Mes salutations.

jacinthelafleur
A voir également:

31 réponses

Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
22 avril 2013 à 23:03
Bonjour,
Dans la procédure remplacer
La ligne :
refcol = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 27, 28, 32, 33)
Par :
refcol = Array(1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 28, 29, 33, 34)


0
jacinthelafleur Messages postés 88 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 7 octobre 2013 1
23 avril 2013 à 19:20
Bonjour,
j'ai effectué toutes les modifications à priori tout marche bien.
Merci beaucoup pour votre aide précieuse.
Pour le TCD je reviendrai vers vous si je m'aperçois que je rencontre des difficultés.
Encore merci beaucoup

Jacinthelafleur
0
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
23 avril 2013 à 21:43
Bonjour,
Merci.
Concernant le TCD, j'ai oublié de mentionner une modification, regardez bien dans le fichier exemple la plage de données de la feuille [Base de travail] est nommée [dataTCD] et fait référence à :
=DECALER('Base de travail'!$A$3:$P$3;;;NBVAL('Base de travail'!$A:$A))
de ce fait dans le nom de cette plage [dataTCD] est utilisée comme source de données du TCD.
C'est ce qui permet d'avoir automatiquement les bonnes données et d'éviter une procédure pour le TCD.

0
jacinthelafleur Messages postés 88 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 7 octobre 2013 1
24 avril 2013 à 10:12
Bonjour,
j'ai effectué toutes les modifications mais je rencontre un problème au niveau de mon TCD;
Lorsque je fais tourner ma macro, j'ai un message d'erreur souligné en jaune qui apparait :
Sheets("mon_TCD_CI").PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
je ne sais pas où est ce que j'ai pu faire une erreur.

Bien cordialement
jacinthelafleur
0
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
24 avril 2013 à 21:40
Bonjour,
Je suppose que votre TCD à un autre nom que celui de l'exemple, dans ce cas une solution, dans la ligne de code, vous remplacez l'ancien nom [Tableau croisé dynamique1] par le nouveau.

0
jacinthelafleur Messages postés 88 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 7 octobre 2013 1
9 mai 2013 à 00:18
bonsoir,

merci beaucoup pour votre aide précieuse.

J'aurai quelques dernières questions à vous poser SVP.

Voici le lien de mon fichier que j'ai simplifié au maximum.

1) https://www.cjoint.com/?0EjaooFhSK2
2) https://www.cjoint.com/?0Ejaric0Rhn

1) Sur ma feuille " Base de travail" j'aimerai rajouter deux nouvelles colonnes:
- colonne " O" nommée " Prov. € " qui correspond à la colonne "AK" de mes autres feuilles " un, deux, trois et quatre"
- colonne "P" nommée " Valo Bours.€ ( y compris prov.€) qui correspondrait à la somme entre la colonne "AK" de chaque feuille et la colonne "AD" => colonne "P"= colonne"AK" + colonne "AD"

Ma question est-il possible s'il vous plaît de modifier ma macro de telle sorte qu'elle puisse permettre de renseigner aussi ces deux colonnes supplémentaires de la feuille base de travail grâce aux données des autres feuilles?
Pour la colonne "P" nommée " Valo Bours.€ ( y compris prov.€) qui sera nouvellement créée sur la feuille "Base de travail" est-il possible s'il vous plaît de créer une macro qui permet grâce aux feuilles (un, deux, trois et quatre), de faire automatiquement la somme (colonne"AK" + colonne "AD") sur chacune des feuilles (un, deux, trois et quatre) et de renseigner "la colonne P" de la base de travail?

2) enfin est-il possible de créer une macro qui pour une feuille précise par exemple la feuille "un" de supprimer les lignes 4 et 8 dont le Code ISIN est respectivement " XXXXXXX1" et "XXXXXXX2" et dont le libellé est respectivement " TULIPE VERT", "TULIPE ROUGE" avant de pouvoir </gras>renseigner les colonnes de la feuille " Base de travail"?

Merci d'avance pour votre aide et n'hésitez pas à me poser des questions si je n'ai pas été assez claire dans mes explications.

Bien cordialement
Jacinthelafleur
0
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
10 mai 2013 à 17:23
Bonjour,

Concernant :
Question :
1) Sur ma feuille " Base de travail" j'aimerai rajouter deux nouvelles colonnes:
- colonne " O" nommée " Prov. € " qui correspond à la colonne "AK" de mes autres feuilles " un, deux, trois et quatre"
- colonne "P" nommée " Valo Bours.€ ( y compris prov.€) qui correspondrait à la somme entre la colonne "AK" de chaque feuille et la colonne "AD" => colonne "P"= colonne"AK" + colonne "AD"
Ma question est-il possible s'il vous plaît de modifier ma macro de telle sorte qu'elle puisse permettre de renseigner aussi ces deux colonnes supplémentaires de la feuille base de travail grâce aux données des autres feuilles?


Réponse : c'est réalisé. Merci de tenir compte du commentaire sur la feuille.

Question :
2) enfin est-il possible de créer une macro qui pour une feuille précise par exemple la feuille "un" de supprimer les lignes 4 et 8 dont le Code ISIN est respectivement " XXXXXXX1" et "XXXXXXX2" et dont le libellé est respectivement " TULIPE VERT", "TULIPE ROUGE" avant de pouvoir </gras>renseigner les colonnes de la feuille " Base de travail"?

Réponse :Bien sûr que c'est possible, mais là je vous laisse le soin de créer la procédure. Je vous conseille, selon les cas, de mettre en ordre vos feuilles de données en utilisant l'outil [Filtrer].

Votre fichier avec 2 commentaires : https://www.cjoint.com/?3Ekrsb46q4U

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jacinthelafleur Messages postés 88 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 7 octobre 2013 1
15 mai 2013 à 10:48
Bonjour,
merci beaucoup pour votre réponse et votre aide.
Mais lorque j'applique tout ce que vous m'avez dit, ma macro ne marche pas j'ai un message d'erreur qui apparait en jaune le voici :
Sheets("mon_TCD_CI").PivotTables("TCD_01").PivotCache.Refresh
où est ce que j'ai pu faire une erreur? S'il vous plaît?
Merci pour votre réponse.
0
jacinthelafleur Messages postés 88 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 7 octobre 2013 1
15 mai 2013 à 10:58
re bonjour,
j'ai trouvé mon erreur quant à ma question cf 37, donc ne pas tenir compte de ma question.
je reviendrai vers vous car j'ai deux autres questions

Bien cordialement
jacinthelafleur
0
jacinthelafleur Messages postés 88 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 7 octobre 2013 1
15 mai 2013 à 12:46
re bonjour,
Lors de la construction de mon fichier, je me suis rendu compte que :
- 1) lorsqu'il n'y a pas de TCD sur mon fichier ( feuille "mon_TCD_CI") et que je fais tourner la macro, un message d'erreur apparaît. Ce qui est normal.
- 2) et lorque je construis mon TCD et introduis la feuille " mon_TCD_CI", tout fonctionne bien.

J'aimerai savoir comment s'il vous plaît introduire une condition pour le TCD (feuille " mon_TCD_CI") c'est à dire dire si feuille "mon_TCD_CI" présente dans mon fichier alors actualisation du TCD qui se trouve sur la feuille "mon_TCD_CI" à l'aide du code suivant :Sheets("mon_TCD_CI").PivotTables("Tableau croisé dynamique1").PivotCache.Refresh

sinon rien (c'est à dire juste actualisation de la feuille "Base de travail" avec les données des autres feuilles comme la macro la toujours fait).

L'objectif est qu'il n'y ait pas de message d'erreur lorsque je n'ai pas encore mis la feuille "mon_TCD_CI" et que je fais tourner la macro car dans mon fichier, j'ai crée un bouton actualiser qui fait référence à la macro ( action 1 et action 2)

N'hésitez pas à me dire si je n'ai pas été assez claire.

Bien cordialement.

Jacinthelafleur
0
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
15 mai 2013 à 21:38
Bonjour,
Oui avec VBA, mais il serait bien d'avoir plus de détails sur ce que vous voulez réaliser.... !
Bonjour,
Ci-dessous le code adapté :

Dim refcol As Variant, shtcd As Boolean
Dim sh As Object
Dim c As Integer, deliba As Long, deli As Long, nbsh As Integer
shtcd = False
Application.ScreenUpdating = False
Rows("4:" & Cells(Rows.Count, 1).End(xlUp).Row + 1).ClearContents
refcol = Array(2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 29, 30, 34, 35, 37)
For Each sh In Worksheets
    If sh.Name = "mon_TCD_CI" Then
        shtcd = True
    ElseIf sh.Name <> "Base de travail" And Right(sh.Name, 3) <> "_CI" Then
        deliba = Cells(Rows.Count, 2).End(xlUp).Row + 1
        deli = Sheets(sh.Name).Cells(Rows.Count, 2).End(xlUp).Row
        Range("A" & deliba) = sh.Name
        If deli - 4 > 0 Then
        Range("A" & deliba).AutoFill Destination:=Range("A" & deliba & ":A" & deliba + deli - 4)
        End If
        For c = 0 To UBound(refcol)
            Range(Cells(deliba, 2 + c), Cells(deliba + deli - 4, 2 + c)) = Sheets(sh.Name).Range("A4:A" & deli).Offset(0, refcol(c) - 1).Value
        Next c
        nbsh = nbsh + 1
    End If
Next sh
' en [R] somme [N]+[Q] {{Valo Bours.€( y compris prov.€)}}
deliba = Cells(Rows.Count, 2).End(xlUp).Row
For c = 4 To deliba
    If Not IsError(Cells(c, 14)) And Not IsError(Cells(c, 17)) Then
        Cells(c, 18) = Cells(c, 14) + Cells(c, 17)
    End If
Next c
Range("miajo") = Date
Application.ScreenUpdating = True
If shtcd Then
    Sheets("mon_TCD_CI").PivotTables("TCD_01").PivotCache.Refresh
End If
MsgBox " Les données des " & nbsh & " feuilles sont extraites."


0
jacinthelafleur Messages postés 88 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 7 octobre 2013 1
16 mai 2013 à 10:23
Bonjour,
lorsque j'applique le code que vous m'avez donné sur mon fichier, et je fais tourner la macro,
un message d'erreur apparait : instruction incorrecte à l'extérieur d'une procédure et sur la ligne shtcda=False False est souligné en bleu....
S'il vous plaît où se trouve mon erreur?
Voulez-vous que je vous envoie le fichier en pièce jointe? Peut-être que cela serait plus facile de me comprendre. Merci d'avance
Bien à vous
Jacinthelafleur
0
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
16 mai 2013 à 11:10
Bonjour,
Ayant testé le code avant de vous le transmettre je suppose une petite erreur de copie.
Votre fichier en dira plus.


0
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
17 mai 2013 à 10:20
Bonjour,
Je viens de voir l'erreur, la variable correct est [shtcd] et non pas [shtcda]

0
jacinthelafleur Messages postés 88 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 7 octobre 2013 1
17 mai 2013 à 10:42
Bonjour,
merci pour la réponse!!!!
en fait j'avais aussi oublié de mettre Sub () et End Sub dans ma procédure c'est pour ça que cela ne marchait pas!! et la ça marche.... Merci beaucoup.
Par contre je vous reviendrai vers vous aujourd'hui car j'ai un autre soucis, j'aurais une autre question.
Bien à vous
jacinthelafleur
0
jacinthelafleur Messages postés 88 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 7 octobre 2013 1
22 mai 2013 à 09:33
Bonjour,
encore merci pour les réponses précédentes. Je reviens vers vous car j'aurai encore une question.
Voici le lien du fichier que j'ai crée avec des données fictives :
https://www.cjoint.com/?0EwbctUtA9Y

- Nous sommes au mois de Mai
La feuille « mon_TCD_CI » => correspond au TCD du mois de Mai (mois M)
La feuille « TCD_ avril_CI » => correspond au TCD du mois d'avril (mois M-1)
La feuille « TCD_rappro_CI » => correspond au TCD du mois de Mai (mois M) et TCD du mois d'avril (mois M-1)
- une fois le TCD actualisée (feuille « mon_TCD_CI »), j'aimerai modifier le code de la macro de telles sortes qu'elle puisse me permettre de créer automatiquement le TCD qui se trouve sur la feuille « TCD_rappro_CI » (en guise d'exemple) à partir du TCD qui se trouve sur la feuille « mon_TCD_CI » et celui de TCD_avril_CI.-
Quelles sont les modifications à apporter sur s'il vous plaît sur ma macro?

De façon générale « mon_TCD_CI » représente le TCD du mois en cours.
- le TCD_avril_CI correspond au TCD du mois en cours -1
- TCD_ rappro_CI correspond au TCD du mois en cours + TCD du mois en cours -1.
En se situant au mois de Mai, une fois que « mon_TCD_CI » qui correspond au TCD du mois en cours est actualisée, j'aimerais que la macro puisse créer automatiquement le TCD de la feuille « TCD_rappro_CI » à partir du TCD_avril_CI et du TCD du mois en cours « mon_TCD_CI ».
- Sachant qu'à chaque fin de mois, je tiens compte du TCD du mois passé.
- Par exemple : au mois de mai, « mon_TCD_CI » correspond au TCD du mois de mai et « mon_TCD_ avril_CI » correspond au mois d'avril.

Par exemple au mois de juin, « mon_TCD_CI » qui correspondait au TCD du mois de mai, sera renommé « mon_TCD_mai_CI » et « mon_TCD_CI » correspondra au mois en cours c'est-à-dire juin et en actualisant la macro doit pouvoir permettre de créer un « TCD_rappro_CI » grâce aux feuilles « mon_TCD_CI » et « mon _TCD_mai » et sur la feuille « TCD_rappro_CI » au lieu de total mai, total avril et variation M/M-1 qui correspond à la variation mai/avril, on aura total juin, total mai, variation M/M-1 qui correspond à la variation juin/mai.
Pour le mois de juillet, je vais renommer « mon_TCD_CI » en « mon_TCD_juin_CI » et faire les mêmes manipulations énoncées ci-dessus et ceux chaque fin de mois.

Merci d'avance pour votre réponse et n'hésitez pas à me dire si je ne suis pas claire.

Bien à vous
Jacinthelafleur
0
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
22 mai 2013 à 10:37
Bonjour,
Remarque, si vous désirez le TCD du mois en cours et le précédent vous devez impérativement avoir dans la feuille [Base de travail] les données de ces 2 mois, en plus il faut un élément qui permette de déterminer les mois.
Je ne trouve aucune date (mois) pour le réaliser.... Pas de suite.

0
jacinthelafleur Messages postés 88 Date d'inscription mercredi 19 décembre 2012 Statut Membre Dernière intervention 7 octobre 2013 1
22 mai 2013 à 14:04
bonjour,
donc si je comprends bien sur la feuille "Base de travail", il faut à la fois les données du mois en cours et du précédent?
"il faut un élément qui permette de déterminer les mois" je n'ai pas compris ce que vous voulez dire....

Mais si par exemple chaque fin de mois, dans mon fichier, j'insère manuellement la feuille TCD_avril_CI, qui représente le TCD du mois précédent, est ce que l'on peut créer une macro qui, dans la feuille TCD_rappro_CI, réunie le TCD qui se trouve sur la feuille mon TCD_CI et uniquement la colonne "total" du TCD qui se trouve sur la feuille TCD_AVRIL_CI tout en prenant soin de laisser un espace (une colonne F) entre les 2 ( c'est à dire mon_TCD_CI et colonne "total du TCD se trouvant sur la feuille TCD_avril_CI).

Et une fois le rapprochement effectué entre le TCD de la feuille mon_TCD_CI et le "total" du TCD de la feuille TCD_AVRIL_CI, il faudrait que la macro puisse sur toute la colonne H faire automatiquement le calcul E6- G6 ce qui permettrait le calcul de la variation entre le total du TCD de la feuille mon_TCD_CI et celui de feuille TCD_avril_CI sur la feuille TCD_rappro_CI.

Merci d'avance pour votre réponse
jacinthelafleur
0
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
22 mai 2013 à 14:23
Bonjour,
Non et non, le TCD est alimenté par les valeurs de la base des données, si elles ne sont pas présentes plus de TCD sera vide.
Ce n'est pas un problème de macro, il est impératif que les données des 2 mois soient présentes dans le classeur et qu'il soit possible de les filtrer sur le mois.
De ce fait il suffit de donner la référence, des bases de données, respective à chacun vos TCD.

0
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
22 mai 2013 à 22:10
Bonjour,
Je vais vous faire un exemple mais il faut que vous me mettez à disposition un classeur avec des valeurs convenables pour que je n'ai plus de #N/A dans les totaux des TCD y compris les feuilles [UN], [DEUX]... c'est vraiment désagréable de devoir travailler de cette manière.

0