Fonction somme en macro excel

Contenu du snippet

J'ai tenté de créer une fonction excel qui fait soit la somme de plages de cellules soit le produit.

Je me suis retrouvé confronté à plus de problèmes qu'attendu et du coup je me dis que ça peut servir à quelqu'un d'autre...

J'ai d'abord eut du mal à intégrer la sélection de plusieurs plages de cellules excel pour le calcul sans en définir un nombre maximal à l'avance.
Mon deuxième problème a été de gérer les plages de cellules à 2 dimensions (plusieurs lignes et plusieurs colonnes dans la même plage)

L'intérêt de la source ne réside évidemment pas dans son utilisation tel quel puisque c'est plus ou moins un clone de la fonction SOMME, mais dans son code même s'il n'y a rien de très particulier au final.

On peut appeler la fonction aaa par le menu excel insertion/fonction
Dans param on peut mettre "s" ou "p" pour calculer une somme ou un produit
Dans plage on peut mettre des coordonnée de cellules ou de plages de cellules.
On obtient une formule du style =aaa("s";A7:B9;C7:C8;A2)

Source / Exemple :


Function aaa(Param As String, ParamArray Plage()) As String
Dim c As Variant
Dim i As Double
Dim j As Double
Dim pl1 As Long
Dim pl2 As Long

'fonction somme
If Param = "s" Then
    aaa = 0
    For Each c In Plage
        If c.Count > 1 Then
            'dimmension des données
            pl1 = UBound(c.Value, 1)
            pl2 = UBound(c.Value, 2)
            For j = 1 To pl2
                For i = 1 To pl1
                    aaa = c(i, j).Value + aaa
                Next
            Next
        Else
            aaa = c.Value + aaa
        End If
    Next
End If
'fonction produit
If Param = "p" Then
    aaa = 1
    For Each c In Plage
        If c.Count > 1 Then
            'dimmension des données
            pl1 = UBound(c.Value, 1)
            pl2 = UBound(c.Value, 2)
            For j = 1 To pl2
                For i = 1 To pl1
                    aaa = c(i, j).Value * aaa
                Next
            Next
        Else
            aaa = c.Value * aaa
        End If
    Next
End If

End Function

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.