Masquer des colonnes

Bonsoir,

Je souhaite trouver un code afin de pouvoir masquer des colonnes vides dans la plage E5:AN5.

J'ai essayé de me creuser les méninges mais je ne trouve toujours pas...

Avez vous des idées ?

Bien à vous

Bonjour,

Sans macro :
- Sélection de la plage E5:AN5 > Accueil > Rechercher et sélectionner > Sélectionner les cellules ... > Cellules vides
- Accueil > Format > Masquer et afficher > Masquer les colonnes

Avec macro :

Sub MASQUER()
Worksheets("3.").Columns.Hidden = False 'Affiche toutes les colonnes
Worksheets("3.").[E5:AN5].SpecialCells(xlCellTypeBlanks).EntireColumn.Hidden = True 'Masque les colonnes dont la cellule ligne 5 est vide
End Sub

Cdlt,

Salut Ergotamine,

Merci pour ta réponse rapide !

Mais je souhaite masquer les colonnes entre E5 et AN5 si elles sont vides entre les lignes A5 et A30.

Désolé de m'être mal exprimé

Merci à toi

Bonjour,

Dans ce cas on peut oublier la manipulation manuelle :

Sub MASQUER()
Dim C%
With Worksheets("3.")
    .Columns.Hidden = False
    For C = 5 To 40
        If Application.WorksheetFunction.CountBlank(.Range(.Cells(5, C), .Cells(30, C))) = 26 Then .Columns(C).Hidden = True
    Next C
End With
End Sub

Si ça ne correspond pas merci de joindre un exemple représentatif avec une feuille avant et une après résultat. Car si vous mettez des formules en ligne 8, 18 et 30 le code ne fonctionnera plus dans ce cas il faudra :

Sub MASQUER()
Dim C%
With Worksheets("3.")
    .Columns.Hidden = False
    For C = 5 To 40
        If Application.WorksheetFunction.CountBlank(.Range(.Cells(5, C), .Cells(30, C))) = 23 Then .Columns(C).Hidden = True
    Next C
End With
End Sub

D'où la nécessité d'être très précis dans la description du besoin.

Cdlt,

Je t'envoie un fichier "après" dans la feuille 0.Généralité toutes les colonnes vides ont été supprimées.

Je souhaite faire de même en l'automatisant et ce pour toutes les feuilles.

Merci encore pour ton aide

Bonjour à tous,

CountA prend en compte les faux vides tandis que countblank compte toute sorte de vide. Voici un essai en utilisant une fonction qui renvoie le nombre de valeurs d'un ensemble de plages :

Sub MASQUER()
Dim C%
With Worksheets("3.")
    For C = 5 To 40
        .columns(C).hidden = Not Cbool(NBVALEURS(.columns(C).rows("5:30")))
    Next C
End With
End Sub

Function NBVALEURS(ParamArray plages()) as Long
For i = LBound(plages) To UBound(plages)
    NBVALEURS = NBVALEURS + plages(i).Cells.Count - Application.CountBlank(plages(i))
Next i
End Function

Cdlt,

Bonjour,

Masquer, supprimer, des colonnes, des lignes, une feuille, toutes les feuilles, vos explications ne sont pas très précises. Cependant :

Sub MASQUER()
Dim C%, WS As Worksheet, LR&
For Each WS In Worksheets
    If WS.Name <> "Recap" Then
    LR = WS.Cells(WS.Rows.Count, 1).End(xlUp).Row
        For C = 40 To 5 Step -1
            Debug.Print LR - 4 - 3
            Debug.Print Application.WorksheetFunction.CountBlank(WS.Range(WS.Cells(5, C), WS.Cells(LR, C)))
            If Application.WorksheetFunction.CountBlank(WS.Range(WS.Cells(5, C), WS.Cells(LR, C))) - 3 = LR - 7 Then WS.Columns(C).Delete
        Next C
    End If
Next WS
End Sub

Cdlt,

PS : @3GB, du coup tu conseilles d'utiliser CountA ou CountBlank ? En fait dans la plage il y a des formules sur 3 lignes avec résultat vide ... D'où le -3, et -4 car ma plage commence a la ligne 5, donc -3 -4 = -7.

Merci Enormement !

Mais du coup si je veux masquer et pas supprimer qu'est ce qui change dans le programme ?

Merci encore

Bonjour,

Si vous souhaitez juste masquer :

Sub MASQUER()
Dim C%, WS As Worksheet, LR&
For Each WS In Worksheets
    If WS.Name <> "Recap" Then
    LR = WS.Cells(WS.Rows.Count, 1).End(xlUp).Row
        WS.Columns.Hidden = False 'Modifié
        For C = 40 To 5 Step -1
            Debug.Print LR - 4 - 3
            Debug.Print Application.WorksheetFunction.CountBlank(WS.Range(WS.Cells(5, C), WS.Cells(LR, C)))
            If Application.WorksheetFunction.CountBlank(WS.Range(WS.Cells(5, C), WS.Cells(LR, C))) - 3 = LR - 7 Then WS.Columns(C).Hidden = True 'Modifié
        Next C
    End If
Next WS
End Sub

Les lignes commentées sont celles modifiées avec le précédent code.

Cdlt,

je vais plus t'embêter après ça...

Pour afficher ce qui est masqué?

Du coup, je conseille countblank pour compter les vides et .cells.count (ou .rows.count) - .countblank pour compter les valeurs dans une plage (ou une colonne). D'où la petite fonction NBVALEURS.

Bonjour,

Pour afficher c'est on passe la propriété Hidden de la collection Columns à False :

Sub MASQUER()
Dim C%, WS As Worksheet, LR&
For Each WS In Worksheets
    If WS.Name <> "Recap" Then WS.Columns.Hidden = False
Next WS
End Sub

@3GB, malheureusement je ne maîtrise pas du tout les fonctions personnalisées ...

Cdlt,

Oui, je sais mais, vu tout ce que tu maitrises par ailleurs, je pense qu'il s'agit plus d'un petit blocage. Tu pourrais faire sauter ce verrou en peu de temps !

La seule différence avec une sub, c'est que la fonction renvoie une valeur qu'on place en général dans une variable (elle est censée le faire, pas forcée : dans ce cas, c'est quasi comme une sub, une méthode avec un résultat vide ou null je sais pas). On met donc le nom de la fonction = le résultat.

function NOM() as string
NOM = "C'est mon nom"
'Lecture = Ecriture
end function

sub test()
msgbox NOM
end sub
Rechercher des sujets similaires à "masquer colonnes"