Bonjour à tous,
Voici les codes sur la feuille "Loyers"
La 1ère procédure fonctionne très bien. Elle peut sans doute être améliorée mais ça fonctionne.
Dans la procédure worksheet_change je voudrais que la cellule Range("Total_Taxe") se mette à jour au fur et à mesure du remplissage de la colonne 4 du tableau16
Mais lorsque j'écris la formule : Range("Total_Taxe") = Application.WorksheetFunction.Sum(Tbl.DataBodyRange.Columns(4)) dans cette procédure, Excel plante !
j'ai essayé en passant par worksheet_calculate() mais sans succès et je suis pas sûr du fonctionnement de cette procédure.
Merci de votre aide et de vos explications détaillées sur mes erreurs dans mon code
Voici les codes sur la feuille "Loyers"
La 1ère procédure fonctionne très bien. Elle peut sans doute être améliorée mais ça fonctionne.
Code:
Private Sub Worksheet_Activate() 'Feuille Loyers
Dim Tbl As ListObject
Dim PLoyer, PTaxe, plage, cell As Range
Dim i, colL, colT, MoisNum, Lastline, ligne, Derligne As Integer
Application.ScreenUpdating = False
Application.EnableEvents = False
Me.Unprotect
Set Tbl = Me.ListObjects("Tableau16")
Set PLoyer = Tbl.ListColumns("Loyer").DataBodyRange
Set PTaxe = Tbl.ListColumns("Taxe fonçière").DataBodyRange
Set plage = Union(PLoyer, PTaxe, Range("Total_Loyers"), Range("Total_Taxe"))
Set cell = PTaxe.Rows(1)
colL = Tbl.ListColumns("Loyer").DataBodyRange.Column
colT = Tbl.ListColumns("Taxe fonçière").DataBodyRange.Column
ligne = Tbl.HeaderRowRange.Row + 1 '1ère ligne du tableau
Derligne = Tbl.ListColumns("Mois").DataBodyRange.Count + ligne - 1
MoisNum = 0
For i = ligne To Derligne
If MoisNum <= 12 Then
MoisNum = MoisNum + 1
Lastline = Sheets(MoisNum).Range("A:J").Find("*", , , , xlByRows, xlPrevious).Row
Cells(i, colL) = WorksheetFunction.SumIfs(Sheets(MoisNum).Range("H7:H" & Lastline), Sheets(MoisNum).Range("D7:D" & Lastline), "Loyer*")
End If
Next i
Range("Total_Loyers") = Application.WorksheetFunction.Sum(Tbl.DataBodyRange.Columns(2))
Range("Total_Taxe") = Application.WorksheetFunction.Sum(Tbl.DataBodyRange.Columns(4))
With plage 'Mise en forme des cellules
.NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)" 'Nombre sous format comptabilité
.HorizontalAlignment = xlRight
.VerticalAlignment = xlCenter
.AddIndent = False
.IndentLevel = 1
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
cell.Select
If cell = "" Then MsgBox ("Renseignez l'échéancier")
Call ProtectFeuil
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Tbl As ListObject
Dim plage, TotalT As Range
Dim i, colT, ligne, Derligne As Integer
Me.Unprotect
Set Tbl = Me.ListObjects("Tableau16")
Set TotalT = Me.Range("Total_Taxe")
colT = Tbl.ListColumns("Taxe fonçière").DataBodyRange.Column
ligne = Tbl.HeaderRowRange.Row + 1 '1ère ligne du tableau
Derligne = Tbl.ListColumns("Mois").DataBodyRange.Count + ligne - 1
If Not Intersect(Target, Range(Cells(ligne, colT), Cells(Derligne, colT))) Is Nothing Then
If Target.Value = "" Then
Target.Offset(0, -1).Value = ""
With Target.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent2
.TintAndShade = 0.599993896298105
.PatternTintAndShade = 0
End With
Else
With Target.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
If Target.Value > 0 Then
Target.Offset(0, -1).Value = "dont"
Else
Target.Offset(0, -1).Value = ""
End If
End If
End If
Call ProtectFeuil
End Sub
Dans la procédure worksheet_change je voudrais que la cellule Range("Total_Taxe") se mette à jour au fur et à mesure du remplissage de la colonne 4 du tableau16
Mais lorsque j'écris la formule : Range("Total_Taxe") = Application.WorksheetFunction.Sum(Tbl.DataBodyRange.Columns(4)) dans cette procédure, Excel plante !
j'ai essayé en passant par worksheet_calculate() mais sans succès et je suis pas sûr du fonctionnement de cette procédure.
Merci de votre aide et de vos explications détaillées sur mes erreurs dans mon code