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 Sub

Merci é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 Sub

Merci, merci, merci, merci !

C'est parfait !

Rechercher des sujets similaires à "somme iteration"