XL 2019 somme dans une cellule générée par une boucle VBA

Merlinlempaffeur

XLDnaute Nouveau
Bonjour à tous,

Je génère un nombre de tableaux "x" dans une feuille excel à partir d'une boucle VBA qui vient lire la valeur "x" rentrée par l'utilisateur et copie "x" fois une plage de cellules.
Je souhaiterais pouvoir écrire par le biais de VBA une formule dans une cellule unique sommant "x" cellule (a;b) ayant une position fixe dans mes "x" tableaux.
J'ai beau avoir fait des recherches, je n'arrive pas à m'en dépêtrer. Pour info, je suis tout juste débutant donc si vous pouvez adapter vos réponses à mes faibles connaissances, ça serait sympa :).

Merci par avance pour vos éventuels retours.
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, Merlin (>Bienvenue sur le forum<)

Pour info, je ne suis plus du tout débutant sur le forum, donc si vous pouvez vous adapter aux us et coutumes du forum* , ça serait sympa ;)

*: En l’occurrence, suivre le judicieux conseil de la charte du forum qui invite à joindre un fichier Excel exemple pour illustrer la question.
 

job75

XLDnaute Barbatruc
Bonsoir Merlinlempaffeur, JM, Robert,

Plutôt que d'attendre un fichier peut-être tordu je préfère le faire moi-même avec cette macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MonNombre As Range, Maplage As Range, Somme As Range, n%, decal%, f$
Set MonNombre = [A2] 'à adapter
Set Maplage = [A4:C12] 'à adapter
Set Somme = [A15:C22] 'à adapter
If Intersect(Target, MonNombre) Is Nothing Then Exit Sub
If Abs(Int(Val(CStr(MonNombre)))) < 1 Then MonNombre = 1
If Int(MonNombre) <> MonNombre Then MonNombre = Int(MonNombre)
decal = Maplage.Columns.Count + 1
Application.ScreenUpdating = False
Maplage.Offset(, decal).Resize(, Columns.Count - decal - Maplage.Column + 1).Clear 'RAZ
For n = 1 To MonNombre
    Maplage.Copy Maplage.Offset(, (n - 1) * decal)
    Maplage.Offset(, (n - 1) * decal).Cells(1) = "MaPlage" & n
    f = f & "," & Maplage.Offset(, (n - 1) * decal).Cells(2, 1).Address(0, 0)
Next
Somme(1) = "=SUM(" & Mid(f, 2) & ")"
Somme(1).Copy Somme
End Sub
A+
 

Pièces jointes

  • MesTableaux(1).xlsm
    24.5 KB · Affichages: 15

Merlinlempaffeur

XLDnaute Nouveau
Bonsoir Robert

Je plussoie Robert, au mieux un classeur Excel (et pas une copie d'écran) et le code VBA inside
(et en bonus, des explications en sus)
;)
Bonjour à tous,

Je génère un nombre de tableaux "x" dans une feuille excel à partir d'une boucle VBA qui vient lire la valeur "x" rentrée par l'utilisateur et copie "x" fois une plage de cellules.
Je souhaiterais pouvoir écrire par le biais de VBA une formule dans une cellule unique sommant "x" cellule (a;b) ayant une position fixe dans mes "x" tableaux.
J'ai beau avoir fait des recherches, je n'arrive pas à m'en dépêtrer. Pour info, je suis tout juste débutant donc si vous pouvez adapter vos réponses à mes faibles connaissances, ça serait sympa :).

Merci par avance pour vos éventuels retours.
Bonsoir Robert

Je plussoie Robert, au mieux un classeur Excel (et pas une copie d'écran) et le code VBA inside
(et en bonus, des explications en sus)
;)
Bonsoir Robert

Je plussoie Robert, au mieux un classeur Excel (et pas une copie d'écran) et le code VBA inside
(et en bonus, des explications en sus)
;)
Bonsoir à vous tous et merci pour les retours rapides.
Merci à Job75 dont le code semble contenir la réponse à ma question mais reste relativement obscur pour moi pour le moment.

Je vous joins tout de même mon fichier qui n'apporte pas grand chose ( je n'ai pas conservé mes malheureuses tentatives pour cette fonction) mais permettra au moins d'illustrer ce que je veux faire.

Sur l'exemple, il y a 3 tableaux de générés et je souhaite écrire en VBA une formule dans la cellule (6,i) qui somme les "x" cellules :
= cellules(15,F) + (41,F) + (67,F) + ....

Les tableaux peuvent être agrémentés ultèrieurement de lignes supplémentaires par insertion (exemple tableau 1 insertion de ligne possible entre lignes 17 à 24 et 27 à 33 et la somme doit toujours correspondre aux cellules définies initialement.

Je sais aller chercher ces différentes cases par le biais d'une boucle mais le nombre de tableaux étant variable, je ne sais pas comment générer la formule d'une somme d'un nombre variable de termes.

Merlin
 

Pièces jointes

  • Modèle.xls
    127.5 KB · Affichages: 12
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Merlinlempaffeur, JM, Robert, le forum,

Le tableau est "tordu" car il est incomplet.

On ne sait pas quelles sont les cellules qu'il faut additionner ni où doit se mettre le résultat.

Cela dit il n'est pas très difficile d'adapter dans le fichier joint la macro que j'ai donnée précédemment :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MonNombre As Range, Somme As Range, Maplage As Range, n%, decal%, f$
Set MonNombre = [F2] 'à adapter
If Intersect(Target, MonNombre) Is Nothing Then Exit Sub
'Set Somme = XXX 'à définir
If Abs(Int(Val(CStr(MonNombre)))) < 1 Then MonNombre = 1
If Int(MonNombre) <> MonNombre Then MonNombre = Int(MonNombre)
Set Maplage = Range(Cells.Find("Sous-chapitre 1", , xlValues), Cells.Find("Sous-total")).EntireRow
decal = Maplage.Rows.Count + 2
Application.ScreenUpdating = False
Maplage.Offset(decal).Resize(Rows.Count - decal - Maplage.Row + 1).Clear  'RAZ
For n = 1 To MonNombre
    Maplage.Copy Maplage.Offset((n - 1) * decal)
    Maplage.Offset((n - 1) * decal).Cells(1) = "Sous-chapitre " & n
    Maplage.Offset((n - 1) * decal).Cells(2, 6) = "total " & n
    'f = f & "," & xxx.Address(0, 0) 'à définir
Next
End Sub
A+
 

Pièces jointes

  • Modèle(1).xls
    121 KB · Affichages: 10

Merlinlempaffeur

XLDnaute Nouveau
Bonjour Job75 et merci pour votre aide.
Bien que ce code ne soit pas très difficile à adapter, je ne "pratique" VBA que depuis quelques jours et comme vous l'aurez deviné, le codage n'est pas mon métier ce qui fait que j'ai quand même un peu galéré pour le comprendre et l'adapter.
Ca fonctionne maintenant mais pourriez-vous m'éclaircir sur :

- les déclarations : "f$", "n%"

- le fonctionnement de :

Somme(1) = "=SUM(" & Mid(f, 2) & ")"
Somme(1).Copy Somme


Merci par avance.

Merlin
 

job75

XLDnaute Barbatruc
Bonjour Merlin,

Dim f$ => déclare f As String

Dim n% => déclare n As Integer

Somme(1) = "=SUM(" & Mid(f, 2) & ")" => entre la formule dans la 1ère cellule de la plage Somme

Somme(1).Copy Somme => copie la 1ère cellule sur toute la plage Somme.

Il est plus simple d'écrire en une seule fois Somme = "=SUM(" & Mid(f, 2) & ")"

A+
 

Discussions similaires