[MACRO] Additionner une plage en fonction d'un critère

  • Initiateur de la discussion Initiateur de la discussion GuizmoD
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

GuizmoD

XLDnaute Nouveau
Bonjour à tous,

Me voilà face à un nouveau problème de macro.

j'ai commencé à écrire un code afin de réaliser un écart de deux colonnes en fonction d'un critère mais je ne vois pas comment je peux maintenant faire une addition des lignes d'écarts dont le nombre de cellules au dessus de cette somme varie et cette somme doit se situer seulement sur certaines lignes.

Il est difficile d'être clair je vous ai donc fait un fichier récap.

La somme que j'aimerais faire automatiquement se situe dans les cellules jaunes mais la ligne peut bouger car c'est une base de donnée alimenté automatiquement par macro et le nombre de ligne entre chaque somme peut également bouger.

La fonction "Xlup" ne me paraît pas adéquat car celle-ci s'arrête à la première cellule vide or il peut y en avoir entre chaque somme.

Je me fais des noeuds au cerveau depuis 2h j'en peux plus.

J'espère que vous allez savoir m'aider mais je n'en doute pas.

Merci d'avance

GuizmoD
 

Pièces jointes

Re : [MACRO] Additionner une plage en fonction d'un critère

Bonjour.

Comme ça:
VB:
Sub FormuleEBITDA()
Dim L As Long, LDéb1 As Long, LDéb2 As Long
DernLigne = Columns(1).Find("Chiffre d'affaires net").Row
LDéb1 = 2: LDéb2 = 2
For L = 2 To DernLigne
   If Cells(L, 1) <> "" Then
      If Cells(L - 1, 1) <> "" Then
         Cells(L, 8).FormulaR1C1 = "=SUBTOTAL(9,R" & LDéb1 & "C:R[-2]C)"
         LDéb1 = L + 1
      Else
         Cells(L, 8).FormulaR1C1 = "=SUBTOTAL(9,R" & LDéb2 & "C:R[-1]C)"
         LDéb2 = L + 1: End If
   ElseIf Cells(L, 3) <> "" And Not Cells(L, 3) Like "681*" _
      And Not Cells(L, 3) Like "781*" And Cells(L, 3) <> 777010 _
      And Cells(L, 3) <> 775217 And Cells(L, 3) <> 675217 _
      And Cells(L, 3) <> 777000 Then
      Cells(L, 8).Value = Cells(L, 7) - Cells(L, 6)
      End If
   Next L
End Sub
 
Re : [MACRO] Additionner une plage en fonction d'un critère

Super je te remercie en effet ça fonctionne mais j'aimerais comprendre et la partie subtotal avec les variables Ldéb1 et Ldéb2 m'échappe. Peux-tu m'expliquer afin que je sache le refaire seul.

Cordialement,

GuizmoD
 
Re : [MACRO] Additionner une plage en fonction d'un critère

D'abord il faut savoir qu'au contraire de la fonction SOMME, la fonction SOUS.TOTAL a pour propriété très commode de ne pas intégrer dans son calcul les valeurs des cellules qui utilisent elles même cette fonction. On peut donc englober sans se poser de question tout l'ensemble des lignes détail qu'on veut sommer. D'une ligne LDéb jusqu'a la ligne d'avant celle où on est. Mes LDéb commencent à 2. Le LDéb1 est appliqué quand on rencontre une colonne 1 non vide pour la 2ième fois consécutive. Et à l'avenir il repartira de la ligne suivant celle ou on est. Pour le LDéb1 c'est pareil sauf que c'est à chaque rencontre d'une cellule non vide en colonne A.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
976
Retour