Code VBA: somme de cellules avec boucle unique

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 !

thomas4530

XLDnaute Junior
Bonsoir,

Je débute sur VBA et je souhaiterais un petit coup de main pour terminer un premier "devoir".

Je souhaiterais développer un code permettant de réaliser des sommes de cellules, le tout étant inclus dans une boucle. J'ai développé un code (il vaut ce qu'il vaut...) mais cela ne fonctionne pas. Par exemple:
- en C4 indiquer la somme des cellules C45, C86, C127, C168... jusque C902.
- en C5 indiquer la somme des cellules C46, C87, C128, C169... jusque C903.
- en C6 indiquer la somme des cellules C47, C88, C129, C170... jusque C904.
...
- en C40 indiquer la somme des cellules C81, C122, C163, C204... jusque C938.

A chaque fois, le bond est de 41 (pour cela qu'une boucle me parait possible...

Vous comprenez l'intérêt de ma boucle, elle m'épargne 36 lignes (sachant que je dois réaliser le tout sur plusieurs colonnes...)

Voici le code auquel j'avais pensé:

Sub synthese()
Dim j As Long
For j = 4 To 40
Cells(j, 3) = Cells(j + 41, 3) + Cells(j + 82, 3) + Cells(j + 123, 3) + Cells(j + 164, 3) + Cells(j + 205, 3) + Cells(j + 246, 3) + Cells(j + 287, 3) + Cells(j + 328, 3) + Cells(j + 369, 3) + Cells(j + 410, 3) + Cells(j + 451, 3) + Cells(j + 492, 3) + Cells(j + 533, 3) + Cells(j + 574, 3) + Cells(j + 615, 3) + Cells(j + 656, 3) + Cells(j + 697, 3) + Cells(j + 738, 3) + Cells(j + 779, 3) + Cells(j + 820, 3) + Cells(j + 861, 3)
Next
End Sub

Merci de votre aide,

Thomas
 
Re : Code VBA: somme de cellules avec boucle unique

Bonsoir
A tester

Code:
Sub test()
Dim deb As Integer, fin As Integer, i As Integer, j As Integer, truc as long

deb = 45
fin = 902
For i = 4 To 40
    For j = deb To fin Step 41
        truc = truc + Range("C" & j)
    Next j
Range("c" & i) = truc
deb = deb + 1
fin = fin + 1
Next i
End Sub
 
Re : Code VBA: somme de cellules avec boucle unique

bonsoir à tous,

s'il s'agit de somme de cellules contenant du texte , on parle plutôt de concaténation.

S'il s'agit bien de cela, le code de Misange est utilisable pour cette concaténation, à 2 modifications près:

- changer la déclaration de truc as long en : truc As String
- rajouter juste avant Next i : truc = ""

Nota, pour les concaténations on utilise plus couramment : &
Ex : truc = truc & Range("C" & j)

Bonne suite
 
Dernière édition:
Re : Code VBA: somme de cellules avec boucle unique

Bonsoir le forum..

En effet si concaténation de chaine.. En complèment à ce qui vient d'être dit:

il peut s'averer necessaire ( ou pas, selon cas et résultat attendu) ... d'inserer un espace entre les valeurs concaténées

comme ceci:

truc = truc & " " & Range("C" & j)

bonne journée 🙂
 
Re : Code VBA: somme de cellules avec boucle unique

Bonjour à tous, Bonjour Misange

Peut-être ceci en tenant en compte de la boucle de misange !

Code:
Sub test()
Dim deb As Integer, fin As Integer, i As Integer, j As Integer, truc As String

deb = 45
fin = 902
Range("C4:C40").ClearContents
For i = 4 To 40
If Cells(i, 3) = "" Then
    For j = deb To fin Step 41
        truc = truc + Range("C" & j)
        Range("c" & i) = 1
    Exit For
    Next j
ElseIf Range("c" & i) <> "" Then
Exit Sub
End If
Next i
Range("C41").FormulaR1C1 = "=SUM(R[-37]C:R[-1]C)"
End Sub

Bonne journée à tous
 

Pièces jointes

Dernière édition:
Re : Code VBA: somme de cellules avec boucle unique

Re,

Une dernière question: comment puis-je adapter la boucle pour que le code se répète également les colonnes:
- C --> N.
- P --> AA.
- AC --> AN.
- AP --> BA.
- BC --> BN.

Histoire de ne pas écrire le code 60 fois le code ?

Merci encore une fois pour votre aide,

Thomas

Dim deb As Integer, fin As Integer, k As Integer, j As Integer, truc As String
deb = 45
fin = 2131
For k = 4 To 40
For j = deb To fin Step 41
truc = truc + Range("C" & j)
Next j
Range("c" & k) = truc
deb = deb + 1
fin = fin + 1
truc = ""
Next k
 
Re : Code VBA: somme de cellules avec boucle unique

Bonjour,

Merci pour ta réponse misange 😀 ...

Je me doute qu'il faut ajouter une boucle supplémentaire (sur les colonnes cette fois) et que donc, comme conseillé par mutzik, je ne peux plus utiliser l'expression range mais dois utiliser l'expression cells. Comme cela ça parait facile mais pour réaliser, je ne vois pas trop.

J'aurais tendance à définir une nouvelle variable NoCol, à travailler à partir de la colonne 3, et à chaque fois remplacer Range("C"....) par Cells(NoCol ...). Est-ce correct jusque là ?

Sub c_l()
Dim deb As Integer, fin As Integer, k As Integer, j As Integer, truc As String, NoCol As Integer
deb = 45
fin = 2131
NoCol = 3
For k = 4 To 40
For j = deb To fin Step 41
truc = truc + Cells(NoCol & j)
Next j
Cells(NoCol & k) = truc
deb = deb + 1
fin = fin + 1
truc = ""
Next k
End Sub

Reste tout de même (au delà des corrections) un gros problème: définir la boucle colonne sur les colonnes 3-14, 16-27, 29-40, 42-53, 55-66. Et là, je ne vois pas du tout mais après avoir cherché...

Si quelqu'un pouvait m'aider...

Thomas
 
Re : Code VBA: somme de cellules avec boucle unique

Bonjour

tu peux créer un tableau que tu initialise avec les numéros (ou les noms) des colonnes ex toto.
ta boucle, tu la fait traivailler de 1 jusqu'au dernier élement du tableau précedant ex ubound(toto)
et tu travailles avec toto(xxx) pour obtenir la référence de la colonne

ca permet de faire l'analyse dans sens (sans ordre logique)
C45, C86, C127, C168 pourrais devenir C86, C127, C45, C168
 
- 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
Retour