Somme VBA sur place de cellules en excluant les cells groupé masqué filtré

Bonjour,

J'espère que vous allez bien.

Il y a quelques temps j'avais interrogé le forum pour une aide sur un projet passant une somme d'une plage à cellule par cellules

cf. https://forum.excel-pratique.com/excel/selection-de-cellule-passage-de-plage-a-unitaire-123506

Exemple

Changer =somme(E1:B6) j'aimerai passer cela en =SOMME(E1;E2;E3;E4;E5;E6)

En pièce jointe le cas illustré.

plage

Après quelques échanges @m3ellem1 et @eriiic m'ont apporté une solution qui fonctionne très bien, que je remets en pièce jointe.

9somme-test.xlsm (18.38 Ko)

Le code est le suivant

Sub SommeUnitaire()
Dim pArguments As String
Dim pColonne As Boolean, pLigne As Boolean
Dim pSelection As Range, cResultat As Range, c As Range

Set cResultat = ActiveCell
pColonne = False
pLigne = False

On Error Resume Next
Set pSelection = Application.InputBox(Prompt:="Selectionnez/entrez une plage (ex. A1:D1) pour créer la formule", _
Title:="Passage de plage à l'unitaire", Type:=8)
On Error GoTo 0

    If Not pSelection Is Nothing Then

        For Each c In pSelection.Cells
        pArguments = pArguments & c.Address(pLigne, pColonne) & ","
        Next

        pArguments = Left(pArguments, Len(pArguments) - 1)
        cResultat.Formula = "=SUM(" & pArguments & ")"

    End If

End Sub

Désormais, je souhaiterai faire évoluer un peu le fichier en ajoutant quelques contraintes notamment si la plage est filtrée ou que les lignes/colonnes sont groupées/masquées sur la sélection, l'idée serait d'exclure les cellules masquées, groupées ou filtrées de la somme.

Si ma somme est =somme(E1:E6)

Admettons que la ligne 2 soit masquée et la ligne 3 groupée. Il faudrait que le rendu soit alors=somme(E1;E4;E5;E6)

Si ma somme est =somme(E1:E6)

Si admettons la ligne 3 soit défiltrée, il faudrait que le rendu soit alors =somme((E1;E2;E4;E5;E6)

En essayant de trifouiller j'ai des erreurs 9 VBA et le code ne fonctionne pas.

Auriez-vous des idées ?

Merci d'avance pour votre aide et très bonne soirée,

Naxos

Bonjour Naxos, le Forum,

Utiliser plutôt SpecialCells. Exemple: en E1 l'intitulé Prix. En E2 jusqu'à E6 des nombres. En E10 le total de ces derniers.

Dim Plage As Range
Set Plage = Range("E2:E6").SpecialCells(xlCellTypeVisible)
Range("E10") = WorksheetFunction.Sum(Plage)

La somme ne sera effective que sur les cellules visibles.

Bons tests, bonne continuation.

Rechercher des sujets similaires à "somme vba place excluant groupe masque filtre"