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
5
Affichages
707
Réponses
4
Affichages
581
Réponses
8
Affichages
270
Réponses
4
Affichages
116
Réponses
2
Affichages
186
Réponses
10
Affichages
533
Réponses
8
Affichages
650
Réponses
2
Affichages
427
Réponses
5
Affichages
478
  • Question Question
Microsoft 365 Erreur UBound
Réponses
4
Affichages
217
Retour