Somme d'une plage de cellule variable entre 2 lignes vides

cri732

XLDnaute Nouveau
Bonjour,

Encore une fois, car ces derniers temps je suis souvent venu, je sollicite votre aide.

Je vous joint un fichier en pièce jointe.

Pour comprendre, activez la macro "somme", là vous verrez les résultats s'inscrire dans la cellule G.
Pour faire simple, je voudrais que ce même résultat soit restituer dans la cellule vide juste en-dessous en colonne "F" et que la plage à prendre en compte pour la somme soit toutes les cellules comprises entre 2 lignes vides.

Ce code est-il dynamique?
Autrement dit, je serai amené à faire évoluer des quantités et je voudrai savoir si le recalcule est gérer par ce bout code?

Merci par avance pour vos réponses.

Salutations.
 

Pièces jointes

  • Mise en forme tableau test4.xls
    40 KB · Affichages: 50
  • Mise en forme tableau test4.xls
    40 KB · Affichages: 49
  • Mise en forme tableau test4.xls
    40 KB · Affichages: 55

PrinceCorwin

XLDnaute Occasionnel
Re : Somme d'une plage de cellule variable entre 2 lignes vides

Bonjour,

Correction sur PJ

Bonne journée
 

Pièces jointes

  • Mise en forme tableau test4.xls
    39.5 KB · Affichages: 67
  • Mise en forme tableau test4.xls
    39.5 KB · Affichages: 66
  • Mise en forme tableau test4.xls
    39.5 KB · Affichages: 65

cri732

XLDnaute Nouveau
Re : Somme d'une plage de cellule variable entre 2 lignes vides

Bonjour PrinceCorwin,
Merci pour ta réponse. Ca marche nickel pour les sommes.
Par contre, aurais-tu une astuce pour que si je viens à changer une quantité quelconque, le recalcule se fasse automatiquement?
Je pensais carrément à faire écrire à la macro la formule "Somme(XX:XX)" dans la cellule et retransformer le format de la cellule en standard (car j'imagine que ce je demande d'écrire apparaît en format texte), mais je ne sais pas si ça marcherait.

Cependant, je te remercie encore pour la correction du code pour que la somme s'écrive au bon endroit.

Salutations.
 

cri732

XLDnaute Nouveau
Re : Somme d'une plage de cellule variable entre 2 lignes vides

Bonjour,

Quelqu'un pourrait-il m'aiguiller sur comment faire en sorte que la macro recalcule seule les sommes si une des quantités est modifiée?
Vous trouverez ci-dessus, dans les précédents messages (en particulier celui de PrinceCorwin) le tableau joint.

Merci par avance pour votre aide.

Salutations.
 

cri732

XLDnaute Nouveau
Re : Somme d'une plage de cellule variable entre 2 lignes vides

Re-bonjour,

J'ai essayé quelque chose mais sans résultat, ou plutôt si, avec "FAUX" qui s'écrit dans les cellules où je devrais avoir un résultat de somme.

Voici le bout de code que j'ai modifié :

Sub somme2()

Dim derlig As Long
Dim lig As Long
Dim lig_0 As Long

'Sommes cellule F
derlig = Range("F65536").End(xlUp).Row
lig = 1
Application.ScreenUpdating = False
While lig <= derlig
lig_0 = lig
lig = Columns(6).Find("", Cells(lig_0, 6), xlValues).Row
If Application.Sum(Range(Cells(lig_0, 6), Cells(lig, 6))) <> 0 Then
Cells(lig, 6) = FormulaR1C1 = "=Sum(R[Cells(lig_0, 6)]C, R[Cells(lig, 6)]C)"
lig = lig + 1
Else
lig = lig + 1
End If
Wend

End Sub


Je suis totalement dans le flou.

Merci par avance.

Salutations.
 

mutzik

XLDnaute Barbatruc
Re : Somme d'une plage de cellule variable entre 2 lignes vides

bonjour,

le mieux et le top, c'est :
garder ta base de données telle quelle est SANS lignes vides, uniquement avec les données
un tableau croisé dynamique qui se met automatiquement à jour sans aucune macro

comme disait ... (je sais plus qui) la meilleure des macros est celle qu'on est pas obligé d'écrire en utilisant les fonctions natives d'excel
 

cri732

XLDnaute Nouveau
Re : Somme d'une plage de cellule variable entre 2 lignes vides

Bonjour Mutzik,
Je te remercie pour ta réponse.
Je sais bien que j'aurais pu faire plus simple mais c'est une mise en forme de tableau qui ne peut être que comme cela et sur laquelle je n'ai pas le choix.
Mais du coup, vu que je dois faire cette mise en forme à la mano, je préfère encore que cela soit fait automatiquement.
D'où mon besoin.
Saurais-tu, du coup, me dire comment corriger mon code?
Merci par avance.
Salutations.
 

PrinceCorwin

XLDnaute Occasionnel
Re : Somme d'une plage de cellule variable entre 2 lignes vides

Bonjour,

peut être en modifiant la ligne
Code:
Cells(lig, 6) = FormulaR1C1 = "=Sum(R[Cells(lig_0, 6)]C, R[Cells(lig, 6)]C)"
par
Code:
Cells(lig, 6).FormulaR1C1 = "=sum(R" & lig_0 & "C:R" & lig - 1 & "C)"

Bonne journée

Edit : Erreur dans la formule.. Suppression des Crochets !!
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Somme d'une plage de cellule variable entre 2 lignes vides

Bonjour le fil, bonjour le forum,

Une proposition VBA avec la macro événementielle Change ci-dessous :

Code:
Private test As Boolean 'déclare la variable test


Private Sub Worksheet_Change(ByVal Target As Range)
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim plv As Range 'déclare la variable plv (PLage des Valeurs)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim tot As Integer 'déclare la variable tot (TOTal)

If test = True Then Exit Sub 'si test est vraie, sort de la procédure
dl = Cells(Application.Rows.Count, 6).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne 6 (=F)
Set pl = Range("F2:F" & dl) 'définit la plage pl
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
    If cel.Offset(0, -1).Value <> "" Then 'condition 1 : si la cellule à gauche n'est pas vide
        If plv Is Nothing Then 'condition 2 : si la plage plv n'a pas encore été définie
            Set plv = cel 'définit la plage plv (cellule unique)
        Else 'sinon
            Set plv = Application.Union(plv, cel) 'définit la plage plv (union des cellules)
        End If 'fin de la condition 2
    End If 'fin de la condition 1
Next cel 'prochaine cellule de la boucle
test = True 'définit la variable test
For Each cel In plv 'boucle sur toutes les cellule cel de la plage plv
    tot = tot + cel.Value 'définit le total tot
    If cel.Offset(1, -1).Value = "" Then 'condition : si la cellule en dessous de cel, colonne E est vide
        cel.Offset(1, 0).Value = tot 'place le total dans la cellule en dessous de cel
        tot = 0 'réinitialise le total tot
    End If 'fin de la condition
Next cel 'prochaine cellule de la boucle
test = False 'redéfinit la variable test
End Sub
Le fichier :
 

Pièces jointes

  • Cri_v01.xls
    56.5 KB · Affichages: 41

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 081
Membres
103 457
dernier inscrit
fab2614