J'essaie d'améliorer la fonctionnalité de mon classeur Excel en ajoutant une nouvelle ligne à un tableau et en veillant à ce qu'un calcul de somme inclue cette nouvelle ligne, le tout déclenché par un clic de bouton associé à une macro VBA.
Je parviens à ajouter les lignes mais je n'arrive pas à prendre en compte ces dernières dans une formule de Somme qui additionne tous les cellules d'une colonne. J'ai pourtant essayé de créer une plage de donnée dans la formule mais elle ne se met pas à jour automatiquement.
Pour l'instant j'ai une partie du code qui fonctionne :
Sub AjoutLigne()
Dim ws As Worksheet
Dim totalRow1 As Long, totalRow2 As Long
Dim cell As Range
' Définir la feuille de calcul active (ou spécifier une feuille en particulier)
Set ws = ActiveSheet
' Définir les plages nommées par leur nom
Dim plageTableau1 As Range
Dim plageTableau2 As Range
Set plageTableau1 = ws.Range("Tableau1")
Set plageTableau2 = ws.Range("Tableau2")
' Initialisation des lignes "TOTAL" à 0
totalRow1 = 0
totalRow2 = 0
' Recherche de "TOTAL" dans la première plage qui correspond à la ligne qui contient la formule de la somme.
For Each cell In plageTableau1.Columns(1).Cells
If cell.Value = "TOTAL" Then
totalRow1 = cell.Row ' Assignation du numéro de ligne contenant "TOTAL"
Exit For ' Sortir de la boucle une fois "TOTAL" trouvé
End If
Next cell
' Recherche de "TOTAL" dans la deuxième plage
For Each cell In plageTableau2.Columns(1).Cells
If cell.Value = "TOTAL" Then
totalRow2 = cell.Row + 1 ' Assignation du numéro de ligne contenant "TOTAL"
Exit For ' Sortir de la boucle une fois "TOTAL" trouvé
End If
Next cell
' Vérifier si "TOTAL" a été trouvé dans la première plage
If totalRow1 > 0 Then
' Insérer une nouvelle ligne avant la ligne "TOTAL" dans la première plage
ws.Rows(totalRow1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Else
MsgBox "Merci de créer une ligne 'TOTAL' à la fin de chaque tableau"
End If
' Vérifier si "TOTAL" a été trouvé dans la deuxième plage
If totalRow2 > 0 Then
' Insérer une nouvelle ligne avant la ligne "TOTAL" dans la deuxième plage
ws.Rows(totalRow2).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Else
MsgBox "Merci de créer une ligne 'TOTAL' à la fin de chaque tableau"
End If
End Sub
Mais je n'arrive pas à trouver la solution pour la suite. Pour l'instant j'ai ceci :
' Mettre à jour la définition de la plage nommée Matière_Sèche_Ingérée__kg_VL_J après l'insertion de ligne
Dim newRowCount As Long
newRowCount = ws.Range("I87", ws.Range("I87").End(xlDown)).Rows.Count 'La plage qui couvre les cellules prises en compte dans la somme commence à la cellule I87
newRowCount = newRowCout - 1
' Mettre à jour la plage nommée pour qu'elle tienne compte de la nouvelle ligne insérée
ws.Names("Matière_Sèche_Ingérée__kg_VL_J").RefersTo = "=OFFSET('1. Analyse Minérale Ration'!$I$87, 0, 0, " & newRowCount & ", 1)"
' Mettre à jour la formule dans la cellule "TOTAL" pour prendre en compte la nouvelle plage
Dim totalCell1 As Range
Set totalCell1 = ws.Range("I87").End(xlDown) ' Trouver la dernière cellule de la colonne I
If Not totalCell1 Is Nothing Then
totalCell1.Offset(1, 0).Formula = "=SI(SOMME(Matière_Sèche_Ingérée__kg_VL_J)=0;"""";SOMME(Matière_Sèche_Ingérée__kg_VL_J))"
Else
End Sub
Je bloqué depuis plusieurs jour dessus. Je ne connais pas bien le langage VBA et je n'arrive pas à trouver la documentation nécessaire.
Je vous remercie par avance pour votre aide,
Belle soirée,
Boby