Faire une somme toutes les 5 lignes d'une colonne en VBA

Résolu/Fermé
AntoineB - Modifié par AntoineB le 25/10/2016 à 09:18
 AntoineB - 26 oct. 2016 à 15:57
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

CamilleDR Messages postés 29 Date d'inscription lundi 24 octobre 2016 Statut Membre Dernière intervention 12 juin 2017
25 oct. 2016 à 09:22
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 :)
0
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é)
0
CamilleDR Messages postés 29 Date d'inscription lundi 24 octobre 2016 Statut Membre Dernière intervention 12 juin 2017
25 oct. 2016 à 10:07
Je ne sais pas, désolée... :s Peut être quelqu'un de plus expérimenté ? :p
0
AntoineB > CamilleDR Messages postés 29 Date d'inscription lundi 24 octobre 2016 Statut Membre Dernière intervention 12 juin 2017
25 oct. 2016 à 10:13
Merci quand même pour ton temps Camille :)
0
michel_m Messages postés 16582 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 27 novembre 2022 3 284
Modifié par michel_m le 25/10/2016 à 16:38
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
0
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 ?
0
michel_m Messages postés 16582 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 27 novembre 2022 3 284 > AntoineB
26 oct. 2016 à 14:13
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
0
Ç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 !
0