Bannière
Home Les tableaux croisés Mettre à jour automatiquement un Tableau Croisé Dynamique
Note des utilisateurs: / 5
MauvaisTrès bien 
Les TDC

Le problème tic question

J'aimerai que mon tableau croisé dynamique se mette à jour automatiquement et simultanément ! Comment puis-je faire ?

La solution

Tout le monde connait les tableaux croisés dynamiques ? Si oui, on continue ! Pour ceux qui ne connaissent pas, je vous invite à lire cette première astuce qui est une brève introduction à la construction de ces tableaux très utiles.

Imaginons notre tableau de données suivant :

Tableau de données



Et nous voulons arriver à :

TDC que l'on doit obtenir



Si nous voulons créer notre tableau, nous allons passer par les différentes étapes suivantes :

Barre d'outils TDC



Nous allons arriver ici :

Etape 1 de la construction du TDC



Ensuite, il faut cliquer sur suivant, ça normalement, c’est facile et logique… smiley qui rit. Après, on sélectionne le tableau de données :

Etape selection des données



On clique sur suivant et enfin, le plus facile, on choisit où sera situé le tableau croisé dynamique.

tic OK
Il est plus facile de cliquer sur disposition pour choisir la place des champs dans le tableau plutôt que de les choisir une fois revenu dans Excel. Exemple, je clique sur disposition avant de cliquer sur terminer et j’obtiens :

Quand on clique sur disposition

Une fois ici, je fais glisser les champs dans mon tableau et je valide.

Et voilà, notre tableau est construit :

Résultat



Bon, là, le souci, comme tous tableaux croisés dynamiques, il faut cliquer sur le point d’exclamation de la barre d’outils pour le mettre à jour :

Barre d'outils TDC



De plus, si on ajoute des données, elles ne seront pas prises en compte, vous êtes d’accord ? si si, je vous assure, ajoutez des données à la ligne 18 et vous verrez que cette ligne ne sera pas prise en compte.

J’en vois certains déjà venir et dire :
- t’as qu’à juste sélectionner tes lignes entières comme ça elles seront prises en compte tes données, banane !!!
Remarque pertinente à laquelle je répondrais
- « Oui effectivement mais les données ne se mettent pas à jour, malgré tout, automatiquement ! »
- « Alors, tu nous expliques comment tu fais pour mettre à jour automatiquement tes tableaux croisés sans qu’on est à cliquer sur le point d’exclamation ?? »
- « Houlà petit newbie, calme toi, je vais tout t’expliquer. » smiley qui tire la langue

Pour cela, nous allons tout d’abord créer une zone nommée.

Une zone nommée, Kesako ?

Une zone nommée, sur Excel, est une cellule ou une plage de cellule que l’on a nommée expressément par un intitulé clair. Exemple, je peux sélectionner mon tableau de données et le nommer « DONNEES ».
Comme ceci :

1e methode pour créer une zone nommée



Ou comme cela :

2e methode pour créer une zone nommée



Dans les 2 cas, vous obtiendrez ceci :

Zone nommée dans Edition/nom/définir



En effet, le nom « DONNEES » fait bien référence à la table B2 :D17.

CriticalLe nom ne doit pas comporter d’espace. Si vous souhaitez mettre quelque chose du genre : « Tableau Données », Excel n’en voudra pas. Je vous conseille donc de mettre par exemple « Tableau_Donnees » ou « TableauDonnees ». De même, évitez les accents !



Là, encore une fois, vous allez me dire : « Ok, c’est bien, mais ma zone est figée encore une fois… »
Vous avez raison, nous ne sommes qu’à la moitié de l’astuce. Pour que cette zone soit dynamique, il faut mettre une formule à la place de mettre =Feuil1!$B$2 :$B$17

Notre formule, la voici :

=decaler(réf;lignes;colonnes;[hauteur];[largeur])

Nous allons l’associer à un




=NBVAL()

qui compte le nombre de ligne non vides. A partir de là, j’ai tout dit.

Nous allons construire cette fonction ensemble :
On commence par choisir la cellule référence :La première cellule du tableau, ici B2.

CriticalBien mettre les $, sinon, la formule risque de bouger et ça ne va pas fonctionner.




=DECALER(Feuil1!$B$2;lignes;colonnes;[hauteur];[largeur])

Ensuite, on peut choisir d’utiliser les arguments lignes et colonnes, mais moi, je préfère hauteur et largeur. Ma formule devient donc :



=DECALER(Feuil1!$B$2;;;[hauteur];[largeur])

La hauteur, c’est ce qui nous intéresse. C’est le plus important puisque notre tableau aura des lignes supplémentaires. C’est ici que la formule NBVAL() entre en jeu :



