Somme de cellules contigües en utilisant « CurrentRegion »

Chrige

XLDnaute Occasionnel
Bonjour à tous

Je souhaite par macro obtenir la somme (Avec la formule dans la cellule)
de cellules contigües en utilisant « CurrentRegion »
(Pour l’instant je ne l’ai fait que dans une colonne !

Dans l’exemple joint
Je souhaite donc obtenir en C12 la formule « =SOMME(C5:C11) »

Le but final c’est de pouvoir faire la même chose avec la même macro sur d’autres cellules contigües
Comme par exemple en E10

J’avais pensé récupérer ActiveCell.CurrentRegion.Address dans une variable
Puis ensuite utiliser ActiveCell.Formula = Application.WorksheetFunction.Sum(MaVariable)
Mais MaVariable ne comporte pas de guillemets !
Et je n’ai pas trouvé de moyen pour en adjoindre.

Je me suis donc tourné vers une 2ème solution en utilisant
Le nombre de cellules sélectionnées avec « .Count ».
Comme vous pourrez le voir cela fonctionne
Mais j’aurai préféré la 1ère méthode avec « adresse »
Et en plus cette solution pourrait m'être utile dans d’autres macros

Le tout est de trouver le moyen de lui adjoindre des guillemets pour l’introduire dans la fonction « Sum ».
Si vous avez une idée ??
Merci

A+
 

Pièces jointes

  • SommeCurrentRegion.xlsm
    21.7 KB · Affichages: 23

eriiic

XLDnaute Barbatruc
Bonjour,

je ne vois pas très bien ton but ni quel est ton problème exact, mais sache qu'il est déconseillé en général de travailler avec ActiveCell. Rien ne te garantit que l'utilisateur sera bien au bon endroit.
Il faut éviter aussi les .Select inutiles (presque tous...)
VB:
MsgBox Application.Sum(ActiveCell.CurrentRegion)
eric
 

Chrige

XLDnaute Occasionnel
Bonjour PierreJean
Merci pour ton aide et c'est bien vu
Fallait y penser !
Ce n'est pas la solution avec l'adresse comme je cherche à le faire
C'est d’ailleurs peut être impossible ...
Mais c'est un code clair et concis

A+
 

eriiic

XLDnaute Barbatruc
Re,

Si c'est possible. Pierrejean t'as détaillé que ce soit plus lisible, c'est tout.
Mais je ne vois toujours le but...
Si l'utilisateur reclique le bouton, ça va rajouter une somme en-dessous, qui inclura la somme déjà mise (?!?). Et comme ça tant qu'on veut...
La seule logique serait que le bouton soit à usage unique mais dans ce cas autant mettre directement la formule.

Tu peux aussi déclarer ta plage en Tableau, et ajouter une ligne des totauxqui se mettre en-dessous.
eric
 

Chrige

XLDnaute Occasionnel
Re,
Tu n'a peut-être pas bien lu mon post
Le but final c’est de pouvoir faire la même chose avec la même macro sur d’autres cellules contigües
Quand à l'utilisation par le biais de l'adresse, comme je l'avais également précisé
cette solution pourrait m'être utile dans d’autres macros

Il est vrai que si l'on reclique sur la zone on obtient un nouveau total, mais il paraitrai saugrenu de mettre un total là ou il y en a déjà un
De plus on peut très facilement effacer le total en 1er avec la macro, ce qui ôterait tout risque d'erreur
Mais encore une fois, le but recherché n'est pas là.
J'ai créé cet exemple pour que ma discussion soit plus claire et explicite, mais ce n'est qu'un exemple et il ne faut pas y voir autre chose.

Mon but principal était de savoir si on peut utiliser "ActiveCell.CurrentRegion.Address" avec la fonction "Sum"
A+
 

eriiic

XLDnaute Barbatruc
Bien sûr puisque .Address te retourne l'adresse d'un Range. J'ai quand même mis un With pour alléger la ligne :
VB:
    With ActiveCell.CurrentRegion
        .Offset(.Rows.Count).Resize(1).Formula = "=Sum(" & .Address & ")"
    End With
eric
 

Chrige

XLDnaute Occasionnel
Bonsoir Eric
J'ai fini par trouver ce que je cherchais à faire

Code:
Sub SommeCellules()
Dim Sm As String
Worksheets("Feuil1").Activate
ActiveCell.CurrentRegion.Select
Sm = "=SUM(" & (ActiveCell.CurrentRegion.Address) & ")"
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell = Sm
End Sub

Je regarde ton code et je reviens
A+
 

Chrige

XLDnaute Occasionnel
Bonsoir Eric

J'ai bien peur de ne toujours pas comprendre ??

Tu te sers de ce code : ".Offset(.Rows.Count).Resize(1)"
pour te placer sur la ligne qui va recevoir le total ?

Dans ce cas quel est la valeur de (.Rows.Count).Resize(1) ?

A+
 

eriiic

XLDnaute Barbatruc
Tu te sers de ce code : ".Offset(.Rows.Count).Resize(1)"
pour te placer sur la ligne qui va recevoir le total ?
Tout à fait

Dans ce cas quel est la valeur de (.Rows.Count).Resize(1) ?
.Rows.Count étant le nombre de lignes de la plage, ça la décale d'autant pour se trouver en-dessous.
Mais pourquoi cette question puisque tu as la réponse en regardant où s'inscrit la formule ? Faut être logique des fois ;-)
 

Discussions similaires

Réponses
26
Affichages
365

Statistiques des forums

Discussions
312 111
Messages
2 085 392
Membres
102 882
dernier inscrit
Sultan94