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

Paulle

XLDnaute Occasionnel
Bonsoir,

La formule "=SOUSTOTAL() " pour une colonne n'additionne pas les lignes masquées.

Est-il possible d'obtenir le total d'une ligne ignorant les colonnes masquées.

Merci.
 
Solution
Bonjour Paulle, le forum,

Utilisez le fichier (3) joint avec la macro du 2ème bouton :
VB:
Sub Afficher_Tout()
With [Tableau1]
    .Columns.Hidden = False
    MAJ_Somme
    .AutoFilter: .AutoFilter 'ôte le filtrage automatique
End With
Application.Goto [A1], True 'cadrage
[A2].Select
End Sub

Les 2 boutons et la zone de texte ont la propriété "Ne pas déplacer ou dimensionner avec les cellules".

Sinon ils seraient modifiés quand on masque des colonnes du tableau.

A+
TFB

Donc au final le but de tes deux fils de discussion était de faire la somme des cellules visibles d'une ligne, ou de masquer les lignes visuellement vides ?

Pas tout a fait

On sélectionne les colonnes à masquer temporairement et ensuite on masque les lignes vides et on affiche le total par ligne que la colonne soit masquée ou pas.

Exemple
Tableau entier
1747924737822.png


Masquage des colonnes C, E,G et I
1747924878027.png


La somme de la ligne entourée reste à 35
 
Bonjour à tous,

Je ne comprends vraiment pas ce que fait Phil69970, le sujet de ce fil c'est :
Est-il possible d'obtenir le total d'une ligne ignorant les colonnes masquées.
Alors c'est simple, exécutez cette macro en cliquant sur le bouton :
VB:
Sub MAJ_Somme()
Dim tablo, ub%, i&, j%
With [Tableau1] 'tableau structuré
    tablo = .Resize(, .Columns.Count + 1) 'Matrice, plus rapide, au moins 2 éléments
    ub = UBound(tablo, 2) - 1
    For i = 1 To UBound(tablo)
        tablo(i, 1) = 0
        For j = 2 To ub
            If .Rows(i).Hidden Or .Columns(j).Hidden Then tablo(i, j) = 0
        Next j
        tablo(i, 1) = Application.Sum(Application.Index(tablo, i, 0))
    Next i
    .Columns(1) = tablo 'restitution
End With
End Sub
A+
 

Pièces jointes

Pas tout a fait
Moi j'ai compris qu'il ne fallait faire la somme que des cellules visibles :
Est-il possible d'obtenir le total d'une ligne ignorant les colonnes masquées.
Pour moi, il faut faire la somme des cellules de la ligne du TS, mais en ignorant les nombres qui ne sont pas visibles.

Mais c'est vrai que la phrase peut être ambiguë.
 
Dernière édition:
Notez que la macro de mon post #18 prend du temps.

Pour tester j'ai recopié le tableau A2:J19 sur "seulement" 4 500 lignes : la macro s'exécute chez moi en 16 secondes.

J'ai essayé d'améliorer en utilisant un Dictionary : ça ne change rien.
 
Bonjour Paulle, le forum,

Voici une solution bien plus rapide que celle utilisant .SpecialCells(xlCellTypeVisible) :
VB:
Sub MAJ_Somme()
Dim t, d As Object, i%, titre$
t = Timer
Set d = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = False
With [Tableau1] 'tableau structuré
    .AutoFilter: .AutoFilter 'ôte le filtrage automatique
    .Rows.Hidden = False 'affiche toutes les lignes
    .Columns(1).Hidden = False
    For i = 2 To .Columns.Count
        If .Columns(i).Hidden Then
            d(i) = .Columns(i).Value
            .Columns(i) = Empty 'efface les valeurs après les avoir mémorisées
            titre = titre & "-" & Cells(1, i + .Column - 1).Address(0, 0)
        End If
    Next i
    .Columns(1) = "=SUM(RC[2]:RC[" & .Columns.Count & "])"
    .Columns(1) = .Columns(1).Value 'supprime les formules
    For i = 2 To .Columns.Count
        If d.exists(i) Then .Columns(i) = d(i) 'restitution
    Next i
End With
titre = Mid(Replace(titre, 1, ""), 2)
titre = IIf(d.Count = 0, "Aucune colonne masquée", IIf(d.Count = 1, "1 colonne masquée ", d.Count & " oolonnes masquées ")) & titre
Application.ScreenUpdating = True
MsgBox "Mise à jour de la colonne Somme en " & Format(Timer - t, "0.00 \sec"), , titre
End Sub
Les boucles se font sur les colonnes, il n'y en a pas sur les lignes.

Sur le tableau de 4 500 lignes la durée d'exécution chez moi est entre 0,02 et 0,05 seconde suivant le masquage.

A+
 

Pièces jointes

Bonjour,

J'avais oublié qu'il est essentiel de le réinitialiser le tableau pour rajouter des valeurs en colonne ou en ligne et de refaire le calcul.

J'ai tenté une macro "Sub Afficher()", les colonnes masquées s'affichent mai les lignes masquées le restent.

J'ai encore besoin de votre aide.
Merci.
 

Pièces jointes

Bonjour Paulle,
Chez moi, la macro "Afficher" marche.
Dans votre macro la ligne 37 est en commentaires. J'ai utilisé :
VB:
Sub Afficher()
    Range("Tableau1").Select
    Application.Goto "Tableau1"
    Selection.EntireColumn.Hidden = False
    Selection.EntireRow.Hidden = False
    Range("B5").Select
End Sub
Juste retiré le commentaire.
ou peut être plus simplement :
Code:
Sub Afficher()
    With Range("Tableau1")
        .EntireColumn.Hidden = False
        .EntireRow.Hidden = False
    End With
End Sub
 
- 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
12
Affichages
436
  • Question Question
Microsoft 365 formule addition
Réponses
4
Affichages
110
  • Question Question
Microsoft 365 Formule Excel
Réponses
4
Affichages
245
Retour