Masquer colonne si cellule vide

Résolu/Fermé
rodger85830 Messages postés 20 Date d'inscription mercredi 23 novembre 2016 Statut Membre Dernière intervention 23 janvier 2017 - 14 janv. 2017 à 19:19
rodger85830 Messages postés 20 Date d'inscription mercredi 23 novembre 2016 Statut Membre Dernière intervention 23 janvier 2017 - 15 janv. 2017 à 19:05
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 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 428
15 janv. 2017 à 18:18
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 mercredi 23 novembre 2016 Statut Membre Dernière intervention 23 janvier 2017
15 janv. 2017 à 19:05
merci beaucoup cela marche très bien
a+ pour autre chose
0
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 428
14 janv. 2017 à 21:21
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 lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 711
14 janv. 2017 à 21:25
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 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 428
Modifié par ccm81 le 14/01/2017 à 21:34
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 lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 711
14 janv. 2017 à 21:45
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 mercredi 23 novembre 2016 Statut Membre Dernière intervention 23 janvier 2017
Modifié par rodger85830 le 15/01/2017 à 00:59
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 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 428
15 janv. 2017 à 16:37
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 mercredi 23 novembre 2016 Statut Membre Dernière intervention 23 janvier 2017
15 janv. 2017 à 17:12
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