IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Afficher/Masquer colonnes en fonction de la selection de date


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 13
    Par défaut Afficher/Masquer colonnes en fonction de la selection de date
    Bonjour à tous.

    Un petit problème VBA m'est apparu pour un fichier. Celui ci est :

    Le fichier dispose d'un "planning" organisé de cette manière:
    . MOIS
    . SEMAINES
    . JOURS

    Ce fichier servant pour un planning annuel, il va falloir faire des "sélections" de mois et de jours à afficher. Pour éviter de passer son temps à sélectionner manuellement les colonnes à afficher ou masquer, j'aimerais pouvoir le faire par VBA, avec une "sélection" de mois et de jour.

    Le choix des colonnes à afficher se fait par jour et mois.
    En exemple ; Je voudrais afficher uniquement la période de 03 Mai au 05 Juin sur tout le planning.

    Le tableau va de la colonne A à NA, dans notre exemple, les colonnes à afficher vont de DS à EZ. Je voudrai avoir par exemple deux cases de sélections, ou l'on rentre les deux jours que l'on souhaite avoir à l'écran et leurs mois correspondant.
    Le but étant ici, de faire masquer les colonnes de A à (DS - 1) et de (EZ +1) à NA, autrement dis, ne laisser que les dates du 03 Mai au 05 juin en affichage. Je pense qu'un userForm pourrait faire l'affaire dans ce cas.

    J’espère avoir été assez clair dans mes explications. En vous remerciant d'avance.

    Cordialement
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Bonjour,

    Une UserForm semble effectivement être la solution la plus simple à votre problème.
    Dans une UserForm, ajouter les éléments suivants :
    • Deux TextBox qui serviront à entrer les jours de début et de fin (que j'ai choisi de nommer JourDTBx et JourFTBx) ;
    • Deux ComboBox qui serviront à entrer les mois de début et de fin (que j'ai choisi de nommer MoisDCBx et MoisFCBx) ;
    • Deux CommandButton qui permettront soit de tout réafficher (nommé ici AfficherBtn), soit de n'afficher que la période demandée (nommé ici MasquerBtn).


    Entrer ensuite le code suivant pour la UserForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    Option Explicit
     
    Private Sub UserForm_Initialize()
        MoisDCBx.AddItem "Janvier"
        MoisDCBx.AddItem "Février"
        MoisDCBx.AddItem "Mars"
        MoisDCBx.AddItem "Avril"
        MoisDCBx.AddItem "Mai"
        MoisDCBx.AddItem "Juin"
        MoisDCBx.AddItem "Juillet"
        MoisDCBx.AddItem "Août"
        MoisDCBx.AddItem "Septembre"
        MoisDCBx.AddItem "Octobre"
        MoisDCBx.AddItem "Novembre"
        MoisDCBx.AddItem "Décembre"
        MoisFCBx.AddItem "Janvier"
        MoisFCBx.AddItem "Février"
        MoisFCBx.AddItem "Mars"
        MoisFCBx.AddItem "Avril"
        MoisFCBx.AddItem "Mai"
        MoisFCBx.AddItem "Juin"
        MoisFCBx.AddItem "Juillet"
        MoisFCBx.AddItem "Août"
        MoisFCBx.AddItem "Septembre"
        MoisFCBx.AddItem "Octobre"
        MoisFCBx.AddItem "Novembre"
        MoisFCBx.AddItem "Décembre"
    End Sub
     
    Private Sub AfficherBtn_Click()
        Feuil1.Cells.EntireColumn.Hidden = False
    End Sub
     
    Private Sub MasquerBtn_Click()
        Dim Col As Range, i As Integer, ColCachees() As Integer
        Dim dateD As Date, dateF As Date, dateC As Date
        If MoisDCBx.ListIndex = -1 Or MoisDCBx.ListIndex = -1 Then GoTo ErrorHandler
        On Error GoTo ErrorHandler
        dateD = CInt(JourDTBx.Value) & "/" & MoisDCBx.ListIndex + 1
        dateF = CInt(JourFTBx.Value) & "/" & MoisFCBx.ListIndex + 1
        On Error GoTo 0
        Feuil1.Cells.EntireColumn.Hidden = False
        ReDim ColCachees(0)
        For Each Col In Feuil1.Columns
            jourC = Feuil1.Cells(3, Col.Column).Value
            If jourC = 0 Then Exit For
            moisC = IIf(Feuil1.Cells(1, Col.Column).Value <> "", Feuil1.Cells(1, Col.Column).Value, Feuil1.Cells(1, Feuil1.Cells(1, Col.Column).End(xlToLeft).Column).Value)
            dateC = " " & jourC & " " & moisC
            If dateF < dateC Or dateD > dateC Then
                If ColCachees(0) <> 0 Then ReDim Preserve ColCachees(UBound(ColCachees) + 1)
                ColCachees(UBound(ColCachees)) = Col.Column
            End If
        Next Col
        For i = 0 To UBound(ColCachees)
            Feuil1.Cells(1, ColCachees(i)).EntireColumn.Hidden = True
        Next i
        Exit Sub
    ErrorHandler:
        MsgBox "Les dates fournies ne sont pas valides.", vbExclamation
    End Sub
    Ce code, très simpliste, ne fonctionne malheureusement pas en l'état.
    La syntaxe utilisée pour les mois dans la ligne 1 de votre feuille Feuil1 n'est pas reconnue par VBA. Pour éviter une erreur code, il convient de modifier les noms des mois présents dans votre feuille par ceux fournis dans la Sub UserForm_Initialize.
    En effet, les caractères accentués sont nécessaires pour que VBA interprète correctement les noms des mois en français.

    De nombreuses améliorations pourraient être apportées à ce code, notamment en améliorant la gestion des dates.


    Cdt

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 13
    Par défaut
    Merci pour ton aide Ben L. J'ai repris donc les mêmes noms de mois que toi, mais quand j’exécute le code, une erreur s'affiche comme quoi que certaines variables ne sont pas déclarées, et c'est effectivement le cas pour ce qui concerne les variables de mois.
    Merci d'avance pour ton aide.

  4. #4
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Bonjour,

    J'ai modifié le code à la dernière minute et ne l'ai pas retesté. Une erreur se produit effectivement car certaines variables ne sont pas déclarées.
    Pour éviter cela, ajoutez le code suivant au début de la Sub MasquerBtn_Click()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim jourC As Integer, moisC As String
    Ceci devrait résoudre le problème.

    Cdt

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 13
    Par défaut
    Bonjour, j'ai rajouté ta ligne de commande mais ca ne marche toujours pas. Peux tu l'essayer toi même pour voir si ca marche et me renvoyer le fichier avec la macro stoppe.
    Merci encore pour ton aide précieuse.
    Cordialement.

  6. #6
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    J'avais bien essayé ce code et il fonctionne chez moi.

    Tu trouveras en pièce jointe à ce message le fichier que j'utilise.
    Lance la macro AfficherUserForm.

    Bonne soirée
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Afficher une colonne en fonction du max d'une autre
    Par tengac dans le forum Développement
    Réponses: 3
    Dernier message: 29/02/2012, 13h45
  2. Réponses: 2
    Dernier message: 02/09/2011, 14h25
  3. Réponses: 1
    Dernier message: 27/04/2009, 18h03
  4. [XAML] Afficher/Masquer colonnes dans une DataGrid
    Par igloof dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 06/02/2009, 09h01
  5. changer et afficher une variable en fonction d'un select
    Par psychoBob dans le forum Général JavaScript
    Réponses: 30
    Dernier message: 22/11/2005, 08h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo