Rapport de message :*
 

Re: faire une feulle de synthèse

Titre du sujet : Re: faire une feulle de synthèse
par JeanMarie le 24/03/2009 13:21:29

Bonjour Jean-Luc, Jean-Claude, le forum

Pour la création du Tableau croisé dynamique, je n'ai pas utilisé la première option qui retourne un message d'erreur (comme tu le disais) mais la troisième.

Plage de cellules indiquée : FAC!$A$3:$BF$133

Dans l'onglet "disposition", j'ai supprimé le champ "page" en le remplaçant par "colonne", en double cliquant dessus tu peux changer l'intitulé du titre et masquer les lignes des totaux.

Après avoir adapté les autres champs, tu obtiens le TCD voulu.

Pour masquer les lignes à zéro après changement d'un choix d'étquette, j'ai rajouté un code événementiel. Pour le visualiser dans le fichier, fait un clique droit sur l'onglet de la feuille, et "visualiser le code"

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
'Déclaration des variables
Dim vLig As Range
Dim vUnion As Range
'On remet toutes les lignes de la plage B5:B134 visibles 
Range("B5:B134").EntireRow.Hidden = False
'On attribut un objet range à la variable
'La cellule B134 est la cellule dont la valeur est vide,
'elle sera toujours masquée.
Set vUnion = Range("B134")
'Boucle sur l'objet range de la plage B5:B133
For Each vLig In Range("B5:B133")
   'Si la cellule contient la valeur 0, on rajoute cette cellule à une union de cellules

   If vLig.Value = 0 Then Set vUnion = Application.Union(vUnion, vLig)
Next vLig
'Après traitement de la boucle, on masque les lignes de la variable objet vUnion
vUnion.EntireRow.Hidden = True
End Sub

Jean-Claude, il n'y a pas que la fonction SOMMEPROD dans Excel.!, et puis
=SOMMEPROD((FAC!$A$8:$A$200=total!A6)*(FAC!$D$8:$BD$200/2))
en l'écrivant de cette manière (ci-dessous), on ne divise pas 193 valeurs par 2, mais une seule.
=SOMMEPROD((FAC!$A$8:$A$200=total!A6)*(FAC!$D$8:$BD$200))/2
Bonne journée

PS : j'ai rajouté des commentaires sur le code du post.
A noter que le fait de faire une "Union" de cellule permet de masquer en une seule opération les lignes à zéro.

Attention avec la méthode Application.Union, si la plage de l'union est trop grande, cela ne fonctionnera pas.

@+Jean-Marie