Faire une somme toutes les 5 lignes d'une colonne en VBA
Résolu/Fermé
A voir également:
- Excel somme toutes les 3 lignes
- Liste déroulante excel - Guide
- Somme excel - Guide
- Aller à la ligne excel - Guide
- Somme si couleur excel - Guide
- Formule excel - Guide
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
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 :)
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é)
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
25 oct. 2016 à 10:07
Je ne sais pas, désolée... :s Peut être quelqu'un de plus expérimenté ? :p
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
25 oct. 2016 à 10:13
Merci quand même pour ton temps Camille :)
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
Modifié par michel_m le 25/10/2016 à 16:38
Modifié par michel_m le 25/10/2016 à 16:38
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
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
>
AntoineB
26 oct. 2016 à 14:13
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
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