VBA : Macro Affichage ou Désaffichage de feuilles

  • Initiateur de la discussion Initiateur de la discussion virgal
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

V

virgal

Guest
Bonjour,

J'ai créé une macro pour afficher ou non des feuilles en fonction des informations marquées (voir pièce ci jointe)

Voici la macro en question.
Le problème est que cela bugue et je suis obligé de la stopper par echap.
Là je découvre alors que la valeur i toujours égale à 1 ce que je ne comprends pas.

Merci d'avance de votre aide

Private Sub Afficher_Click()

Dim yini As Integer
Dim xini As Integer
Dim y As Integer
Dim i As Integer
Dim feuille As String




i = 0
yini = 6
xini = 2
y = 20

Do
If Cells(yini, 2).Value = "X" Then

Do 'procedure de recherche du premier élément rempli
xini = xini + 1
Loop Until Cells(y, xini).Value = Cells(yini, 1).Value Or xini = 20

Do
i = 1
feuille = Cells(y + i, 1).Value
If Cells(y + i, xini) = "X" Then
Sheets(feuille).Visible = True
Else
Sheets(feuille).Visible = False
End If
i = i + 1
Loop Until Cells(y + i, 1) = "" Or i = 30
Else

yini = yini + 1

End If
Loop Until yini = 5


End Sub
 

Pièces jointes

Re : VBA : Macro Affichage ou Désaffichage de feuilles

Merci cela m'a debuggué partiellement ma solution.

J'ai ainsi pu faire d'autres modifs.
Cela mets un temps fou à se finir du coup je suis obligé d'interompre.

Private Sub Afficher_Click()

Dim yini As Integer
Dim xini As Integer
Dim y As Integer
Dim i As Integer
Dim feuille As String




i = 0
yini = 6

y = 20

Do
xini = 1
If Cells(yini, 2).Value = "OUI" Then

Do 'procedure de recherche du premier élément rempli
xini = xini + 1
Loop Until Cells(y, xini).Value = Cells(yini, 1).Value Or xini > 20
i = 1
Do

feuille = Cells(y + i, 1).Value
If Cells(y + i, xini) = "OUI" Then
Sheets(feuille).Visible = True

Else
Sheets(feuille).Visible = False
End If
i = i + 1
Loop Until Cells(y + i, 1) = "" Or i = 30
Else

yini = yini + 1

End If
Loop Until yini = 16


End Sub
 

Pièces jointes

Re : VBA : Macro Affichage ou Désaffichage de feuilles

je souhaite afficher des feuilles par thème

les 2 premières lignes indiquent la catégorie que je souhaite afficher

les lignes suivantes paramètrent chaque catégorie.
le fichier final comportera plus d'une quarantaine de feuille et je souhaite afficher que celle qui m'intéresse. Afficher les 40 d'un coup serait illisible.
 
Re : VBA : Macro Affichage ou Désaffichage de feuilles

Merci bien Lii,

Cela correspond à ce que je voulais ...

Je ne comprends pas ta remarque sur la boucle ... J'ai 3 boucles DO... LOOP UNTIL et 2 IF comme dans ta solution sauf que toi tu utilises un IIf() (fonction que je ne connaissais pas par ailleurs).

Autre question : tu as utilisé une autre fonction UCase
UCase(Cells(yini, 2).Value) = "OUI"
A quoi sert-elle ? par rapport à
Cells(yini, 2).Value = "OUI"
Cette fonction m'est inconnue jusqu'à ce moment. Il s'agit pour moi d'en comprendre son utilisation.

Encore merci,
 
Re : VBA : Macro Affichage ou Désaffichage de feuilles

Salut,

Comme je suis la et que j'ai un peu suivi le fil, j'en profite pour te répondre.
Alors Ucase permet de passer une chaine de caratère en majuscule et Lcase en minuscule.
Donc l'avantage avec UCase(Cells(yini, 2).Value) = "OUI" c'est que quelque soit la casse (=minuscule/majuscule) du texte présent dans la cellule (oui, Oui, OUi, ouI,...), la fonction UCase va te renvoyer une chaine majuscule = OUI qui sera donc comparable au "OUI" de ta condition.

Sinon, on a eu un petite débat lors de la rencontre XLD à ce sujet, mais tu peux utiliser la fonction Option Compare Text qui permet de ne plus tenir compte de la casse. Il te suffit de placer cette ligne de code tout en haut du module, avant tout autre code.

Et la fonction IIf que perso, je ne pense jamais à utiliser correspond à la formule SI dans une feuille de calcul. Je te laisse regarder l'aide vba (F1) si tu ne vois pas de quoi je parle.

@+
 
Re : VBA : Macro Affichage ou Désaffichage de feuilles

Merci porcinet82,

Pour IIF j'ai compris quand j'ai vu son utilisation mais j'ai vérifié par l'aide.

Pour ceux qui veulent suivre les modifications sans ouvrir le fichier
La macro est devenue maintenant (version Lii) :

Private Sub Afficher_Click()

Dim yini As Integer
Dim xini As Integer
Dim y As Integer
Dim i As Integer
Dim feuille As String
i = 0
yini = 6
y = 20
Application.ScreenUpdating = False
Do
xini = 1
If UCase(Cells(yini, 2).Value) = "OUI" Then
Do 'procedure de recherche du premier élément rempli
xini = xini + 1
Loop Until Cells(y, xini).Value = Cells(yini, 1).Value Or xini > 20
i = 1
Do
feuille = Cells(y + i, 1).Value
Sheets(feuille).Visible = IIf(UCase(Cells(y + i, xini)) = "OUI", True, False)
i = i + 1
Loop Until Cells(y + i, 1) = "" Or i = 30
End If
yini = yini + 1
Loop Until yini = 16
Application.ScreenUpdating = True
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
917
Réponses
4
Affichages
738
Réponses
2
Affichages
528
Réponses
15
Affichages
793
Retour