Faire une somme toutes les 5 lignes d'une colonne en VBA
Résolu
AntoineB
-
AntoineB -
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 :)
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 :)
A voir également:
- Excel somme toutes les 3 lignes
- Formule somme excel colonne - Guide
- Liste déroulante excel - Guide
- Somme si couleur excel - Guide
- Aller à la ligne excel - Guide
- Word et excel gratuit - Guide
3 réponses
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 :)
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é)
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é)
Bonjour
5/100 de secondes pour traiter 10000 lignes
Edit 16:35h : ajouté commentaires
Michel
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