Code VBA: somme de cellules avec boucle unique

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
 

Misange

XLDnaute Barbatruc
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
 

Paf

XLDnaute Barbatruc
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:

Isab

XLDnaute Occasionnel
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 :)
 

JBARBE

XLDnaute Barbatruc
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

  • Calcul_Nombre_de_cellules_lettres.xls
    58.5 KB · Affichages: 48
Dernière édition:

mutzik

XLDnaute Barbatruc
Re : Code VBA: somme de cellules avec boucle unique

bonjour les gens, bonne année

ou comment se passer d'une macro
pour info, la dernière ligne n'est pas C902 (incrément de 41) mais C906 (voir fichier joint)
 

Pièces jointes

  • xld.xls
    259 KB · Affichages: 41
  • xld.xls
    259 KB · Affichages: 38
  • xld.xls
    259 KB · Affichages: 41

thomas4530

XLDnaute Junior
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
 

thomas4530

XLDnaute Junior
Re : Code VBA: somme de cellules avec boucle unique

Bonjour,

Merci pour ta réponse misange :D ...

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
 

tbft

XLDnaute Accro
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
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 489
Messages
2 088 855
Membres
103 977
dernier inscrit
Hermet