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

Excel Discussion :

Volets figés : affichage colonne suivante [XL-2019]


Sujet :

Excel

  1. #1
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2018
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2018
    Messages : 248
    Points : 210
    Points
    210
    Par défaut Volets figés : affichage colonne suivante
    Bonjour à toutes et tous,

    Dans ma feuille, j'ai un tableau pour lequel les colonnes A à Q sont figées ainsi que les lignes 1 à 7.
    A partir de la colonne R je me déplace vers la droite avec l'ascenseur horizontal.
    Je souhaite pouvoir "forcer" l'affichage afin que je puisse avoir la colonne DH (par exemple) à la suite de la colonne Q.

    Mon critère d'affichage correspond à la date du jour.
    J'ai ligne 5 les dates de chaque jour de l'année.
    C'est ainsi que les cellules R5 & S5 correspondent au 1er janvier, les cellules T5 & U5 correspondent au 2 janvier, les cellules V5 & W5 correspondent au 3 janvier, etc.

    Par exemple le 17 février correspond aux colonnes DH & DI.

    J'avais pensé masquer les colonnes de la période passée (ça je sais le faire), mais la personne qui va utiliser le fichier ne le veut pas car elle veut pouvoir naviguer vers les dates antérieures si besoin.

    [Edit] J'aimerai que cela se fasse automatiquement à l'ouverture de la feuille.

    J'ai besoin de votre aide car je ne sais pas comment m'y prendre.

    Merci par avance

    Philippe

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,

    Sans macro, on peut utiliser un lien hypertexte (ou plutôt 3).
    Exemple : Volets.xlsx

    Cliquer sur Ce jour pour aller directement à la date d'aujourd'hui
    Pour amener la date d’aujourd’hui contre le volet, Cliquer sur Fin puis sur Ce jour
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  3. #3
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2018
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2018
    Messages : 248
    Points : 210
    Points
    210
    Par défaut
    Bonjour Patrice740,

    Merci pour cette solution qui fonctionne.

    Mais j'aurais aimé que cela se fasse automatiquement à l'ouverture de la feuille.

    Je modifie mon premier message en ce sens.
    Philippe

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Re,
    Citation Envoyé par Phil333250 Voir le message
    Mais j'aurais aimé que cela se fasse automatiquement à l'ouverture de la feuille.
    Pour ça, il va falloir utiliser une macro VBA.
    Il faut donc que l'utilisateur prenne le risque d'accepter l’exécution des macros.
    Est-ce que ça se justifie ?
    As-tu des connaissances en VBA ?
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  5. #5
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2018
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2018
    Messages : 248
    Points : 210
    Points
    210
    Par défaut
    Patrice740

    Pour ça, il va falloir utiliser une macro VBA.
    Le fichier est plein de macros.

    Est-ce que ça se justifie ?
    Oui pour une question de praticité.

    As-tu des connaissances en VBA ?
    Je suis un bricoleur, mais grâce au forum j'apprends et suis capable de réinvestir des macro, de les modifier, les adapter à mon problème.

    Merci

  6. #6
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Re,

    Dans le module Thisworkbook :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Option Explicit
    Private Sub Workbook_Open()
      Call ActiverCeJour
    End Sub
    Dans un module standard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit
    Public Sub ActiverCeJour()
    Dim f As Worksheet
    Dim w As Window
    Dim c As Range
      Set f = ThisWorkbook.Worksheets(1)    'adapter l'index ou le nom de la feuille
      Set w = ThisWorkbook.Windows(1)
      Set c = f.Range("R5:ABS5").Find(Date) 'adapter à la plage des dates
      If Not c Is Nothing Then
        f.Activate
        w.ScrollColumn = c.Column
        c.Offset(3).Activate
      End If
    End Sub
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  7. #7
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2018
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2018
    Messages : 248
    Points : 210
    Points
    210
    Par défaut
    Bonjour Patrice,

    Merci pour ces codes.

    Dans le module Thisworkbook :
    Ok, fait.
    Mais j'ai déjà ce code pour forcer l'ouverture sur la feuille "Accueil"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Workbook_Open()
        On Error Resume Next
        Sheets("accueil").Activate
        Range("A1").Activate
    End Sub
    Pour l'instant je l'ai désactivé.
    Je pense que quand le code fonctionnera, je mettrais "Call ActiverCeJour" ligne 5, mais faut-il que je garde "Option Explicit" ?

    En revanche pour le code dans le module standard j'ai un soucis.
    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
    Option Explicit
    Public Sub ActiverCeJour()
     
     
    Dim f As Worksheet 'Feuille
    Dim w As Window    'Fenêtre
    Dim c As Range     'Plage
     
      Set f = ThisWorkbook.Worksheets("Planning Global") 'On défini la feuille "Planning Global"
      Set w = ThisWorkbook.Windows(1)                    'On défini la fenêtre
      Set c = f.Range("R5:ABU5").Find(Date) 'Cherche la date d'aujourd'hui dans la plage des dates de la feuille "Planning Global"
     
      'If Not c Is Nothing Then     'Si je laisse actif, je ne vois pas le pb car il ne se passe rien
        f.Activate                  'On active la feuille "Planning Global"
        w.ScrollColumn = c.Column   'w.ScrollColumn => Identifie la colonne 18 soit R cad la colonne après celle qui est figée
                                    'Cela semble correct car point de départ du Scroll
                                    'Erreur d'exécution 91 => le pb vient de c.Column
                                    'c.Column => Variable objet ou variable de bloc With non défini
     
        c.Offset(3).Activate 'Je sais pas si cela marche, la macro ne vas pas jusque là
                             'Aide VBA : expression.Offset (RowOffset, ColumnOffset) Les éléments entre paranthéses sont facultatifs.
                             'mais je pense que si on veut agir sur les colonnes il faudrait noter c.Offset(, 3) ?
                             'Je ne comprends pas le chiffre 3 : colonne 3 ?
      'End If
    End Sub
    Le bug vient de la ligne 15 w.ScrollColumn = c.Column et si mon analyse est bonne c'est c.Column qui bugue.
    J'ai le message :
    Erreur d'exécution 91
    Variable objet ou variable de bloc With non défini
    Quant à la ligne 20 je ne sais pas pour l'instant si elle fonctionne.

    Merci pour votre retour.

    Cordialement
    Philippe

  8. #8
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,

    Tu n'avais pas parlé d'autres feuilles, j'ai donc proposé d'aller directement sur la feuille à l'ouverture du fichier.
    Ça "bug" parce que tu as désactivé la ligne 13 !!!!

    Je mets toujours Option Explicit en tête de tous les modules.
    Il ne faut jamais utiliser On Error ... à tort et à travers (comme dans ton Workbook_Open) !

    Donc dans Thisworkbook :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Option Explicit
    Private Sub Workbook_Open()
       Application.Goto Worksheets("Accueil").Range("A1")
    End Sub
    Dans le module de la feuille Planning Global :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Option Explicit
    Private Sub Worksheet_Activate()
      Call ActiverCeJour
    End Sub
    Et dans le module standard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit
    Public Sub ActiverCeJour()
    Dim f As Worksheet
    Dim w As Window
    Dim c As Range
      Set f = ThisWorkbook.Worksheets("Planning Global")
      Set w = ThisWorkbook.Windows(1)
      Set c = f.Range("R5:ABU5").Find(Date)
      If Not c Is Nothing Then
        f.Activate
        w.ScrollColumn = c.Column
        c.Offset(3).Activate
      End If
    End Sub
    Exemple : Date du jour.xlsm
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  9. #9
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2018
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2018
    Messages : 248
    Points : 210
    Points
    210
    Par défaut
    Bonjour Patrice,

    Merci pour ces codes.
    dans Thisworkbook
    OK

    Dans le module de la feuille Planning Global
    OK

    dans le module standard :
    OK

    Cela fonctionne mais avec des dates saisies en dur.
    Mais, mes dates en R5 et suivants sont calculées.
    Je ne pensais pas que cela pouvait impacter. Le problème vient de là.
    Donc j'ai rajouté une ligne 6 pour y faire un copier ligne 5 / coller valeur ligne 6 et modifié la macro en conséquence.
    Cela fonctionne.

    Merci

    Philippe

  10. #10
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,
    Citation Envoyé par Phil333250 Voir le message
    Cela fonctionne mais avec des dates saisies en dur.
    Mais, mes dates en R5 et suivants sont calculées.
    Pour des dates calculées, tu peux utiliser Match :
    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
    Option Explicit
    Public Sub ActiverCeJour()
    Dim f As Worksheet
    Dim w As Window
    Dim v As Variant
      Set f = ThisWorkbook.Worksheets("Planning Global")
      Set w = ThisWorkbook.Windows(1)
      v = Application.Match(CLng(Date), f.Range("R5:ABU5"), 0) - 1
      If Not IsError(v) Then
        f.Activate
        With f.Range("R5").Offset(3, v - 1)
          w.ScrollColumn = .Column
          .Activate
        End With
      End If
    End Sub
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/02/2012, 11h06
  2. Affichage colonnes dans une combobox
    Par OtObOx dans le forum IHM
    Réponses: 3
    Dernier message: 12/07/2006, 21h30
  3. affichage colonne par colonne
    Par tjoce dans le forum Langage
    Réponses: 1
    Dernier message: 02/11/2005, 19h19
  4. [CR9]Masquer des données (colonnes) suivant valeur champ
    Par neo.51 dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 05/09/2005, 10h43
  5. [VB.NET] [WinForms] [DataGrid][ArrayList] Affichage colonnes
    Par Misterburma dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/04/2005, 12h45

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