tableau de synthèse (macro)

robinhood

XLDnaute Occasionnel
Bonjour Le Forum,

je m'adresse a vous pour m'aider sur ce sujet que je penses facile pour un expert, et me sera très utile dans mon travail.

Je vous remercie pour toute aide.

si c'est possible est ce que ça peut se faire avec une macro c'est a dire je clique sur un bouton et les tableaux de synthèse s'actualisent.

Merci d'avance.
Robinhood
 

Pièces jointes

  • tableau de synthèse.xlsx
    13.8 KB · Affichages: 30

klin89

XLDnaute Accro
Bonsoir à tous, :)

Pour le fun :
VB:
Option Explicit
Sub test()
Dim a, w(), i As Long, j As Long, n As Long, dico As Object
    Set dico = CreateObject("Scripting.Dictionary")
    dico.CompareMode = 1
    With Sheets("Base de données")
        a = .Range("b3").CurrentRegion.Value
        For i = 2 To UBound(a, 1)
            If Not dico.exists(a(i, 2)) Then
                Set dico(a(i, 2)) = _
                CreateObject("Scripting.Dictionary")
            End If
            If Not dico(a(i, 2)).exists(a(i, 3)) Then
                dico(a(i, 2))(a(i, 3)) = VBA.Array(a(i, 2), a(i, 3), Empty)
            End If
            w = dico(a(i, 2))(a(i, 3))
            w(2) = w(2) + a(i, 4)
            dico(a(i, 2))(a(i, 3)) = w
        Next
    End With
    Application.ScreenUpdating = False
    With Sheets("synthèse1").Range("b2")
        .CurrentRegion.Offset(1).Clear
        n = 1
        For i = 0 To dico.Count - 1
            For j = 0 To dico.items()(i).Count - 1
                With .Offset(n).Resize(1, UBound(dico.items()(i).items()(j), 1) + 1)
                    .Value = dico.items()(i).items()(j)
                End With
                n = n + 1
            Next
        Next
        With .CurrentRegion
            .Font.Name = "calibri"
            .Font.Size = 10
            .VerticalAlignment = xlCenter
            .BorderAround Weight:=xlThin
            .Borders(xlInsideVertical).Weight = xlThin
            .Columns.AutoFit
        End With
    End With
    Set dico = Nothing
    Application.ScreenUpdating = True
End Sub
klin89
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Sinon, pour Feuil2 (synthèse1):
VB:
Option Explicit

Private Sub Worksheet_Activate()
Dim T(), Réf As SsGr, Lot As SsGr, L As Long
ReDim T(1 To 1000, 1 To 3)
For Each Réf In Gigogne(Feuil1.[B4:E4], 1, 3)
   For Each Lot In Réf.Co
      L = L + 1
      T(L, 1) = Réf.Id
      T(L, 2) = Lot.Id
      T(L, 3) = Lot.Somme(4)
      Next Lot, Réf
Me.[B3].Resize(UBound(T, 1), UBound(T, 2)).Value = T
End Sub
Installez ce classeur et cochez la référence à GigIdx.
 

Pièces jointes

  • GigIdx.xlsm
    70.2 KB · Affichages: 42
Dernière édition:

Dranreb

XLDnaute Barbatruc
Pour Feuill3 (Synthèse2) ce serait :
VB:
Option Explicit

Private Sub Worksheet_Activate()
Dim T(), Réf As SsGr, L As Long
ReDim T(1 To 1000, 1 To 3)
For Each Réf In Gigogne(Feuil1.[B4:E4], 1)
   L = L + 1
   T(L, 1) = Réf.Id
   T(L, 2) = Réf.Co(1)(2)
   T(L, 3) = Réf.Somme(4)
   Next Réf
Me.[B3].Resize(UBound(T, 1), UBound(T, 2)).Value = T
End Sub
 

robinhood

XLDnaute Occasionnel
Bonjour A tous

je vous remercie pour vos réponses.
@Dranreb merci pour votre retour, j'ai installé le fichier et mis les codes et ça marche par contre je n'ai pas pu retranscrire le code pour qu'il marche sur le fichier d'origine (officiel) :( je ne suis pas un connaisseur :mad:, je te joint le fichier (je vais enlever toutes les données professionnelles et te l'envoyer, merci de mettre le code dans les deux pages que je vais indiquer dans le fichier, et merci beaucoup pour ton effort.

dans l'attente de ton retour
Robinhood
 

Pièces jointes

  • export vierge.xlsx
    562.1 KB · Affichages: 22

robinhood

XLDnaute Occasionnel
Bonjour Klin89, merci pour ton retour aussi j'ai mis le code dans le feuille "synthèse1", mais au lieu de mettre la référence du produit ça donne la désignation, merci de faire la modification pour ça me donne la référence, par contre je penses qu'il faudra aussi un code pour la feuille "synthèse2" pour faire la somme par référence.

Merci d'avance :)
Robinhood
 

robinhood

XLDnaute Occasionnel
Bonjour

en faite quand je met le code dans la page ça me donne cette erreur et il me selectionne "Réf As Ssgr" et ça s’arrête, je n'ai pas compris :(. merci de votre retour.
upload_2017-8-26_11-11-10.png
 

Dranreb

XLDnaute Barbatruc
Non, il n'est pas nécessaire de réinstaller le fichier à chaque utilisation.
Mais s'il n'y a pas d'autre classeur ouvert dans la même fenêtre d'application dont le projet VBA s'y réfère déjà, il peut être nécessaire de l'ouvrir pour pouvoir la cocher dans un projet qui ne l'a pas encore en référence. Le meilleur moyen pour ce faire c'est de cocher, au moins provisoirement, le complément "Fonction Gigogne", coté Excel cette fois.
Quel est le message d'erreur ?
Je ne testerai que votre code, dans un .xlsm, si ses réactions vous resteront inexplicables.
 

Discussions similaires

Réponses
21
Affichages
384
Réponses
1
Affichages
417

Statistiques des forums

Discussions
312 087
Messages
2 085 198
Membres
102 815
dernier inscrit
Henridic