Tableaux Croisés Dynamique (CA par Chauffeurs)
Bonjour,
N'étant pas du tout calé dans le codage, je cherche quelqu'un qui m'expliquerait comment me faciliter la vie :)
Voici mon tableau. Il s'agit d'un tableau que je remplie avec les tickets de pesées de mes chauffeurs à fil des jours. J'ai plusieurs colonnes et sous-titres, car j'ai plusieurs clients et matières.
Dans l'idéal, j'aimerais que la 1ère page me permette de classer mes tickets et que dans ma 2e page, je retrouve le chiffre d'affaires par chauffeur et par matières.
J'ai essayé avec des règles de mises en forme conditionnelles, tableaux croisés dynamiques et ça fonctionne pas..
Bonjour,
Pour faire ce genre de chose, il n'y a pas besoin de "coder", pourquoi penser tout de suite à VBA
En revanche, il faut savoir organiser ses données et le moins que je puisse dire en voyant votre fichier... c'est le foutoir
Je ne comprends pas pourquoi toutes ces pseudos tableaux à droite et à gauche !?
Bonjour marion3103 et bienvenue sur XLP
Bonsoir JExceL2fr
Je plussoie aux propos de JExceL2fr. Vos tableaux ne permettent pas une exploitation "facile et logique" de leurs données. Il y a des formules de sommation dans vos tableaux qui sont erronées (et qui ont été révélées quand j'ai fait le contrôle du résultat de ma macro).
La macro que j'ai faite reconstruit un tableau structuré (TS) sur la feuille "Base" qui est plus exploitable que vos tableaux. A partir de ce TS, on peut notamment créer des TCD. Pour lancer la macro, cliquer sur le bouton "MàJ Base" au sein de la feuille "Base".
Le code est dans le module"Module1" :
Sub CreerBase()
Dim derlig&, dercol&, t, i&, j&, n&, refSit, refMat
With Sheets("(11) Novembre")
derlig = .UsedRange.Row + .UsedRange.Rows.Count - 1
dercol = .UsedRange.Column + .UsedRange.Columns.Count - 1
t = .Range("a1").Resize(derlig, dercol).Value
ReDim r(1 To 4 * Int(dercol / 4) * UBound(t), 1 To 6)
r(1, 1) = "Site": r(1, 2) = "Matière": r(1, 3) = "Date": r(1, 4) = "Chauffeur"
r(1, 5) = "Tonnage": r(1, 6) = "Nbre Tonnage"
n = 1
For j = 1 To UBound(t, 2) Step 5
refSit = t(2, j): refMat = t(3, j)
For i = 4 To UBound(t)
If Not t(i, j) = "" Then
If IsDate(t(i, j)) Then
n = n + 1
r(n, 1) = refSit: r(n, 2) = refMat: r(n, 3) = t(i, j): r(n, 4) = t(i, j + 1)
r(n, 5) = t(i, j + 2): r(n, 6) = t(i, j + 3)
Else
refMat = t(i, j)
End If
End If
Next i
Next j
If Sheets("base").ListObjects(1).ListRows.Count > 1 Then Sheets("base").ListObjects(1).DataBodyRange.Delete
Sheets("base").ListObjects(1).ListRows.Add
Sheets("base").ListObjects(1).DataBodyRange.Resize(n, 6) = r
Sheets("base").ListObjects(1).ListRows(1).Delete
End With
End SubRe,
Un exemple de quelques statistiques par Chauffeur et par site à partir du tableau de la feuille "Base"
Bonjour
L'organisation de ta source rend très difficile l'exploitation. En plus il y a un formule erronée en I44
Pour exploiter facilement il faudrait
- un tableau structuré avec les colonnes
Type (Encombrant, Gravats...), Date, Lieu (BARBENTANE, CHATEAURENARD), Chauffeur, Tonnage, Nombre - un tableau des tarifs reprenant les mêmes libellés que dans le 1er tableau pour le type (ce n'est pas le cas dans ton classeur)
- la règle de calcul du CA : on ne sait trop par quoi on multiplie le tarif
Et là avec un 2 TCD on fait des statistiques sans souci
Exemple (la valorisation dépend de la règle de calcul que je n'ai pas) :