XL 2010 Condenser les données d'un tableau

FCMLE44

XLDnaute Occasionnel
Bonjour

Etape 2 de mon projet

Les onglets se créant automatiquement en fonction des données de la feuille DSN, je souhaite, pour chaque onglet créé condenser les données obtenues.

Feuille TC :
En ligne 4 colonne AN, je souhaite condenser les données se trouvant en colonne AD à AK (cf exemple fichier joint).

Lors de la mise à jour de chaque onglet via macro Balaye1, il se mettrait à jour automatiquement

Cordialement
 

Fichiers joints

CISCO

XLDnaute Barbatruc
Bonjour

Est-ce que tu es certain de n'avoir que des "doublons" (colonne AD et colonne AK) ou est-ce que tu peux aussi avoir des" triplets", des "quadruplets"...?

@ plus
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Sans les couleurs, j'espère…
En résumé: Sommer les M_ASSIETTE_23_004 et M_COTIS_OU_REDUCT pour chaque combinaison unique des colonnes CODE_COTISATION, QUALIFIANT, TX_COTIS, TX_AT_TRANS_23_003, LIBELLE_COTISATION et COMMUNE dans cet ordre de classement là. Ça devrait pouvoir se programmer aisément à l'aide de ma fonction Gigogne.
 

CISCO

XLDnaute Barbatruc
Bonjour à tous, bonjour Dranreb

Une possibilité en pièce jointe, uniquement avec des formules matricielles. à valider avec Ctrl+maj+entrer : Une formule dans la colonne AN à tirer vers la droite jusqu'à la colonne AT. Une autre formule dans la colonne AU.

On doit pouvoir faire sans formules matricielles dans les colonnes AO, AP et ainsi de suite vers la droite, mais bon, pour le moment...

@plus
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Si l'ordre de classement pour le résumé convient aussi pour le détail (qu'il faut conserver, si j'ai bien compris) on peut aussi, avec ma fonction Gigogne, rajouter un niveau SsGr global pour le CODE_DE_SIRET et produire toutes les feuilles, par exemple lors de la désactivation de la feuille DSN.
 

FCMLE44

XLDnaute Occasionnel
Bonjour et merci

Une exemple pour le libelle cotisation. Le code_cotisation (colonne AO) est 27, le qualifiant (colonne AQ) est 920.
En m_assiette, je dois retrouver le cumul du montant colonne AH Ligne 2 + montant colonne AH Ligne 21.

Attention, sur cet exemple, j'ai 25 lignes mais je peux en avoir à l'infini puisque je le réactualiserais chaque mois
 

FCMLE44

XLDnaute Occasionnel
Bonjour

Je dois obtenir les éléments suivant pour chaque onglet incrémenté et mis à jour régulièrement
En colonne AN ligne 4, je prends le libellé identique se trouvant colonne AD Ligne 2 et 21 soit kk
En colonne AO, idem mais avec colonne AE
En colonne AP, idem mais avec colonne AF
En colonne AQ, idem mais avec colonne AG

En colonne AR ligne 4 je dois retrouver la somme colonne AH ligne 2 + colonne AH ligne 21 dans cet exemple.
Sur l'exemple il y a 25 lignes mais il y en aura beaucoup plus à terme

Cordialement
 

Fichiers joints

CISCO

XLDnaute Barbatruc
Bonjour

Modification de la formule dans la colonne AR en fonction de tes derniers posts...

@PlusX

P.S : C'est un peu pour le fun, car je me doute qu'en l’occurrence, une macro serait plus adéquate.
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Si vous mettiez quelques lignes dans la feuille DSN, pour changer, ça permettrait de tester l'ensemble de ma dernière proposition.
Les lignes détail pourront-elles être classées dans le même ordre que le résumé ?
 

FCMLE44

XLDnaute Occasionnel
Merci

le principe est le bon mais si je lance ma macro balaye 1, ce va me génerer tous mes onglets selon le code de siret mais mon tableau en colonnes AN à AU ne se mettra pas systématiquement sur chaque onglet .

Je pense qu'effectivement une macro est plus adéquate
 

Dranreb

XLDnaute Barbatruc
Si, avec mon système qui remplacera la macro Balaye1, je prévois de le mettre sur chaque onglet. Et pour ma question de l'ordre de classement ?
 

Dranreb

