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

  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
84
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
507
Réponses
3
Affichages
50
Réponses
3
Affichages
601
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
255
Retour