Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Calcul de cellules (quantité variable sur chaque onglet) (résolu)

  • Initiateur de la discussion Initiateur de la discussion Cougar
  • 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 !

Cougar

XLDnaute Impliqué
Bonjour le forum,

Le code que j'utilise fait le tri en fonction de la colonne A. Par la suite, il insère un ligne vide entre chaque groupe de machines.
Je cherche comment écrire les lignes de code pour que la somme de groupe de machine se retrouve dans la colonne I. Dans le fichier joint, le total en I4 est la somme de I2 + I3. Le total en I8 = I5+I6+I7. Selon les journée,le nombre de lignes peut varier. Je ne peux donc pas utiliser RC.

Merci
 

Pièces jointes

Dernière édition:
Re : Calcul de cellules (quantité variable sur chaque onglet)

Bonsoir Cougar, bonsoir le forum,

En pìece jointe ton fichier modifié avec le code ci-dessous :
Code:
Sub Bouton1_Clic()
Dim O As Object 'déclare la variable O (Onglet)
Dim DL As Long 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim I As Long 'déclare la variable I (Incrément)
Dim NL As Integer 'déclare la variable NL (Numéro de Ligne)

Set O = Sheets("Feuil1") 'définit l'onglet O
DL = O.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet O
Set PL = O.Range("A3:I" & DL) 'définit la plage pl
PL.Copy 'copy la plage pl
O.Range("A3").PasteSpecial (xlPasteValues) 'collage spécial "Valeurs"
Application.CutCopyMode = False 'supprime le clignotement de la plage lié au "copier"
With O 'prend en compte l'onglet O
    .Sort.SortFields.Clear 'supprime d'eventuels tris précédents
    'tri la plage pl par rapport à la colonne A
    .Sort.SortFields.Add Key:=O.Range("A3"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
End With 'fin de la prise en compte de l'onglet O
With O.Sort 'prend en compte le tri de l'onglet O
    .SetRange PL 'plage à trier
    .Header = xlNo 'pas d'en-ête
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With 'fin de la prise en compte du tri de l'onglet O
NL = 1 'initialise la variabel NL
For I = DL To 3 Step -1 'boucle inversée de la dernière ligne Dl à la ligne 3 par pas de -1
    'condition si la cellule de référence en colonne A est différente de celle au-dessus d'elle
    If O.Cells(I, 1).Value <> O.Cells(I - 1, 1).Value Then
        'place la formule de la somme dans la cellule de référence décalée de (NL-1) lignes vers le bas et de 8 colonne à droite
        O.Cells(I, 1).Offset(NL - 1, 8).FormulaR1C1 = "=SUM(R[" & -(NL - 1) & "]C[-1]:RC[-1])"
        Rows(I).Insert xlDown 'insère une ligne au dessus
        NL = 1 'réinitialise NL
    Else 'sinon
        NL = NL + 1 'incrément NL
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
End Sub
Le fichier :
 

Pièces jointes

Re : Calcul de cellules (quantité variable sur chaque onglet)

Bonjour Robert, le forum,

Merci pour le code. Plus compliqué que je le croyais.

Reste à le modifier pour qu'il prenne en compte H2+H3.

Merci
 
Re : Calcul de cellules (quantité variable sur chaque onglet)

Bonjour Cougar, bonjour le forum,

Dans ton premier fichier exemple je n'ai pas compris pourquoi tu commençais à la ligne 3 et pas à la 2 ? J'ai modifié le code mais je ne suis pas sûr que ce soit ce que tu demandes.
Pourrais-tu dans le même fichier mettre dans un onglet le tableau avant traitement par la macro et, dans un autre onglet, le tableau tel que tu le voudrais... Ça me permettra peut-être de comprendre...
Le code modifié :
Code:
Sub Bouton1_Clic()
Dim O As Object 'déclare la variable O (Onglet)
Dim DL As Long 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim I As Long 'déclare la variable I (Incrément)
Dim NL As Integer 'déclare la variable NL (Numéro de Ligne)

Set O = Sheets("Feuil1") 'définit l'onglet O
DL = O.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet O
Set PL = O.Range("A2:I" & DL) 'définit la plage pl
PL.Copy 'copy la plage pl
O.Range("A2").PasteSpecial (xlPasteValues) 'collage spécial "Valeurs"
Application.CutCopyMode = False 'supprime le clignotement de la plage lié au "copier"
With O 'prend en compte l'onglet O
    .Sort.SortFields.Clear 'supprime d'eventuels tris précédents
    'tri la plage pl par rapport à la colonne A
    .Sort.SortFields.Add Key:=O.Range("A2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
End With 'fin de la prise en compte de l'onglet O
With O.Sort 'prend en compte le tri de l'onglet O
    .SetRange PL 'plage à trier
    .Header = xlNo 'pas d'en-ête
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With 'fin de la prise en compte du tri de l'onglet O
NL = 1 'initialise la variabel NL
For I = DL To 2 Step -1 'boucle inversée de la dernière ligne Dl à la ligne 3 par pas de -1
    'condition si la cellule de référence en colonne A est différente de celle au-dessus d'elle
    If O.Cells(I, 1).Value <> O.Cells(I - 1, 1).Value Then
        'place la formule de la somme dans la cellule de référence décalée de (NL-1) lignes vers le bas et de 8 colonne à droite
        O.Cells(I, 1).Offset(NL - 1, 8).FormulaR1C1 = "=SUM(R[" & -(NL - 1) & "]C[-1]:RC[-1])"
        Rows(I).Insert xlDown 'insère une ligne au dessus
        NL = 1 'réinitialise NL
    Else 'sinon
        NL = NL + 1 'incrément NL
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
End Sub
Le fichier :
 

Pièces jointes

- 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

  • Question Question
Microsoft 365 Filtre Dynamique
Réponses
5
Affichages
253
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…