Masquer colonne si cellule vide

Résolu
rodger85830 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -  
rodger85830 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
je souhaite masquer des colonnes si cellule vide avec la mise en forme conditionnelle ou seulement une macro pour l'ensemble des dates
ci joint fichier avec plus d'info
merci d'avance
https://www.cjoint.com/c/GAosqqKeIYm

6 réponses

ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Le code n'était valable que pour une seule cellule non vide

Ceci devrait aller un peu plus vite dans ton cas
Const codate = 1
Const cofin = 10

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim co As Long, li As Long
If Target.Value = "" Then Target.Offset(1, 0).Select: Exit Sub
If Not Intersect(Target, Columns(codate)) Is Nothing Then
Columns.Hidden = False
Application.ScreenUpdating = False
li = Target.Row
For co = codate + 1 To cofin
If Cells(li, co).Value = "" Then
Columns(co).Hidden = True
End If
Next co
End If
Application.ScreenUpdating = True
Target.Offset(1, 0).Select
End Sub

Cdlmnt
1
rodger85830 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
merci beaucoup cela marche très bien
a+ pour autre chose
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Bonjour

1. est ce que tu as d'autres colonnes après la colonne E ?
2. est ce que tu as d'autres lignes après la ligne 4 ?

Cdlmnt
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
Bonjour,

Avec ton exemple, tu n'as aucune colonne vide mais par contre tu n'as qu'une information par date donc tu ne peux pas avoir un traitement global qui puisse masquer puisque tes dates paraissent réparties sur un colonne mois spécifique.
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Un début, à mettre dans le module de la feuille à traiter.
Un double-clic en colonne A pour masquer les colonnes correspondantes

Option Explicit

Const codate = 1
Const cofin = 5

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim co As Long, li As Long
If Target.Value = "" Then Exit Sub
If Not Intersect(Target, Columns(codate)) Is Nothing Then
li = Target.Row
For co = codate + 1 To cofin
If Cells(li, co).Value = "" Then
Columns(co).Hidden = True
Else
Columns(co).Hidden = False
End If
Next co
End If
End Sub

Cdlmnt
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
Bonjour ccm81 et bonne année 2017 à toi et tes proches,

Bien vu comme méthode mais si l'on savait si la colonne est liée à la date ce serait bien plus compréhensible.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rodger85830 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour et merci pour cette réponse rapide et satisfaisante
réponse a ccm81
oui les colonnes vont jusqu’à HR mais peuvent aller encore plus loin
et les lignes jusqu’à 100 c'est a dire 100 dates
c'est super ça marche bien ,je vais surement l'adopter
je l'ai arrangé a ma manière , mais n'est pas aussi rapide que la macro que j'avait ,le temps de latence n'est pas monstrueux environ 2.5 secondes
et l'autre macro était 1 seconde
j'ai du descendre ces 2 lignes car macro pas accepté
Const codate = 2
Const cofin = 230
voici mon code peut-être est il a améliorer
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Application.ScreenUpdating = False
Const codate = 2
Const cofin = 230
Dim co As Long, li As Long
If Target.Value = "" Then Exit Sub
If Not Intersect(Target, Columns(codate)) Is Nothing Then
li = Target.Row
For co = codate + 1 To cofin
If Cells(li, co).Value = "" Then
Columns(co).Hidden = True
Else
Columns(co).Hidden = False
End If
Next co
End If
With Worksheets("Analyses")
.Select
.Outline.ShowLevels ColumnLevels:=1
End With
Application.ScreenUpdating = True
End Sub


petite question supplémentaire
comment le faire commencer a la ligne 5 et finir a la ligne 100
je gagnerai peut être du temps
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
1. Si tu n'as qu'une seul valeur par ligne de date, ceci devrait aller plus vite
Const codate = "A"
Const cofinPlusUne = "F" ' dernière colonne occupée plus une

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim co As Long, li As Long, adr As String, co1 As String, co2 As String, co0 As String
If Target.Value = "" Then Target.Offset(1, 0).Select: Exit Sub
If Not Intersect(Target, Columns(codate)) Is Nothing Then
Application.ScreenUpdating = False
Columns(codate & ":" & cofinPlusUne).Hidden = False
li = Target.Row
co = Cells(li, Columns.Count).End(xlToLeft).Column
adr = Cells(li, co).Address
co0 = Split(adr, "$")(1)
If co0 = codate Then Exit Sub
adr = Cells(li, co).Offset(0, -1).Address
co1 = Split(adr, "$")(1)
adr = Cells(li, co).Offset(0, 1).Address
co2 = Split(adr, "$")(1)
If co1 <> codate Then Columns("B:" & co1).Hidden = True
If co2 <> cofinPlusUne Then Columns(co2 & ":" & cofinPlusUne).Hidden = True
End If
Application.ScreenUpdating = True
Target.Offset(1, 0).Select
End Sub


2. le nombre de lignes n'a pas d'importance pour la rapidité de l'exécution

Cdlmnt
0
rodger85830 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour ccm81
les valeurs par ligne de date peut aller de 1 a 40 au max
j'ai essayé ce code mais ne m'affiche même pas une colonne
si pas mieux j'utiliserais le premier code ,mais effectivement il me semble que cela va plus vite mais bon il ne trouve rien non plus
merci
0