Sub Worksheet_Activate()
LireDonnées ' On actualise quand on sélectionne la feuille
End Sub
Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub ' On actualise quand on change l'objet de la recette ou dépense
If Not Intersect(Target, Range("A27,I27")) Is Nothing Then
LireDonnées
End If
End Sub
Sub LireDonnées()
Dim IndexRec%, IndexDep%, ColRecettes%, ColDépenses%, i%, Ligne%, Recette$, Dépense$, Mois$
Application.ScreenUpdating = False
On Error Resume Next
[Recettes].ListObject.DataBodyRange.Delete ' On efface les tableaux
[Dépenses].ListObject.DataBodyRange.Delete
IndexRec = 30: IndexDep = 30: ColRecettes = 4: ColDépenses = 12
For i = 1 To 13 ' Pour tous les onglets
Mois = [Onglets].Cells(i, 1) ' On récupère le nom de l'onglet
Recette = [A27]: Dépense = [I27]
With Sheets(Mois)
Ligne = 8
While .Cells(Ligne, ColRecettes) <> "" ' On récupère toutes les recettes demandées
If .Cells(Ligne, ColRecettes) = Recette Then
Range(Cells(IndexRec, "A"), Cells(IndexRec, "G")) = _
.Range(.Cells(Ligne, "A"), .Cells(Ligne, "G")).Value
IndexRec = IndexRec + 1
End If
Ligne = Ligne + 1
Wend
Ligne = 8
While .Cells(Ligne, ColDépenses) <> "" ' On récupère toutes les dépenses demandées
If .Cells(Ligne, ColDépenses) = Dépense Then
Range(Cells(IndexDep, "I"), Cells(IndexDep, "O")) = _
.Range(.Cells(Ligne, "I"), .Cells(Ligne, "O")).Value
IndexDep = IndexDep + 1
End If
Ligne = Ligne + 1
Wend
End With
Next i
End Sub