Calcul du nombre de section d'un tableau dynamique

Bonjour,

J'ai un tableau contenant des sections de 4 lignes. Un bouton me permet d'ajouter une section supplémentaire au tableau grâce à du vba.

image

J'ai une ligne finale en bas du tableau contenant une formule pour calculer le total (somme des cellules TOTAL de chaque section):

=SUM(PrivateExpertTable[TOTAL])/2

Cette ligne "descend" automatiquement quand une nouvelle section est ajoutée au tableau (et le calcul est mis à jour).

Voici ma fonction vba pour ajouter la nouvelle section:

Sub AddANewPrivateExpert()

    Dim DerniereLigne As Long
    Dim Sh As Worksheet

    Set Sh = ActiveSheet
    With Sh
         DerniereLigne = .Cells(.Rows.Count, "F").End(xlUp).Row - 2
         .Range(.Cells(DerniereLigne + 1, "A"), .Cells(DerniereLigne + 4, "F")).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
         .Range(.Cells(DerniereLigne - 3, "A"), .Cells(DerniereLigne, "F")).Copy Destination:=.Cells(DerniereLigne + 1, "A")
         .Range(.Cells(DerniereLigne + 1, "A"), .Cells(DerniereLigne + 1, "F")).Borders(xlEdgeTop).Weight = xlMedium
         .Cells(DerniereLigne + 1, "A") = .Cells(DerniereLigne - 3, "A") + 1
         .Range(.Cells(DerniereLigne + 2, "D"), .Cells(DerniereLigne + 3, "D")).ClearContents
    End With
    Set Sh = Nothing

End Sub

Je souhaiterais ajouter dans la 1ere cellule (cellule "NB")de ce ligne finale le nombre total d'expert et je ne sais pas comment faire cela.

Ici mon fichier:

11meetings-web.xlsm (76.93 Ko)

Pourriez-vous m'aider svp?

Merci d'avance

Bonjour,

S'il s'agit bien de la colonne 1 de l'impression, j'ai l'impression que la formule :

=MAX(PrivateExpertTable['#])

ferait l'affaire car votre colonne les énumère déjà...

Cdlt,

Bonjour Amades, bonjour le forum,

Peut-être comme ça :

Sub AddANewPrivateExpert()
Dim DerniereLigne As Long
Dim Sh As Worksheet
Dim DL As Range

Set Sh = ActiveSheet
With Sh
    DerniereLigne = .Cells(.Rows.Count, "F").End(xlUp).Row - 2
    .Range(.Cells(DerniereLigne + 1, "A"), .Cells(DerniereLigne + 4, "F")).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    .Range(.Cells(DerniereLigne - 3, "A"), .Cells(DerniereLigne, "F")).Copy Destination:=.Cells(DerniereLigne + 1, "A")
    .Range(.Cells(DerniereLigne + 1, "A"), .Cells(DerniereLigne + 1, "F")).Borders(xlEdgeTop).Weight = xlMedium
    .Cells(DerniereLigne + 1, "A") = .Cells(DerniereLigne - 3, "A") + 1
    .Range(.Cells(DerniereLigne + 2, "D"), .Cells(DerniereLigne + 3, "D")).ClearContents
    Set DL = .Cells(Application.Rows.Count, "A").End(xlUp)
    DL.Value = DL.End(xlUp).Value
End With
Set Sh = Nothing
End Sub

Mais il me semble que ton code place les données hors du tableau structuré...


[Édition]

Bonjour 3GB, nos posts se sont croisés...

Bonjour Thauthème,

Comme souvent !

Merci 3GB, Thauthème,

Les 2 méthodes fonctionnent bien.
Y'a t'il une possibilité pour que la ligne finale du 2e tableau (total private experts) soit accolée au tableau et non avec une ligne intermédiaire. Car si je supprime la ligne intermédiaire, la fonction d'ajout de section ne me donne plus le même rendu et résultat ?

Cordialement

Y'a t'il une possibilité pour que la ligne finale du 2e tableau (total private experts) soit accolée au tableau et non avec une ligne intermédiaire. Car si je supprime la ligne intermédiaire, la fonction d'ajout de section ne me donne plus le même rendu et résultat ?

comme cela:

image

C'est marrant, j'y ai pensé figurez-vous. Normalement, en masquant simplement la ligne, ça devrait aller avec votre méthode d'insertion de lignes.

Sinon, on pourra trouver une petite astuce VBA...

Edit2 : Et voici une petite proposition pour votre code, en tenant compte du tableau structuré.

Sub AddANewPrivateExpert()

Dim dl As Long

With Sheets("Estimated Costs")
    .Unprotect "111"
    With .Range("PrivateExpertTable")
        dl = .Rows.Count
        .Rows(dl + 1 & ":" & dl + 4).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        .Rows(dl - 3 & ":" & dl).Copy Destination:=.Cells(dl + 1, 1)
        .Rows(dl + 1).Borders(xlEdgeTop).Weight = xlMedium
        .Cells(dl + 1, 1) = .Cells(dl - 3, 1) + 1
        Union(.Cells(dl + 1, 2), .Cells(dl + 1, 5), .Cells(dl + 2, 4), .Cells(dl + 3, 4)).Locked = False 'déverrouillage cells jaunes
        .Range(.Cells(dl + 2, 4), .Cells(dl + 3, 4)).ClearContents
    End With
    .Protect "111"
End With

End Sub

Cdlt,

Merci beaucoup cela fonctionne bien avec la fonction.

Cependant j'ai verrouillé ma page car des cellules ne doivent pas être modifiées (seul les cellules jaunes peuvent être modifiées). Le mot de passe de déverrouillage de la feuille: 111.

Lorsque je clique sur le bouton pour ajouter la nouvelle section, j'ai un souci avec les cellules ajoutées et leurs verrouillages. Les cellules ajoutées doivent avoir le même verrouillage que les cellules de la section précédente.

Ici le fichier:

2meetings-web.xlsm (77.11 Ko)

Pourriez-vous m'aider avec cela ?

Merci beaucoup pour votre aide

Rechercher des sujets similaires à "calcul nombre section tableau dynamique"