Faire une somme toutes les 5 lignes d'une colonne en VBA [Résolu/Fermé]

Signaler
-
 AntoineB -
Bonjour à tous les membres,

Débutant en VBA, je souhaiterais faire une somme toutes les 5 lignes d'une longue colonne et inscrire la somme dans la colonne d'à côté (qui sera donc 5 fois plus petite).

Auriez-vous une idée ?

Merci pour votre aide :)

3 réponses

Messages postés
29
Date d'inscription
lundi 24 octobre 2016
Statut
Membre
Dernière intervention
12 juin 2017

Tu peux faire par enregistrement de macro :
Affichage > Macros > Enregistrer une macro.
Donne un nom à ta macro.
Éventuellement aussi un raccourci et une description.
Ensuite tu cliques sur ok et un petit carré bleu/gris apparaît en bas a gauche de ton écran. Ça indique qu'il enregistre.
Va dans la cellule ou tu veux avoir la résultat et rentre ta formule =SOMME(...;...).
Fais entrer pour valider, et ensuite va cliquer sur le petit carré bleu/gris pour arrêter l'enregistrement.
Ensuite, va dans l'interface VBA via le développeur, et sur un module tu trouveras le code correspondant.
J'espère avoir été claire :)
Tout d'abord merci Camille pour ton aide.

J'ai suivi toutes tes instructions et cette méthode d'enregistrement de macro est vraiment intéressante.

Pour le moment, la macro somme de la ligne 1 à 5 et affiche à côté comme prévu. Sais-tu comment écrire dans la macro la procédure pour qu'il effectue cette opération jusqu'au bout de la colonne ? (Somme de la ligne 6 à 11, puis de 12 à 17 ... avec affichage à chaque fois dans la colonne d'à côté)
Messages postés
29
Date d'inscription
lundi 24 octobre 2016
Statut
Membre
Dernière intervention
12 juin 2017

Je ne sais pas, désolée... :s Peut être quelqu'un de plus expérimenté ? :p
>
Messages postés
29
Date d'inscription
lundi 24 octobre 2016
Statut
Membre
Dernière intervention
12 juin 2017

Merci quand même pour ton temps Camille :)
Messages postés
16477
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
10 juin 2021
3 189
Bonjour

5/100 de secondes pour traiter 10000 lignes

Edit 16:35h : ajouté commentaires

Option Explicit
Option Base 1
Const Deblig As Long = 1 ' A ADAPTER AU CONTEXTE
Const Col As String * 1 = "A" ' A ADAPTER AU CONTEXTE
'-------------------------------------

Sub add_sur_5_lig()
Dim Derlig As Long, T_in, Nbre As Integer, T_out, Cptr As Long, Cpt As Integer, Somme As Double
Dim Start As Single

'----------initialisations
Start = Timer
Application.ScreenUpdating = False 'fige l'écran:confort & rapidité
'dernière ligne utilisée
Derlig = Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row
'mémorisation en RAM du tableau à traiter
T_in = Range(Cells(Deblig, Col), Cells(Derlig, Col))
'mémorisation en ram de la taille du tableau de résultat
Nbre = UBound(T_in) / 5
ReDim T_out(Nbre, 1)

'----------traitement
Cpt = 1 'compteur t_out
For Cptr = 1 To UBound(T_in)
Somme = Somme + T_in(Cptr, 1)
'mod 5 renvoie 0 si Cptr multiple de 5
If Cptr Mod 5 = 0 Then
'résultat
T_out(Cpt, 1) = Somme
'raz somme pour calcul des 5 suivants
Somme = 0
Cpt = Cpt + 1
End If
Next

'-----------restitution en feuille 2
With Sheets(2)
.Columns("A").Clear 'nettoyage
With .Range("A1").Resize(UBound(T_out, 1))
'valeurs
.Value = T_out
.Borders.Weight = xlThin
End With
.Activate
End With

'---------------------------------la macro rend la main
Application.ScreenUpdating = True
MsgBox "durée sur " & UBound(T_in) & " lignes en " & Round(Timer - Start, 2) & " secondes."

End Sub

 Michel
Merci Michel ! Ta solution marche parfaitement :)
J'étais assez loin de la réalité avec mes tentatives ...

Ayant beaucoup de lignes, la macro m'affiche un dépassement de capacité.
Saurais-tu résoudre ce détail ?
Messages postés
16477
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
10 juin 2021
3 189 > AntoineB
bonjour

essaie
Dim Derlig As Long, T_in, Nbre As long, T_out, Cptr As Long, Cpt As Long, Somme As Double

tu dis, car autrement....mystère
Ça n'a pas marché malheureusement. Mais je vais répéter l'opération plusieurs fois et j'obtiendrai tout ce que je souhaite, la macro me fait déjà gagner un temps considérable

Merci bien en tout cas !