Somme avec itération
Bonjour à tous,
Cela fait quelques jours que je cherche en vain une solution élégante à mon problème.
J'ai dans un premier onglet un tableau contenant les temps consacrés à chaque projet, une ligne par projet.
L'utilisateur a le choix de remplir le nombre d'heures consacrées par jour ou par semaine.
Une fois ces valeurs ajoutées, j'aimerai obtenir la somme de chaque semaine dans un nouvel onglet.
Je vous joint le fichier d'exemple contenant les deux onglets en question.
L'opération serait comme suit:
Set vincent = Worksheets("Vincent")
Set SumV = Worksheets("Somme Vincent")
SumV.Range("C14").Value = Application.WorksheetFunction.Sum(vincent.Range("J14:Q14"))Mais cette action serait répétée pour R14 à Y14 et ainsi de suite (donc toutes les 8 colonnes dans "vincent") en donnant le résultat toutes les colonnes dans "Somme Vincent".
Et ce pour toutes les lignes.
Je pense que c'est faisable avec 3 boucles "For" mais la façon de faire référence aux différentes plages m'échappe totalement, vous pourrez voir dans le code que j'ai essayé plusieurs choses mais en vain...
Merci par avance pour vos lumières,
Vincent
bonsoir,
si j'ai bien compris ce que tu cherches à faire.
Sub aargh()
Set vincent = Sheets("vincent")
Set sumv = Sheets("somme vincent")
For i = 1 To 30 'on remplit 30 lignes du tableau somme vincent sur base de 30 lignes de vincent
fc = 5 'première colonne contenant des données de semaine sur vincent
nc = 2 'première colonne à remplir sur sommevincent
Do
jourssemaine = vincent.Cells(8, fc).MergeArea.Cells.Count - 1 'nombre de jours pour cette semaine
Set plage = vincent.Cells(i + 12, fc + 1).Resize(1, jourssemaine) 'plage de données de la semaine (sans la première colonne)
sumv.Cells(i + 2, nc) = Application.WorksheetFunction.Sum(plage) 'on fait la somme et on remplit le somme vincent
nc = nc + 1 'colonne suivante sur somme vincent
fc = fc + jourssemaine + 1 'semaine suivante sur vincent
Loop Until vincent.Cells(8, fc) = "" 'on boucle tant qu'on a quelque chose en ligne 8
Next i
End SubMerci énormément H2So4 ! Très efficace et temps de calcul très court :)
Juste un petit détail, quel changement dois-je opérer pour quand même prendre en compte la première colonne ?
Set plage = vincent.Cells(i + 12, fc + 1).Resize(1, jourssemaine) 'plage de données de la semaine (sans la première colonne)Merci,
Vincent
bonjour,
code adapté pour inclure la première colonne
Sub aargh()
Set vincent = Sheets("vincent")
Set sumv = Sheets("somme vincent")
For i = 1 To 30 'on remplit 30 lignes du tableau somme vincent sur base de 30 lignes de vincent
fc = 5 'première colonne contenant des données de semaine sur vincent
nc = 2 'première colonne à remplir sur sommevincent
Do
jourssemaine = vincent.Cells(8, fc).MergeArea.Cells.Count 'nombre de cellules pour cette semaine + la première colonne
Set plage = vincent.Cells(i + 12, fc).Resize(1, jourssemaine) 'plage de données de la semaine (avec la première colonne)
sumv.Cells(i + 2, nc) = Application.WorksheetFunction.Sum(plage) 'on fait la somme et on remplit le somme vincent
nc = nc + 1 'colonne suivante sur somme vincent
fc = fc + jourssemaine 'semaine suivante sur vincent
Loop Until vincent.Cells(8, fc) = "" 'on boucle tant qu'on a quelque chose en ligne 8
Next i
End SubMerci, merci, merci, merci !
C'est parfait !