Calcul nombre de ligne par date sur un tcd
Bonjour,
J'aurai besoin d'une macro pour calculer le nombre de ligne par article sur un tcd (c'est pour le travail mais ça fait 2 semaines que je me torture et je n'arrive pas à trouver de formules...).
Le TCD est très long (plus de 20000 lignes), c'est pourquoi j'aurai certainement besoin d'une macro...
Je mets un exemple en pièce jointe car c'est un peu difficile à expliquer...
Le TCD indique la date à laquelle la commande est passée, la date à laquelle la commande doit être livrée, l'article concerné et les différentes divisions.
Du coup, le tcd indique le nombre d'articles passées (il peut y avoir 1 commande par division, donc plusieurs commande la même semaine et pour la même date de livraison).
Moi, j'ai besoin de calculer le nombre de commande que l'on aurait pu passer. (C'est à dire qu'au lieu de passer une commande pour chaque division, on aurait pu passer 1 seule commande multidivision.) Pour ensuite faire le rapport...
Il y a 2 solutions:
Je peux mettre une petite formule lui disant que s'il trouve le mot "total", il ne mets rien dans la cette cellule sinon il mets des 1 (du coup, j'aurai bien une liste de 1 par article quelque soit le nombre de commande passé cette semaine). Mais je ne trouve pas de formule pour lui dire qu'à la ligne contenant total, il fasse la somme des 1 au-dessus (le nombre de commande par semaine varie, donc la somme doit être faite sur des plages variables)...
La deuxième solution serait surement, une jolie macro lui disant de calculer le nombre de lignes pour chaque semaine de création et pour chaque semaine de livraison et de descendre jusqu'à ce qu'il ne trouve plus rien...
Si vous avez des idées, je suis preneuse!
Merci d'avance,
Bonjour Mayou78,
En fait, le mieux serait que tu nous joignes un fichier plutôt qu'une image. Garde la structure des données et mets-y une trentaine de lignes. Au besoin, mets des données bidons.
Bonsoir,
D'après ce que j'ai compris....
A peaufiner, au besoin (si tu veux bien mettre un fichier en exemple)
Le code :
Sub Nbr_Items()
Dim Pvi As PivotItem
Dim NbrCol As Byte
'bien vérifier le nom du TCD, ainsi que des PivotFields
NbrCol = ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("division").PivotItems.Count + 3
'on calcule le nombre de divisions,auquel on rajoute 2 pour la colonne "Total" et la colonne "article"
'et 1 pour avoir la première colonne vide, à droite du TCD
'dans mon exemple, on trouve 8, la première colonne vide étant décalée de 8 colonnes par rapport
'au PivotField "N° Semaine date requise"
For Each Pvi In ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("N° Semaine date requise").PivotItems
If Pvi.Visible Then 'si ce n'est pas filtré
Pvi.LabelRange.End(xlDown).Offset(, NbrCol) = Pvi.LabelRange.Count
End If
Next Pvi
End SubDans le fichier, un petit code "bonus", te permettant de supprimer les anciens "Items", qui n'ont plus à apparaître....
Si tu n'arrives pas à adapter, fais signe....
Bon courage
Bonjour,
Je m'insère juste dans ce fil pour saluer Cousinhub. Dis donc cela faisait longtemps tout de même...
Amicalement
Hi, Dan
Ben, vi, mais tu sais, en Nouvelle-Calédonie, c'est pas facile, de trouver du temps....
Le bonjour à toute la communauté.....
PS, ton msg me fait bien plaisir
Merci beaucoup Cousinhub,
Voici un exemple de fichier beaucoup plus court que le vrai...
Donc comme je disais mon but était d'avoir le nombre de lignes pour chaque article...
Encore merci pour ton aide!
Je vais déjà essayer de voir avec ta macro, mais comme je n'y connais rien, je ne suis pas sure de réussir
Bonne journée,
Bonjour,
Dans mon fichier exemple, j'avais supposé que c'était trié dans l'ordre, pour le champ "N° semaine date requise"
Cependant, ce n'est pas le cas, donc mon code précédent ne fonctionnera pas comme voulu...
Regarde le fichier joint, j'y ai mis un autre code :
Sub Nbr_Items2()
Dim Cel As Range
Columns(10).ClearContents 'on nettoie la colonne 10 (colonne "J")
For Each Cel In Range("B5:B" & [B65000].End(xlUp).Row).SpecialCells(xlCellTypeConstants, 23)
'on balaie toute les cellules non vides de la colonne "B"
If IsNumeric(Cel) Then 'si ces cellules contiennent bien un nombre
nbrlig = IIf(Cel.Offset(1) <> "", 1, Cel.End(xlDown).Row - Cel.Row)
'calcul du nombre de données
'si la cellule du dessous n'est pas vide, il y a donc 1 enregistrement
'sinon, on cherche la première cellule non vide du dessous
'et calcul numéro de ligne moins numéro de ligne de la cellule
Cel.Offset(nbrlig, 8) = nbrlig 'on décale du nombre de lignes vers le bas
'et de 8 vers la droite pour inscrire le nombre
End If
Next Cel
End SubLe fichier :
Bonne soirée
Ouah! T'es trop fort!
Merci beaucoup pour ton aide!