=DECALER(Feuil1!$B$2;;;NBVAL($B$2:$B$65000);[largeur])

Par cette formule, je compte le nombre de cellules non vides comprises entre B2 et B65000. Cette formule va me renvoyer un nombre. Dans notre exemple, le nombre renvoyé est 16. Cela signifie que nous décalons la hauteur du tableau de 16 lignes à partir de B2. Enfin, la largeur du tableau qui ne bouge pas, donc pas la peine de mettre un nbval(). A la place, on va mettre le nombre de colonnes présentes dans notre tableau, ici : 3.

=DECALER(Feuil1!$B$2;;;NBVAL($B$2:$B$65000);3)

Et voilà, votre zone est devenue dynamique.
Vous devriez obtenir ceci normalement:

Résultat à obtenir dans Edition/Nom/Définir



Revenons maintenant à notre TDC. A la place de mettre :

Etape selection des données



nous allons mettre le nom de la zone nommée créée précédemment :

Selection de la zone précédement créée



Ensuite, si le tableau croisé dynamique se trouve dans la même page, entrez ce code

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'Mise à jour du TDC
ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotCache.Refresh

End Sub

Ici, le tableau croisé dynamique s’appelle « Tableau croisé dynamique3 ». Pour connaitre le nom de votre TDC, placez-vous dessus, cliquez droit puis allez dans option. Là, vous pouvez visualiser le nom et différentes options de votre tableau.

Si le TDC est dans une feuille différente, alors entrez ce code dans la feuille où est situé le TDC

Private Sub Worksheet_Activate()

'Mise à jour du TDC
ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotCache.Refresh

End Sub

C’est le même code hormis la toute première ligne.
Fermez le VBA et ensuite testez ! Voilà, votre Tableau croisé dynamique est vraiment dynamique puisqu’il se met à jour simultanément.

- C’est bien beau, mais je le mets où ce code ?
Ah j’oubliais de vous préciser : Il ne faut pas coller ce code dans le classeur mais dans le VBA. Pour cela :

Ouvrir le VBA par le menu Outils/Macro/Visual Basic



Vous arrivez ici :

Environnement VBA



J’ai coupé un peu pour que ça rentre dans le site !
Etudions un peu ce nouvel environnement :

Environnement VBA



Dans le cadre rouge, vous avez le classeur sur lequel je travaille actuellement. Il se nomme "Classeur 1" et est composé de 3 feuilles nommées expressément feuil1, feuil2, feuil3 et également d’un module appelé ThisWorkbook. Pour ne pas vous embrouiller, je vais aller droit au but (pas comme Marseille…. smiley qui rit) Double-cliquez sur la feuille où est située votre TDC puis collez l’un des 2 codes ci-dessus selon la situation.
Fermez VBA.
Testez si ce n’est déjà fait !

Mis à jour (Vendredi, 04 Septembre 2009 07:07)

 

Commentaires  

 
0 # Bassaria 02-03-2010 11:00
merci pour ce cour sur le TCD merci infiniment.
il est excellent clair et précis
Répondre | Répondre en citant | Citer
 
 
+1 # UZZANU LAURENT 12-03-2010 23:32
Bonjour,

Je tiens à te remercier énormément pour ce cours magistrale et plein d'humour.
Grâce à ton savoir, tu m'as fait gagner un temps considérable pour la mise à jour automatique. SUPER et surtout ne change pas les gens comme toi deviennent très rares. Encore un grand merci et porte toi bien.
Laurent

PS: ALLEZ L'OM, je suis de MARSEILLE....
Répondre | Répondre en citant | Citer
 
 
0 # LeXav 25-03-2010 09:37
Bonjour,
Franchement un grand merci pour cette page très enrichissante ! Cela m'a débloquer d'une grande galère.
Bravo !
Répondre | Répondre en citant | Citer
 
 
0 # CISTOPHORE 25-05-2010 21:12
[quote name="UZZANU LAURENT"]Bonjour,

Merci pour ce cours magistral et plein d'humour.
Grâce à ton savoir, tu m'as fait gagner un temps considérable pour la mise à jour automatique.
Meilleures salutations
Répondre | Répondre en citant | Citer
 
 
0 # slydes 16-06-2010 08:46
Génial !!
Merci pour cette aide précieuse/
Le top du top : Je voudrais réaliser la même chose mais une base de données situées sur un autre fichier excel (fichier de données xls séparé du fichier des tcd)... est ce que votre astuce est adaptable à ce cas ?
Je n'ai pas réussi à faire reconnaitre ma "zone nommée" depuis mon fichier de données sur mon tcd situé sur un autre fichier...

merci pour votre aide dans tous les cas !
Répondre | Répondre en citant | Citer
 

Ajouter un Commentaire


Code de sécurité
Rafraîchir