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é.
Après quelques échanges @m3ellem1 et @eriiic m'ont apporté une solution qui fonctionne très bien, que je remets en pièce jointe.
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 SubDé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.