Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

feuille a cacher

D

dIDIER 2

Guest
Bonjour

J'ai un classeur qui génére des feuilles de façon automatique, mais qui ne se suivent pas sur le nom (ex : janvier 2001, mars 2002, fevrier 2004, juin 2002, aout 2010, etc) de plus certaine suivant l'utilisateur se retrouvent
invisible , d'autre reste visible.

Par contre il existe deux feuilles nomées calendrier et ferier qui doivent toujours rester visible.

Existe t il un moyen de rendre toutes les feuilles invisibles (sans creer d'erreure avec celle qui sont déja invisible) d'un coup, puis de rerendre visible mes deux feuille (calendrier, ferier), cela doit se produire a toute sauvegarde, ainsi qu'a la fermeture du classeur.

De faite lors de la réouverture de mon classeur ne doivent etre visible que les feuilles calendrier et ferier

un petit pro en vba est solicité
crdlmt
Didier
 
V

Vériland

Guest
Bonsoir Didier et le forum,

Voici une méthode par macro qui affiche ou cache toutes les feuilles...sauf les deux dernières qui seront pour ton exemple les feuilles :

Calendrier et Férier

(donc à placer à la fin)


Sub Cache()
For i = 1 To Sheets.Count - 2
Sheets(i).Visible = False
Next i
End Sub


Sub Affiche()
For i = 1 To Sheets.Count - 2
Sheets(i).Visible = True
Next i
End Sub


Bonne continuation

A+ Vériland
 
J

Jacques

Guest
Bonsoir Didier,

Essaie voir cette macro

Sub masquage_feuilles()
Sheets("ferier").Select
Sheets("ferier").Move Before:=Sheets(1)
Sheets("calendrier").Select
Sheets("calendrier").Move Before:=Sheets(1)
j = Sheets.Count
For i = 1 To j
If Sheets(i).Name = "calendrier" Or Sheets(i).Name = "ferier" Then
Sheets(i).Visible = True
Else
Sheets(i).Visible = False
End If
Next
End Sub

J'espère que cela résoudra ton problème.
à+
 
J

Jacques

Guest
Bonsoir Vériland,

pour ta sub "Cache", il faut absolument que les deux dernières feuilles (calendrier et ferier) soient déjà visibles. Si ce n'est pas le cas, il y aura une erreur générée car un classeur doit avoir obligatoirement une feuille visible.
C'est pourquoi dans ce que je propose je les place devant.
en effet, qu'elles soient visibles ou cachées au début de la procédure, le fait de les mettre au début puis de les afficher s'il elles ne le sont pas, permet de pouvoir effacer toutes les autres sans génération d'erreur.

Pour amméliorer, on peut faire comme suit

Sub masquage_feuilles()
Sheets("ferier").visible
Sheets("ferier").Move Before:=Sheets(1)
Sheets("calendrier").visible
Sheets("calendrier").Move Before:=Sheets(1)
For i = 3 To j
Sheets(i).Visible = False
Next
End Sub

pour être tout à fait complet, il faudrait vérifier que les deux feuilles calendrier et ferier existent bien

bonne nuit à tous
 
V

Valérie

Guest
Salut Didier et les autres,

Tu peux aussi passer par une boucle FOR EACH

Sub masquage_feuilles()
Dim FEUILLE As Sheet

For Each FEUILLE in Sheets

If FEUILLE.Name <> "Calendrier" Or FEUILLE.Name <> "Férier" Then
FEUILLE.Visible = True
Else
FEUILLE.Visible = False
End If

Next

End Sub

@+
Valérie
 
J

Jacques

Guest
Bonsoir Valérie,
Je crains que tu aies fait une petite erreur dans ton test;
En effet toutes les feuilles sont soit différentes de "calendrier" soit différentes de "férier". donc toutes les feuilles seront affichées. pour faire ce que souhaite didier il faut modifier comme suit

Sub masquage_feuilles()
Dim FEUILLE As Sheet

For Each FEUILLE in Sheets

If FEUILLE.Name <> "Calendrier" [g]And[/g] FEUILLE.Name <> "Férier" Then
FEUILLE.Visible = [g]False[/g]
Else
FEUILLE.Visible = [g]True[/g]
End If

Next

End Sub

Boone nuit
 
V

Vériland

Guest
Bonsoir ce fil,

ben y'a du monde ce soir dans ce fil...j'suis entrain d'essayer la nouvelle démo de Thierry...lol...mais je reviens vite ici...

pour Jacques : il est vrai que ton premier exemple à pour principe de mettre en première position les Feuilles nommées calendrier et ferier, de les afficher et de masquer les autres...

s'agissant de l'exemple de mon premier post, note bien que je me suis pas posé la question du nom de la feuille dans la boucle...puisque les feuilles sont retirées suivant sheet(i)...d'ailleurs j'ai bien indiqué de les placer en dernier...puisque si je me base sur la question de Didier il me semble bien avoir compris que les feuilles calendrier et ferier seraient toujours visible...

bon ce n'est pas le problème ce qui est interressant c'est d'avoir plusieurs exemples...

Par contre si je peux me permettre, ta deuxième macro sera un peu difficile à faire tourner...puisque le J n'est pas défini...

Valérie ta macro bug...les autres feuilles ne sont pas masquées...y'aurait il quelque chose qui manque ?

A+ Vériland

PS : Jacques : Essaye l'utilitaire PostVL...pour mettre en forme un message y'a pas plus simple...lol
 
@

@+Thierry

Guest
Bonsoir à tous et toutes !!

Première question ça sert à quoi le [g]False[/g] !
je ne connais pas en VBA ? (lol)

Pour la soluce de Valérie pour que çà marche chez moi je dois faire çà :
Option Explicit
Sub masquage_feuilles()
Dim FEUILLE As Worksheet
For Each FEUILLE In Sheets
If FEUILLE.Name = "Feuil1" Or FEUILLE.Name = "Feuil2" Then
FEUILLE.Visible = True
Else
FEUILLE.Visible = False
End If
Next
End Sub

Dans tous les cas il faut déclarer FEUILLE as WorkSheet chez moi (xl 2000), car avec Option Explicit on se prend une veste avec un Dim FEUILLE as Sheet !! (ptet que çà passe sous XP)

Par contre si j'applique le correctif de Jacques çà plante tel quel.

Mais mis à part cette histoire de "sens" dans le IF (on se fait avoir à chaque
fois, moi le premier....) je pense que la soluce de Valérie est celle je retiendrai.

Bonne Nuit
@+Thierry
 
J

Jacques

Guest
Bonjour à tous,

Vériland a effectivement raison; j'ai été trop vite et j'ai oublié dans mon copier-coller de remplacer j par Sheets.Count.
Mille excuses ! voilà ce que c'est quand on veut aller trop vite (idem pour le [g] où j'ai voulu m'affranchir de "PostVl".
Donc

Sub masquage_feuilles()
Sheets("ferier").visible
Sheets("ferier").Move Before:=Sheets(1)
Sheets("calendrier").visible
Sheets("calendrier").Move Before:=Sheets(1)
For i = 3 To Sheets.Count
Sheets(i).Visible = False
Next
End Sub


Bonne journée à tous
 
D

dIDIER 2

Guest
OULALA OULALA OULALA

Que de réponse, je garde sous le coude toutes les solutions, il y en a bien une qui va me reservir un de ces jours. Pour l'instant j'en séléctionne une, mais je ne dirais pas laquelle,car je ne veux pas faire de jaloux et jalouse.

merci a tous pour vos réponse varié et documenté.

Didier 2
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…