XLDnaute Barbatruc
Voyez si ça convient.


Pièce joint supprimée.
Nouvelle version jointe plus loin.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
J'ai vu qu'il n'y avait presque pas de doublon sur la feuille T5.
Il serait possible de détecter s'il n'y en a aucun et de ne pas sortir de résumé dans ce cas.
 

FCMLE44

XLDnaute Occasionnel
Merci

Je viens de tester les choses suivantes :
- Rajouter d'un SIRET - crée bien un nouvel onglet et fait le condensé. Parfait
- Modification d'une donnée - OK
- Rajout de lignes - OK

C'est parfait
 

FCMLE44

XLDnaute Occasionnel
Si je peux abuser.

Est-il possible que lors de la génération du condensé, nous ayons un total de la colonne AU ?
Est-il possible que les colonnes A à AK se masque automatiquement lors de la génération du condensé ?

Il faut que je puisse démasquer en cas de nécessité

Merci beaucoup

Cordialement
 

Dranreb

XLDnaute Barbatruc
Le code corrigé :
VB:
Option Explicit

Private Sub Worksheet_Deactivate()
Dim PlgDon As Range, CodSiret As SsGr, FDest As Worksheet, TDt(), LDt As Long, _
    TRs(), LRs As Long, CodCot As SsGr, Qualif As SsGr, TxCoti As SsGr, _
    TxAtT23003 As SsGr, LibCot As SsGr, Commune As SsGr, C As Long, Détail As Variant
Set PlgDon = Me.UsedRange
Application.ScreenUpdating = False
If PlgDon.Rows.Count < 2 Then Exit Sub
For Each FDest In ThisWorkbook.Worksheets
   If FDest.Index > 1 Then FDest.Cells.Value = Empty
   Next FDest
For Each CodSiret In Gigogne(PlgDon.Rows(2).Resize(PlgDon.Rows.Count - 1), 1, 31, 33, 35, 36, 30, 32)
   On Error Resume Next: Set FDest = ThisWorkbook.Worksheets(CodSiret.Id)
   If Err Then With ThisWorkbook.Worksheets: .Item(.Count).Copy After:=.Item(.Count): _
      Set FDest = .Item(.Count): FDest.Name = CodSiret.Id: End With
   On Error GoTo 0
   ReDim TDt(1 To 5000, 1 To 37), TRs(1 To 3000, 1 To 8): LDt = 0: LRs = 0
   For Each CodCot In CodSiret.Co: For Each Qualif In CodCot.Co: For Each TxCoti In Qualif.Co: For Each _
      TxAtT23003 In TxCoti.Co: For Each LibCot In TxAtT23003.Co: For Each Commune In LibCot.Co
      LRs = LRs + 1: TRs(LRs, 1) = LibCot.Id: TRs(LRs, 2) = CodCot.Id: TRs(LRs, 3) = Commune.Id: TRs(LRs, 4) = Qualif.Id
      TRs(LRs, 6) = TxCoti.Id: TRs(LRs, 7) = TxAtT23003.Id
      For Each Détail In Commune.Co
         LDt = LDt + 1
         For C = 1 To 37: TDt(LDt, C) = Détail(C): Next C
         TRs(LRs, 5) = TRs(LRs, 5) + Détail(34)
         TRs(LRs, 8) = TRs(LRs, 8) + Détail(37): Next Détail
      Next Commune, LibCot, TxAtT23003, TxCoti, Qualif, CodCot
      FDest.[AN1].Value = "CONDENSÉ"
      FDest.[A1:AK1].Value = PlgDon.Rows(1).Value
      FDest.[A2:AK5001].Value = TDt
      FDest.[AN3:AU3].Value = PlgDon(1, 30).Resize(, 8).Value
      FDest.[AN4:AU3003].Value = TRs
      FDest.Cells(LRs + 5, "AU").FormulaR1C1 = "=SUBTOTAL(9,R4C:R[-2]C)"
      FDest.Columns.AutoFit
      FDest.[A:AK].Columns.Hidden = True
   Next CodSiret
End Sub
Remarque: aussi ajouté un bout de code qui nettoie préalablement les cellules des feuilles afin qu'il n'en subsiste de garnie pour un CODE_DE_SIRET disparu des données.

Pièce joint supprimée.
Nouvelle version jointe plus loin.
 
Dernière édition:

Discussions similaires


Haut Bas