Somme de cellules contigües en utilisant « CurrentRegion »

  • Initiateur de la discussion Initiateur de la discussion Chrige
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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+
 
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
 
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+
 
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
 
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+
 
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+
 
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 ;-)
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour