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 :

Précisions sur le masquage/démasquage de feuilles


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut Précisions sur le masquage/démasquage de feuilles
    Bonjour à toutes et à tous !

    J'aurais voulu avoir quelques petites précisions sur le masquage des feuilles. Si une une feuille est définie en tant que Sheets(5) car étant la 5ème du classeur, comment se fait-il que, lorsque je masque toutes les feuilles précédentes, celle-ci ne soit plus la 5ème et je ne puisse plus y référer en tant que Sheets(5)? Le masquage considère-t-il que la feuille masquée n'est plus "présente" dans le classeur?

    En réalité, j'aurais voulu masquer de nombreuses feuilles (en VeryHidden même si j'ai juste tenté le Hidden pour l'instant et protégées par mot de passe etc) car ce seraient des feuilles auxquelles l'utilisateur ne devrait pas avoir accès mais auxquelles le "programme" devrait avoir accès afin d'effectuer ses calculs. Comment puis-je réaliser cela : garder la position d'une de mes feuilles centrales en masquant le reste? De plus, je ne souhaite pas m'y référer par le nom sachant que les noms de mes feuilles varient car elles sont créées à partir d'une variable entrée par l'utilisateur au sein de nombreuses boucles imbriquées.

    Merci d'avance

  2. #2
    Membre expérimenté Avatar de ilcocodrillo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Âge : 19
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut
    tu peux faire référence à des valeurs contenues dans une feuilles masquée, dans un calcul par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    résultat= résultat+sheets(5).cells(X,Y)
    La limitation est dans la selection de cette feuille tu ne peux pas faire ça par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sheets(5).cells(x,Y).select
    Faire une recherche non plus...

    La c'est l'erreur assurée

  3. #3
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    C'est une très bonne question. J'avoue ne pas trouver de réponse intelligente pour le moment. Mais en attendant, as-tu essayé d'y accéder en utilisant son nom (celui que tu as tapé et qui apparaît normalement dans son onglet).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print Sheets("nomDeLaFeuille").Range("A1").Value
    Debug.Print affichera quelque chose si la fenêtre Exécution est affichée (menu Affichage). J'utilise souvent pour les tests (ça évite l'affichage des agaçants MsgBox!).

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Bonjour et merci de vos réponses !

    Et aussi merci pour ces petites explications !

    Alors voilà ce que j'ai réussi à comprendre du problème après quelques tests !
    Tout d'abord, j'accède bien à ma feuille par son nom (au travers d'une variable) et cela marche bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sheets(TAFT).Copy After:=Sheets(Sheets.Count)
    ActiveSheet.Name = Sheets(5).Cells(j, "C").Value
    ActiveSheet.Visible = True
    Sheets(5).Activate
    Je fais en fait une copie à partir d'une feuille "exemple" qui est masquée afin de retravailler dessus par la suite puis je lui donne un nom et je la mets en visible car c'est ce que je souhaite et je retourne enfin à ma feuille "5" qui ne doit jamais être masquée. Pour cela, aucun soucis, ça marche convenablement. Ici, le "TAFT" est une variable correspondant à une ListBox d'un Userform me permettant de choisir parmi mes 5 feuilles exemples pour savoir laquelle je dois copier.

    Le problème vient après et je ne sais pas trop comment m'y prendre. J'ai donc créé plusieurs feuilles les unes à la suites des autres à la fin de mon classeur et leur nom est déterminé par une variable rentrée dans une autre feuille comme on peut le voir par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Name = Sheets(5).Cells(j, "C").Value
    Le nom de ces feuilles n'est donc jamais le même ainsi que leur nombre. Je dois cependant les modifier pour supprimer des lignes et y faire des ajouts etc. Pour cela, j'ai créé une variable "Var1" incrémentée à chaque nouvelle feuille (retrouver le nom pour chacune est plutôt compliqué : je dois faire une énième boucle imbriquée dans d'autres etc) et j'accède à la feuille souhaitée en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(13 + Var1).Activate
    car la première est toujours la feuille 14. Là, ça ne marche plus. D'autres feuilles étant cachées, ce n'est plus la feuille 14 la première. Bien entendu, je peux changer et dire que la première est la feuille 2 par exemple ("1+Var1") mais j'aurais voulu savoir si il y avait une autre solution plus propre. Il est quand même dommage de ne pouvoir déterminer une position absolue pour chacune des feuilles du classeur ne dépendant pas du masquage (par exemple celles qu'il existe dans l'explorateur de projets où on peut voir les propriétés de chacune des feuilles). Peut-être qu'au travers du "(name)" tel que Feuil1 on peut y accéder mais je ne sais pas comment

    En tout cas merci de ces précisions et de l'astuce du Debug.Print, je passais encore par les fameuses MsgBox

    EDIT : Lorsque je masque toutes mes feuilles à part la dernière avant de lancer la macro, cela marche. Lorsque je masque la dernière, la copie marche mais plus le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(13 + Var1).Activate
    ..

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    En fait un dernier test m'a donné la solution mais pourquoi?!

    Si je masque toute mes feuilles sauf la dernière (la 13ème), celle que je vais créer va devenir la 14ème. Si je masque la 13ème, celle créée va devenir la
    13ème... Logique quand tu nous tiens...

    EDIT : ça doit venir du

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(TAFT).Copy After:=Sheets(Sheets.Count)
    mais je ne sais pas si on peut "compter" des feuilles masquées...

  6. #6
    Membre expérimenté Avatar de ilcocodrillo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Âge : 19
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut
    c'est possible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub CompteLesFeuillesMasuées()
    Dim NbDeFeuillesMasquées As Integer
    NbDeFeuillesMasquées = 0
     
    For I = 1 To Sheets.Count
     
            If Sheets(I).Visible = False Then
            NbDeFeuillesMasquées = NbDeFeuillesMasquées + 1
            End If
     
    Next I
    MsgBox NbDeFeuillesMasquées
    End Sub

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Merci ça marche

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

Discussions similaires

  1. Précision sur Oracle 9iAS r2
    Par Patmane dans le forum Oracle
    Réponses: 9
    Dernier message: 18/03/2007, 04h41
  2. Précisions sur l'Override
    Par WebPac dans le forum Langage
    Réponses: 7
    Dernier message: 26/10/2004, 08h09
  3. Précisions sur Import/export
    Par electro dans le forum Import/Export
    Réponses: 9
    Dernier message: 15/10/2004, 13h34
  4. [Observateur] Précisions sur le design pattern Observer [UML]
    Par joquetino dans le forum Design Patterns
    Réponses: 2
    Dernier message: 07/10/2004, 22h35
  5. Précision sur les sauvegarde à chaud
    Par alxkid dans le forum Administration
    Réponses: 2
    Dernier message: 09/08/2004, 18h55

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