Bonjour,
Voici l'architecture de l'application :
- il y a 2 onglets masqués : BdD (base de données) et TCD (tableau dynamique croisé)
- quand tu rentres une info, elle modifie celle existante dans la BdD ou elle s'en rajoute
- il y a une macro qui ne fait à peine la moitié d'une feuille A4 et qui va réagir à l'entrée des données,
- et dès que la donnée sera répercutée dans la base de données, la macro remettra à la place de la donnée une formule qui relie la vue semaine et la BdD : ainsi un changement de semaine est pris en compte et met les valeurs de ladite semaine dans l'onglet
cel.FormulaR1C1 = "=IFERROR(GETPIVOTDATA(""nombre"",TCD!R3C1,""date"",RC3,""nom"",R4C,""motif"",RC2),0)"
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ici As Range
If Intersect(Target, Union([_CP], [_R8])) Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each cel In Intersect(Target, Union([_CP], [_R8]))
If Cells(4, cel.Column) <> "" Then
With Sheets("BdD").ListObjects(1)
Set ici = .ListColumns("ID").DataBodyRange.Find((Cells(cel.Row, 3) * 1) & "|" & Cells(4, cel.Column) & "|" & Cells(cel.Row, 2), LookIn:=xlValues)
If ici Is Nothing Then
.ListRows.Add
i = .ListRows.Count
Else
i = ici.Row - .HeaderRowRange.Row
End If
With .DataBodyRange
.Cells(i, 1) = Cells(cel.Row, 3)
.Cells(i, 2) = Cells(4, cel.Column)
.Cells(i, 3) = Cells(cel.Row, 2)
.Cells(i, 4) = cel
End With
End With
cel.FormulaR1C1 = "=IFERROR(GETPIVOTDATA(""nombre"",TCD!R3C1,""date"",RC3,""nom"",R4C,""motif"",RC2),0)"
End If
Next
Sheets("TCD").PivotTables(1).PivotCache.Refresh
Application.EnableEvents = True
End Sub
Si tu veux ajouter des infos, il faut les répercuter dans la BdD ou une second BdD et adopter le même principe. De quels infos s'agit-il ?