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 :

Comment masquer une feuille lors de la deuxième ouverture du fichier ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Avril 2006
    Messages : 86
    Points : 60
    Points
    60
    Par défaut Comment masquer une feuille lors de la deuxième ouverture du fichier ?
    Bonjour.

    Ca fait longtemps que je ne suis pas venu par ici, j'avais laissé un peu le développement de côté pour me consacrer au graphisme.

    Bref on m'a confié un petit travail à faire sous Excel en vba, j'explique le contexte (pas très important, la question est plus bas)


    Il s'agit d'un logiciel propre à l'entreprise, qui sert à réaliser des calculs hyper compliqués à propos de gaz, de carburants, etc. Ce logiciel offre la possibilité d'extraire les données calculées sous la forme d'un fichier Excel (.xls). Le modèle de ce fichier doit donc préexister (je suppose), puisque il utilise un script vba qui réalise tout un tas d'actions à l'ouverture du fichier.

    Ce script doit, en outre, permettre de masquer deux feuilles (disons "feuil1" et "feuil2") du classeur, qui contiennent les données et les formules utilisées pour afficher les résultats dans une troisième feuille (disons "feuil3"). Le script ne doit masquer les feuilles 1 et 2 qu'à l'ouverture de l'utilisateur (il s'agit donc de la 2nde ouverture du fichier, le logiciel ayant auparavant écri dans ce fichier.)


    Donc pour faire court, je dois créer le script qui ouvre le fichier excel, réalise les divers calculs, sauvegarde les modifications (jusque là pas de soucis). Puis, à la deuxième ouverture, masque les feuil1 et feuil2, sauvegarde les modifications, puis ne s'exécute plus aux prochaines ouvertures de l'utilisateur.

    • Comment distinguer la première ouverture de la deuxième ? (indice i acrémenté à chaque ouverture ?)
    • Comment masquer ces deux feuilles ?
    • Comment n'exécuter le script de "masquage" qu'une seule fois ?
    • Comment mettre en sommeil le script pour les fois suivantes ?

    Il va de soit que je n'attend pas le travail tout fait, simplement les "idées" car je ne vois pas comment m'y prendre...

    Ouf le post est terminé ! Merci, et bonne journée

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Points : 451
    Points
    451
    Par défaut
    Bonjour,

    je ne pense pas que tu dois masquer les feuilles à la 2ème ouverture. Je pense qu'il faut pouvoir distinguer un utilisateur d'un administrateur (ou celui qui rentre les données dans Feuil1 et Feuil2).

    Pour cela tu peux le faire soit à l'Username de la session, soit en obligeant l'utilisateur à entrer un mot de passe... Et suivant la personne qui ouvre le classeur, masquer le classeur.

    Sinon c'est plus simple, il suffit qu'à la fermeture du classeur, tu masques les feuilles.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Avril 2006
    Messages : 86
    Points : 60
    Points
    60
    Par défaut
    Disons que j'ai des contraintes à respecter, le chef m'a donné la marche à suivre, me conseilles-tu de la discuter ,

    En fait, il y aura une centaine d'utilisateurs à même d'utiliser ce logiciel, et d'extraire des données dans ce fichier. Ainsi, la notion d'administrateur ne devrait pas vraiment apparaître dans ce cas, le masquage des pages est plus "esthétique" qu'autre chose...

    Les données qu'elles contiennent ne sont pas confidentielles, puisqu'utilisées par les utilisateurs dans le logiciel. Elles contiennent juste les données brutes sans mise en page ni calcul.

  4. #4
    Membre averti Avatar de mordrhim
    Inscrit en
    Avril 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2007
    Messages : 270
    Points : 314
    Points
    314
    Par défaut
    mode triche je propose !

    tu créés une feuille (LaFeuilleCompteur) qui te servira à compter le nombre d'ouverture du fichier. Dans Private Sub Workbook_Open() tu rajoutes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LaFeuilleCompteur.Cells(1,1) = LaFeuilleCompteur.Cells(1,1) + 1
    LaFeuilleCompteur.Visible = xlSheetVeryHidden
    ensuite le test se fera de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If LaFeuilleCompteur.Cells(1,1) >= 2 Then
        Feuil1.Visible = xlSheetVeryHidden
        Feuil2.Visible = xlSheetVeryHidden
    End If

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Avril 2006
    Messages : 86
    Points : 60
    Points
    60
    Par défaut
    Oui c'est un comme ca que j'avais pensé procéder, sauf que le compteur je pensais le placer sur l'une des feuilles à cacher... Mais je pense que j'ai compris le principe, merci !

    J'édite mon post pour vous donner le résultat final, ca peut servir à quelqu'un un jour :

    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
    Private Sub Workbook_Open()
    Dim i As Long
     
     
     
        'Si la feuille à masquer est visible, on exécute le programme
        If Sheets("GAS PROPERTIES").Visible = True Then
     
            'i récupère la valeur de la cellule A1 de la feuille du compteur, qui correspond au nombre d'ouvertures du fichier
            i = Sheets("FEUIL_COMPTEUR").Range("A1").Text
     
     
    '[...]Contenu du programme[...]
     
     
            'i est acrémenté de 1
            i = i + 1
     
            'on insère la valeur de i dans la cellule A1 de la feuille
            Sheets("FEUIL_COMPTEUR").Range("A1").Select
            ActiveCell.FormulaR1C1 = i
     
                'si i=2, c'est à dire le fichier a été ouvert pour la deuxième fois
                If i = 2 Then
     
                     'on réinitialise la cellule A1 de la feuille à 0
                    Sheets("FEUIL_COMPTEUR"). Range("A1").Select
                    ActiveCell.FormulaR1C1 = 0
     
                    'puis on masque la feuille à l'utilisateur
                    Sheets("GAS PROPERTIES").Visible = False
                    Sheets("RESULTS").Visible = False
     
                End If
     
            'on sauvegarde les modifications
            Application.AlertBeforeOverwriting = False
            ActiveWorkbook.Save
     
        End If
     
    End Sub
    Voilà merci encore !

  6. #6
    Membre habitué Avatar de Oh!Tofocus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 217
    Points : 158
    Points
    158
    Par défaut
    Petite remarque en passant:
    Rq 1
    Citation Envoyé par mickdu90
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Sheets("FEUIL_COMPTEUR").Range("A1").Select
    ActiveCell.FormulaR1C1 = i
    Tu n'a pas besoin de selecter une cellule pour ecrire dedans
    tu peux ecrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Sheets("FEUIL_COMPTEUR").Range("A1").Value = i
    C'est moins lourd et plus clair quand tu reliras ton code dans quelques semaines si tu dois le modifier.

    Rq 2
    la variable i etant un compteur utilise plutot .Value que .Text

    Rq 3
    as tu vraimant besoin d'un compteur puisque tu testes la visibilité ou la non visibilité de la feuille ? .... à mediter et à tester .....

    A+ et bon courage pour la suite
    tu es sur la bonne voie

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Avril 2006
    Messages : 86
    Points : 60
    Points
    60
    Par défaut
    Je prend en compte les deux premières remarques, et modifierai mon code Jeudi matin (et oui, demain c'est ferié )

    Quant à la troisième remarque, le compteur sert justement compter le nombre d'ouvertures du fichier, afin d'exécuter le masquage de la feuille à la deuxième ouverture, pas avant.

    Du coup, sans ce compteur, la feuille ne serait pas masquée, et le test sur la visibilité de la feuille ne serait plus justifié...

    En tout cas merci des tes précisions

    Voici le code édité :

    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
    Private Sub Workbook_Open()
    Dim i As Byte
     
        'Si la feuille à masquer est visible, on exécute le programme
        If Sheets("GAS PROPERTIES").Visible = True Then
     
            'i récupère la valeur de la cellule A1 de la feuille du compteur, qui correspond au nombre d'ouvertures du fichier
            i = Sheets("FEUIL_COMPTEUR").Range("A1").Value
     
     
    '[...]Contenu du programme[...]
     
     
            'i est acrémenté de 1
            i = i + 1
     
            'on insère la valeur de i dans la cellule A1 de la feuille
            Sheets("FEUIL_COMPTEUR").Range("A1").Value = i
     
                'si i=2, c'est à dire le fichier a été ouvert pour la deuxième fois
                If i = 2 Then
     
                     'on réinitialise la cellule A1 de la feuille à 0
                    Sheets("FEUIL_COMPTEUR"). Range("A1").Value = i
     
                    'puis on masque la feuille à l'utilisateur
                    Sheets("GAS PROPERTIES").Visible = False
                    Sheets("RESULTS").Visible = False
     
                End If
     
            'on sauvegarde les modifications
            Application.AlertBeforeOverwriting = False
            ActiveWorkbook.Save
     
        End If
     
    End Sub

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

Discussions similaires

  1. Comment sauter une ligne lors de la lecture d'un fichier?
    Par bourgeoisvalere dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 22/07/2013, 11h45
  2. comment masquer une feuille
    Par panda78 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/08/2012, 16h09
  3. Réponses: 1
    Dernier message: 05/09/2010, 10h05
  4. Comment sauter une ligne lors de l'ecriture dans un fichier
    Par Harald dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 29/05/2009, 18h01
  5. [Outlook] Formulaires : Comment masquer une feuille ?
    Par damsmut dans le forum Outlook
    Réponses: 3
    Dernier message: 04/01/2007, 10h17

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