XL 2016 VBA : Cacher colonnes

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 !

Guillaume25

XLDnaute Nouveau
Bonjour à tous !

Je sais que le sujet à été abordé de nombreuses fois. J'ai donc essayé par moi-même mais je bloque :
Je cherche à masquer les colonnes qui comportent un 0 sur la ligne "Total général" (Le tableau étant un TCD)
Mon "Total général" étant toujours dans la colonne A.
Les colonnes à traiter s'étendent de F:AB (d'ou le j=28 To 6)

J'obtiens comme message d'erreur. Je suppose qu'il sagit d'une erreur de syntaxe...
1599641654962.png


VB:
Sub Hide()

Dim i%
Dim j%
For i = 200 To 1 Step -1

If Cells(i, 1).Value = "Total général" Then

    For j = 28 To 6 Step -1
    If Cells(i, j).Value = "0" Then Cells(i, j).EntireColumn.Hidden = True
    Next j

Next i
End Sub


Merci d'avance pour votre aide 🙂
 
Solution
Bonjour Guillaume25, Roblochon,

Une seule boucle suffit :
VB:
Sub Masque()
Dim lig As Variant, c As Range
lig = Application.Match("Total général", [A:A], 0)
Application.ScreenUpdating = False
With [F:AB]
    .Columns.Hidden = False
    If IsError(lig) Then Exit Sub
    For Each c In .Rows(lig).Cells
        If c = 0 Then c.Columns.Hidden = True
    Next
End With
End Sub
A+
Bonjour Guillaume25, Roblochon,

Une seule boucle suffit :
VB:
Sub Masque()
Dim lig As Variant, c As Range
lig = Application.Match("Total général", [A:A], 0)
Application.ScreenUpdating = False
With [F:AB]
    .Columns.Hidden = False
    If IsError(lig) Then Exit Sub
    For Each c In .Rows(lig).Cells
        If c = 0 Then c.Columns.Hidden = True
    Next
End With
End Sub
A+
 
Merci pour ta réponse ! Ca me semble plus optimisé en effet ! J'ai encore pas mal à apprendre avant d'écrire cela par moi même !


Bonjour Guillaume25, Roblochon,

Une seule boucle suffit :
VB:
Sub Masque()
Dim lig As Variant, c As Range
lig = Application.Match("Total général", [A:A], 0)
Application.ScreenUpdating = False
With [F:AB]
    .Columns.Hidden = False
    If IsError(lig) Then Exit Sub
    For Each c In .Rows(lig).Cells
        If c = 0 Then c.Columns.Hidden = True
    Next
End With
End Sub
A+
 
re,

If Cells(i, j).Value = "0" Then Cells(i, j).EntireColumn.Hidden = True

J'ai juste du mal à comprendre pourquoi il est necessaire d'ajouter un End If pour le j et non pour le i.

Parceque votre instruction if sur le i était écrite en une seule ligne.
Quand une ligne contenant un if se termine par 'Then' alors le moteur vba attend un End IF sur une autre ligne. Quand elle se termine par une instruction le moteur vba considère que le traitement de la condition du début de ligne est terminé.

Cordialement
 
Ah merci beaucoup pour l'info 😉

re,

If Cells(i, j).Value = "0" Then Cells(i, j).EntireColumn.Hidden = True



Parceque votre instruction if sur le i était écrite en une seule ligne.
Quand une ligne contenant un if se termine par 'Then' alors le moteur vba attend un End IF sur une autre ligne. Quand elle se termine par une instruction le moteur vba considère que le traitement de la condition du début de ligne est terminé.

Cordialement
 
- 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
15
Affichages
555
Réponses
5
Affichages
812
Réponses
4
Affichages
675
Réponses
8
Affichages
342
Réponses
4
Affichages
241
Réponses
2
Affichages
220
Réponses
10
Affichages
613
Réponses
8
Affichages
729
Réponses
2
Affichages
488
Retour