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

XL 2016 Somme et suppression de ligne

pierrof

XLDnaute Occasionnel
Bonjour à tous,

J'ai un nouveau projet, et j'aimerais à l'aide d'un code VBA, faire une somme de cellule en fonction d'une comparaison entre 2 autres cellules.
Lorsque la somme sera réalisé, je souhaite supprimer une des 2 lignes.

Je laisse un fichier exemple pour plus de clarté .

Merci d'avance de voter aide.

Cordialement
 

Pièces jointes

  • Test.xlsx
    17.4 KB · Affichages: 12
Solution
Voyez le fichier joint et cette macro affectée au bouton :
VB:
Sub Consolider()
Dim ncol%, colref%, d As Object, tablo, resu(), i&, x$, n&, j%, lig&
ncol = 13 'nombre de colonnes du tableau source
colref = 9 'colonne I à étudier
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la cass est ignorée
tablo = [A1].CurrentRegion.Resize(, ncol) 'matrice, plus rapide
ReDim resu(1 To UBound(tablo), 1 To ncol)
For i = 1 To UBound(tablo)
    x = Trim(tablo(i, colref))
    If Not d.exists(x) Then
        n = n + 1
        d(x) = n 'mémorise la ligne
        For j = 1 To ncol - 1
            resu(n, j) = tablo(i, j)
        Next j
    End If
    lig = d(x)
    resu(lig, ncol) = resu(lig, ncol) + Val(Replace(tablo(i, ncol)...

job75

XLDnaute Barbatruc
Voyez le fichier joint et cette macro affectée au bouton :
VB:
Sub Consolider()
Dim ncol%, colref%, d As Object, tablo, resu(), i&, x$, n&, j%, lig&
ncol = 13 'nombre de colonnes du tableau source
colref = 9 'colonne I à étudier
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la cass est ignorée
tablo = [A1].CurrentRegion.Resize(, ncol) 'matrice, plus rapide
ReDim resu(1 To UBound(tablo), 1 To ncol)
For i = 1 To UBound(tablo)
    x = Trim(tablo(i, colref))
    If Not d.exists(x) Then
        n = n + 1
        d(x) = n 'mémorise la ligne
        For j = 1 To ncol - 1
            resu(n, j) = tablo(i, j)
        Next j
    End If
    lig = d(x)
    resu(lig, ncol) = resu(lig, ncol) + Val(Replace(tablo(i, ncol), ",", ".")) 'consolide
Next i
'---restitution---
With Sheets("Consolidation")
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    With .[A1] '1ère cellule de destination, à adapter
        .Resize(n, ncol) = resu
        .Offset(n).Resize(.Parent.Rows.Count - n - .Row + 1, ncol).ClearContents 'RAZ en dessous
    End With
    .Columns.AutoFit 'ajuste les largeurs
    .Activate 'facultatif
End With
End Sub
 

Pièces jointes

  • Test(1).xlsm
    26 KB · Affichages: 7

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…