Restitution d'une variable tableau

Troudz

XLDnaute Occasionnel
Bonjour tout le monde,

Je dispose de la variable tableau suivante :
Code:
Synthese.Periode (type : Date)
Synthese.Site (type : String)
Synthese.NbPers (type : Long)
Synthese.Temps (type : Long)

Je dois effectuer une synthèse en totalisant les données "NbPers" et "Temps". Cette synthèse doit être fait mois par mois et site par site.

Ne sachant absolument pas utiliser les variables tableau, j'espérais que l'un d'entre vous aurait un début de solution.

Je vous remercie par avance
 

Troudz

XLDnaute Occasionnel
Re : Restitution d'une variable tableau

Bonjour,

Me revoilà avec le classeur test.
Les données à compiler sont sur les onglets "Pers1" et "Pers2".
J'ai également réalisé la macro qui va charger l'ensemble des données dans une variable tableau.

En espérant que vous serez en mesure de mettre sur la voie. Je vous remercie tous par avance
 

Pièces jointes

  • Test Synthèse Troudz.xls
    43 KB · Affichages: 46

Staple1600

XLDnaute Barbatruc
Re : Restitution d'une variable tableau

Bonsoir à tous

Troudz
Ne sachant absolument pas utiliser les variables tableau, j'espérais que l'un d'entre vous aurait un début de solution.
La première des choses c'est peut-être de prendre le temps de découvrir ce que sont les tableaux (Arrays)
Sample Visual Basic macros for working with arrays in Excel
Visual Basic macro examples for working with arrays
Pour plus d'infos, utilises efficacement ton moteur de recherche préféré
(voir également les tutoriels disponibles sur XLD (dans les sections adéquates) et/ou dans les archives du forum)
Voir aussi le Ce lien n'existe plus

Question:
C'est toi qui a écrit le code VBA de ta PJ ?
Car première fois que je vois ce genre de code VBA
 

klin89

XLDnaute Accro
Re : Restitution d'une variable tableau

Bonsoir à tous,

Pour faire simple, j'ai placé les données sur la même feuille.
On peut aussi trier les dates au départ, je ne l'ai pas fait.
Résultat en feuil1, avec utilisation d'un seul dictionnaire
Code dans le module 2
VB:
Sub Synthese()
'Résultat dans la même feuille
Dim tablo, i As Long, j As Long, w, maxCol As Long, n As Long, txt As String
    Application.ScreenUpdating = False
    With Feuil1.Cells(1).CurrentRegion
        tablo = .Value: maxCol = UBound(tablo, 2)
        ReDim Preserve tablo(1 To UBound(tablo, 1), 1 To UBound(tablo, 2))
        tablo(1, 1) = "Périodes": tablo(1, 2) = "Sites"
        With CreateObject("Scripting.Dictionary")
            .CompareMode = 1
            For i = 2 To UBound(tablo, 1)
                txt = Join(Array(Format(tablo(i, 1), "mmmm yyyy"), tablo(i, 2)), Chr(2))
                If Not .exists(txt) Then
                    .Item(txt) = VBA.Array(.Count + 2, 4)
                    For j = 1 To 4
                        Select Case j
                            Case 1
                                tablo(.Item(txt)(0), j) = Application.WorksheetFunction.Proper(Format(tablo(i, j), "mmmm yyyy"))
                            Case 2, 3, 4
                                tablo(.Item(txt)(0), j) = tablo(i, j)
                        End Select
                    Next
                Else
                    w = .Item(txt)
                    tablo(w(0), 3) = tablo(w(0), 3) + tablo(i, 3)
                    tablo(w(0), 4) = tablo(w(0), 4) + tablo(i, 4)
                    .Item(txt) = w
                End If
            Next
            n = .Count + 1
        End With
        With .Offset(, .Columns.Count + 1).Resize(n, maxCol)
            .CurrentRegion.Clear
            .Value = tablo
            .VerticalAlignment = xlCenter
            .Font.Name = "Calibri"
            .Font.Size = 12
            .Borders.Weight = 2: .Columns.AutoFit
            .Cells(2, 1).Resize(n - 1).RowHeight = 18
            .Cells(1, 1).Resize(n).Interior.ColorIndex = 19
            With .Cells(1, 2).Resize(, 3)
                .HorizontalAlignment = xlCenter
                .Interior.ColorIndex = 40
            End With
            With .Cells(2, 2).Resize(n - 1, maxCol - 1)
                .Font.Size = 11
                .HorizontalAlignment = xlCenter
            End With
        End With
    End With
    Application.ScreenUpdating = True
End Sub

klin89
 

Pièces jointes

  • Synthèse.xls
    48 KB · Affichages: 39
  • Synthèse.xls
    48 KB · Affichages: 57
  • Synthèse.xls
    48 KB · Affichages: 48

Discussions similaires

Statistiques des forums

Discussions
312 247
Messages
2 086 591
Membres
103 248
dernier inscrit
Happycat