VBA Tableau automatisé

0

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

   


Posté le 4 juillet, 17:16
par Boby
Répondre

Si vous n'êtes pas inscrit sur le site, vous pouvez poster librement (en tant qu'invité).
Pour cela, indiquez un pseudonyme (nom d'utilisateur) et une adresse email :