Somme jusqu' à la première case vide

DIRFIVI

XLDnaute Nouveau
Bonjour,
J'ai besoin un peu d'aide.SVP
Je cherche à faire en sorte d'avoir la somme dans la colonne jusqu'à la première case vide.
Exemple:
En C2 je veux la somme de C3 jusqu'à C8 puis étendre somme de D2 la somme de D3 jusqu'à D8.
Puis en C9 la somme de C10 à C20 puis étendre
Je vous remercie de votre aide.
Bonne journée,
 

Pièces jointes

  • Fourn.xlsx
    37.4 KB · Affichages: 14

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Dirfivi, bonjour le forum,

Pour élaborer un code comme tu le demandes il faut repérer les cellules vides. Je ne sais pas comment tu obtiens les données de ton fichier mais il semblerait qu'il y ait des caractères fantômes, que je n'arrive pas à identifier, dans ton tableau.
Le code :

VB:
Cells.SpecialCells(xlCellTypeBlanks).Select
Ne me sélectionne que la cellule A701 ?!... Impossible de repérer les cellule vides. Si c'est pour le faire manuellement, autant que tu les fasses toi, non ?!
 

job75

XLDnaute Barbatruc
Bonjour DIRFIVI, bienvenue sur XLD, salut Robert,

Les "fantômes" son des textes vides "", c'est classique.

Voyez le fichier joint et ce code, à placer dans un module standard :
VB:
Sub Somme()
Dim r As Range
Set r = Intersect([C:I], ActiveSheet.UsedRange)
If r Is Nothing Then Exit Sub
For Each r In r
    If r = "" Then
        r = "=S(" & r.EntireColumn.Address(, 0) & ")" 'formule
        r.Interior.ColorIndex = 6 'fond jaune pour repérer
    End If
Next
End Sub

Function S(colonne As Range)
Dim i&
For i = Application.Caller.Row + 1 To colonne.Count
    If colonne(i) = "" Or colonne(i).HasFormula Or colonne(i, 3 - colonne.Column) = "Total" Then Exit Function
    If IsNumeric(colonne(i)) Then S = S + CDbl(colonne(i))
Next
End Function
A+
 

Pièces jointes

  • Somme(1).xlsm
    51.1 KB · Affichages: 11

job75

XLDnaute Barbatruc
La macro Somme() précédente s'exécute chez moi en 6,8 secondes (4,6 secondes avec Application.ScreenUpdating = False)..

Sur ce fichier (2) celle-ci s'exécute en 0,3 seconde (on évite la boucle) :
VB:
Sub Somme()
Dim c As Range
Application.ScreenUpdating = False
[C:I].Replace "", "#N/A"
[C:I].Replace "#N/A", ""
On Error Resume Next 'si aucune SpecialCell
With [C:I].SpecialCells(xlCellTypeBlanks)
    .FormulaR1C1 = "=S(C)" 'formule
    .Interior.ColorIndex = 6 'fond jaune pour repérer
End With
End Sub
 

Pièces jointes

  • Somme(2).xlsm
    51.1 KB · Affichages: 17
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof