Masquer colonne si cellule vide

Résolu
rodger85830 Messages postés 20 Statut Membre -  
rodger85830 Messages postés 20 Statut Membre -
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

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. rodger85830 Messages postés 20 Statut Membre
       
      merci beaucoup cela marche très bien
      a+ pour autre chose
      0
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  3. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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
  4. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. rodger85830 Messages postés 20 Statut Membre
     
    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
  7. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. rodger85830 Messages postés 20 Statut Membre
       
      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