Recap diverses

cheyenne63

XLDnaute Occasionnel
Bonjour
Ci-joint un doc avec des données complètement bidon.
La feuille « Export », assez mal fichue je l’accorde, est issue d’un vieux programme. Les colonnes A et B ne sont pas triées et il peut y avoir des doublons. Seul le nombre de colonne est fixe.
Comme vous pouvez le voir, il peut y avoir des données manquantes (cellules vides) à la fois dans les titres, ou dans les nombres associés, ou dans les 2 à la fois.
Je vous présente dans les autres feuilles, ce que je souhaiterai … (plutôt par macro je l’avoue si possible) :
1) Listing de tous les « Titre » pour une date donnée (indiquée en F1) tous « lieu » confondus. En colonne C, le total de chaque titre (Exemple dans la feuille « Recap 1 » pour le 07/12/15 avec le total attendu de ALFASUD_TI_1350 et LADA_1300 par exemple)
2) Tableau reprenant tous les « Titre » pour une date donnée (indiquée en N1) avec répartition de la quantité dans les bonnes colonnes selon le « lieu » (Exemple dans la feuille « Recap 2 » pour le 07/12/15 avec La répartition et le total attendus pour LADA_1300 et OPEL_REKORD_L par exemple)
3) Une récap selon la date (en B1) et selon le lieu (en C1) choisis. Exemple dans la feuille « Recap 3» pour le 09/12/15 avec La répartition et le total attendus pour CCC. (Rappel, il y aurait très bien pu y avoir 2 lignes avec ces 2 critères dans la feuille « Export », et il faudrait que la récap réunisse le tout …)
Merci d'avance et bon courage.
 

Pièces jointes

  • Recap diverses.xls
    36 KB · Affichages: 48

Dranreb

XLDnaute Barbatruc
Re : Recap diverses

Les TCD c'est une chose que j'aimerais voir disparaître dans Excel. En matière de facilité de pilotage et de souplesse de présentations possibles c'est en dessous de tout. Ça l'a toujours été. Je vais peut être un jour écrire un truc capable de suivre un modèle dans une feuille masquée. Ou autre chose… En attendant dans VBA la fonction GroupOrg vous débarrasse de tous les soucis algorithmiques associés à l'établissement de ce genre de rapport: tous le classement, puis les contrôles de ruptures de séquence sur les arguments de regroupement ont déjà été faits à votre place, et le résultat rangé proprement dans des collections imbriquées. Il ne reste plus qu'a les explorer simplement par des For Each In, avec un minimum de cohérence logique.
 

cheyenne63

XLDnaute Occasionnel
Re : Recap diverses

Bonjour
Et Merci !!!!!!
Dranreb, ça a l'air de fonctionner (je n'en doutais pas)
Je vais étudier votre code attentivement. je croise les doigts.
Par contre Gosselien, je ne vois aucun TCD dans le dernier envoi ?!?! C'est mes yeux ???
Merci encore et bonne journée
 

gosselien

XLDnaute Barbatruc
Re : Recap diverses

C'est une noble mission, mais je ne pense pas que M$ va les enlever d'excel pour les prochaines versions; ils sont utiles pour le commun des mortels et ton niveau (très élevé en vba, ça se voit dans tes codes) peut te permettre de t'en passer peut être mais il ne faut pas oublier que l'utilisateur lambda comme j'en fais partie, aime ce genre d'outil rapide pour quelques milliers de data (pas des dizaines ou centaines de milliers) mais excel n'est de toute manière pas prévu pour autant de lignes qu'Access au niveau de la gestion non ?
Et pourquoi réinventer la roue :)
 

Dranreb

XLDnaute Barbatruc
Re : Recap diverses

Attention gros danger: j'ai pratiquement vérolé le classeur en écrivant la Sub Rapport de FR1DétL (Récap 1 jour détails lieux) et j'ai eu beaucoup de mal à trouver d'où ça venait alors je vous donne la règle à observer pour éviter cet ennui :
Dans tout module de feuille contenant une Private Sub Worksheet_Change, l'instruction :
Utilit.ValPlgAju(Me.[Rapport], Ls) = Ts
devra être précédée systématiquement de :
VB:
Application.EnableEvents = False
Et la procédure devra se terminer par Application.EnableEvents = True juste avant la End Sub.
 

cheyenne63

XLDnaute Occasionnel
Re : Recap diverses

Salut
J'y arrive pas. J'y ai passé la moitié de la nuit. Suis sur les nerfs et j'ai pas eu mes 7h00 :cool:
Non j'ai pas réussi à combiner les 2 codes. Suis bien passé par le dernier mais j'ai pas réussi à intégrer la fabrication du dictionnaire des lieux comme vous l'expliquiez plus haut.
Par le passé, ça m'est arrivé à 2 reprises de réussir à adapter votre code à mes besoins (m'en rappelle bien, vos modules de classes et fonctions perso sont reconnaissables entre tous) après avoir épluché des solutions dans le forum et trouvé un de vos classeurs
Mais alors là, je sèche complet. Inspiration HS. J'y ai cru mais non.
Je récapitule : vous m'avez donné une récap générale + une récap 1 lieu pour une date
Impossible d'avoir une récap tous lieux confondus pour une seule date
Impossible d'avoir le détail pour une seule date

Suis vannée, je vais dormir tout le week-end. Vivement ce soir
En tout cas, merci d'avoir fourni tout ce boulot, je vous en suis très reconnaissante. Et bravo au forum
 

Dranreb

XLDnaute Barbatruc
Re : Recap diverses

Bonjour.
Qu'est ce qui coince, erreur de compilation, d'exécution ou mauvais résultat ?
Curieux que la fabrication du dictionnaire pose problème: c'est à prendre exactement comme c'est dans l'autre procédure.
C'est normal qu'il y ait des incidents de mise au point, il ne faut pas s'en formaliser.
Montrez moi ce que vous avez fait, que je vous dise ce qui ne va pas. (Pour mon confort veuillez mettre [/highlight=vb] devant et n'oubliez pas de terminé par /highlight, également entre crochets droits)

Edit: Astuce: Pour la tous lieux confondus prenez la un lieu telle qu'elle est, supprimez LeLieu des déclarations puis éliminez les bouts de code que cela dérange. L’algorithme est en effet exactement le même sauf qu'il ne faut pas préfiltrer sur un lieu.
Attention: de mon coté je viens de le faire et je vois qu'il faudrait d'abord rectifier la référence du nom "Rapport" dans la feuille, pour qu'elle commence à partir de la ligne 2, sinon ça écrase la date.
 
Dernière édition:

cheyenne63

XLDnaute Occasionnel
Re : Recap diverses

Bonjour Dranreb et Gosselien
Ce qui n'allait pas ? Des erreurs de compilation ou d'exécutions selon les tests.
Oh je pense que ce n'était pas grand chose mais on enlève on déplace on adapte on remet on teste et on reteste, à la fin, la fatigue aidant, on sait plus bien où on en est ... On sent qu'on en est pas loin parfois, mais ça fait pschitttt .....
Le problème ce que je n'ai pas mon fichier test là, il est resté chez moi puisque ne fonctionnait pas. Et j'y retourne que tard ce soir donc vous l'enverrai cette nuit, en espérant que vous y jettiez un coup d'œil dans le week-end car faut je bosse dessus au moins dimanche pour avancer dès lundi un peu plus pour mes collègues en difficulté.
Merci en tout cas. Merci beaucoup et bonne journée
 

Dranreb

XLDnaute Barbatruc
Re : Recap diverses

Bon, si vous êtes pressé par le temps je vous donne le code actuel du FR1JDétL (Récap 1 jour détails lieux) :
VB:
Option Explicit
'

Private Sub Worksheet_Activate()
Rapport
End Sub
'

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Me.[B1], Target) Is Nothing Then Rapport
End Sub
'

Private Sub Rapport()
Dim Te(), Le&, Ti(), Li&, Ts(), Ls&, C&, DTit As Dictionary, SGDate As SsGroup, TLgn() As Long, _
   LaDate As Date, SGLieu As SsGroup, SGNomT As SsGroup, Cumul As Double, Détail, Cel As Range
   
Rem. ——— Acquisition, empilement dans un tableau intermédiaire unique.
Te = Utilit.PlgUti(FExport.[A2]).Value
ReDim Ti(1 To UBound(Te, 1) * (UBound(Te, 2) - 2) \ 2, 1 To 4)
For Le = 1 To UBound(Te, 1)
   For C = 4 To UBound(Te, 2) Step 2
   If Not IsEmpty(Te(Le, C)) Then
      Li = Li + 1
      Ti(Li, 1) = Te(Le, 1)
      Ti(Li, 2) = Te(Le, 2)
      Ti(Li, 3) = Te(Le, C - 1)
      Ti(Li, 4) = Te(Le, C): End If: Next C, Le
' On a 1:Date, 2:Lieu, 3:NomT, 4:Nbre

Rem. ——— Constitution d'une table de numéros des lignes à considérer.
LaDate = Me.[B1].Value
ReDim TLgn(1 To Li)
For Le = 1 To Li
   If Ti(Le, 1) = LaDate Then Ls = Ls + 1: TLgn(Ls) = Le
   Next Le
If Ls = 0 Then
   ReDim Ts(1 To 2, 1 To 3): Ts(1, 1) = LaDate: Ts(2, 1) = "Aucun élément."
   Application.EnableEvents = False: ValPlgAju(Me.[Rapport]) = Ts
   Application.EnableEvents = True: Exit Sub: End If
ReDim Preserve TLgn(1 To Ls)

Rem. ——— Inventaire des lieux
MClassement.Préfiltrer TLgn
Set DTit = MClassement.DicInvent(Ti, 2, 2)

Rem. ——— Construction tableau image du rapport.
ReDim Ts(1 To 50000, 1 To DTit.Count + 2)
Ts(1, 1) = LaDate
Te = DTit.Keys: For C = 2 To UBound(Ts, 2) - 1: Ts(1, C) = Te(C - 2): Next C
Ts(1, DTit.Count + 2) = "Total"
Ls = 1
MClassement.Préfiltrer TLgn
For Each SGNomT In GroupOrg(Ti, 3, 2)
   Ls = Ls + 1
   Ts(Ls, 1) = SGNomT.Id
   For Each SGLieu In SGNomT.Contenu
      Cumul = 0
      For Each Détail In SGLieu.Contenu
         Cumul = Cumul + Détail(4)
         Next Détail
      Ts(Ls, DTit(SGLieu.Id)) = Cumul
      Next SGLieu, SGNomT
         
Rem. ——— Production du rapport et ajout de formules totaux.
Application.EnableEvents = False
Utilit.ValPlgAju(Me.[Rapport], Ls) = Ts
With Me.[Rapport]: .Cells(2, .Columns.Count).Resize(.Rows.Count - 1) _
  .FormulaR1C1 = "=SUM(OFFSET(RC" & .Column & ",0,1):OFFSET(RC,0,-1))": End With
Application.EnableEvents = True
End Sub
 

cheyenne63

XLDnaute Occasionnel
Re : Recap diverses

Bonjour
Merci Dranreb. Je m’apprêtais hier soir (tard) à vous envoyer mon fichier (macro que je n'arrivais pas à adapter) quand j'ai vu votre dernier message (et l'aide que vous m'apportez à nouveau !) Ca marche nickel
Plus de temps pour chercher à comprendre mes erreurs dès demain matin.
Merci encore et encore
Bonne journée
 

Celeda

XLDnaute Barbatruc
Re : Recap diverses

Bonsoir,

Je suis très heureuse de cette fin et d'une telle solidarité!!

Petit bémol triste pour moi, et à l'avance sorry pour mon avis perso, je rejoins mon confrère tcdéen gosselien :
moi aussi, je suis une excellambda et je pense que les tcds peuvent être une solution simple et rapide;
ils peuvent accéder à un résultat probant sur des bases relativement importantes et ils sont un outil
comme toutes les autres dans excel - pour ne pas les nommer les macros; ne les mettons pas au banc ou au rancart de la grande famille excel. Restons open.

Juste pour vous illustrer mon ressenti des TCD : ils sont pour moi les esprits de Excel. Pas facile à comprendre, Pas facile à dompter,
mais tellement intéressants pour leur jeu dynamique - ils ne sont pas aseptisés, ils vivent. Merci.
 
Dernière édition:

cheyenne63

XLDnaute Occasionnel
Bonjour,
Je déterre ce fil car depuis une mise à jour Windows de jeudi soir, ce fichier génial ne fonctionne plus.
Je précise que depuis 2015, tout fonctionnait parfaitement !!!
* Sur le réseau du taf, ne marche plus nul part (Wind7 - Excel 2007 ou 2013)
* Sur mon pc perso donc connecté web (Wind10 - excel 2013 - 32 bits), fonctionne plus non plus.
* Sur un PC non connecté Wind7, excel 2007, fonctionne parfaitement.
* Sur un PC non connecté Wind10, excel 2013, fonctionne parfaitement.
Le bug arrive à chaque changement de feuille (plein de worksheet change - ce qui est le but de ce fichier), toujours sur la même ligne.
VB:
Private Sub InterpréterParam(ByVal ColOrd As Variant)
Au secours Dranreb ... Grosse panique ... Merci beaucoup
 

Pièces jointes

  • GrpOrgChey mod.xlsm
    93.1 KB · Affichages: 7

Dranreb

XLDnaute Barbatruc
Bonjour.
Pas de panique, ce n'est pas très grave. Il est simplement devenu subitement impossible de retransmettre à une autre procédure un ParamArray vide
Il suffit donc de le tester devant toutes les invocations de cette procédures :
VB:
If UBound(ColOrd) >= LBound(ColOrd) Then InterpréterParam ColOrd
Cela dit ce dispositif est ancien. J'ai remplacé la fonction GroupOrg par une fonction Gigogne qui utilise un système de classement légèrement plus rapide sur de gros volumes de données, et un type SsGr au lieu de SsGroup. Il existe un complément .xlam qui contient tout ça avec son projet VBA GigIdx à cocher dans les références, si vous voulez le moderniser.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 917
Membres
101 839
dernier inscrit
laurentEstrées