[Résolu] 3 cases VBA pour Afficher ou ne pas afficher une feuille [Résolu]

  • Initiateur de la discussion Initiateur de la discussion greg63
  • 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 !

greg63

XLDnaute Junior
Bonjour à tous

Je viens à vous car je dois créer une macro parmi mes autres macros.

Dans ma feuille (InfromationG) J'ai 3 cases développeur EN N10 liée à Y1 la Q10 liée à Z1 la T10 liée a AA1

Je souhaiterais une macro qui me permette d'afficher les feuilles RecNacCha et AdequaGrue

Si je sélectionne Nacelle (Y1 =1 ou Z1=1 ou AA1=1) dans l'une de mes 3 cases la feuille RecNacCha s'affiche sinon la feuille est masquée
Si je sélectionne Chariot (Y1 =2 ou Z1=2 ou AA1=2 ) dans l'une de mes 3 cases les feuilles RecNacCha et Adequa-Grue s'affichent sinon elles sont masquées
Si je sélectionne Grue (Y1 =3 ou Z1=3 ou AA1=3 ) dans l'une de mes 3 cases la feuille Adequa-Grue s'affichent sinon elle est masquée

Si je sélectionne vide (Y1 =4 et Z1=4 et AA1=4 ) je n'affiche aucune de ces feuilles

par contre si j'ai en Y1 =1 et Z1=3 et AA1=4) les deux feuilles s'affichent

La contrainte : en cas de 2 choix différents je ne veux pas que la macro soit lourde ou alourdissent le systéme. Une fonction NB.SI pourrait peut être m'aider. Ma connaissance limite de VBA ne permet pas d'aller plus loin

J'ai commencé à lancer ce code mais ça à l'air d'être lourd

VB:
Sub Macro1()
Sub Macro1()
'
' Macro1 Macro
' ' macro pour l'affichage d'un fiche
'

'
If Range("Y1") = 1 Or Range("Z1") = 1 Or Range("AA1") = 1 Then
Sheets("RecNacCha").Visible = True
Else
Sheets("RecNacCha").Visible = False
End If

If Range("Y1") = 2 Or Range("Z1") = 2 Or Range("AA1") = 2 Then
Sheets("RecNacCha").Visible = True
Sheets("Adequa_Grue").Visible = True
Else
Sheets("RecNacCha").Visible = False
Sheets("Adequa_Grue").Visible = False
End If

If Range("Y1") = 3 Or Range("Z1") = 3 Or Range("AA1") = 3 Then

Sheets("Adequa_Grue").Visible = True
Else
Sheets("Adequa_Grue").Visible = False
End If

If Range("Y1") = 4 Or Range("Z1") = 4 Or Range("AA1") = 4 Then
Sheets("RecNacCha").Visible = False
Sheets("Adequa_Grue").Visible = False
End If

End Sub

Pouvez vous m'aider ou me conseiller

Je vous remercie pour votre aide
 

Pièces jointes

  • Sans titre.png
    Sans titre.png
    29.7 KB · Affichages: 18
Dernière édition:
Bonjour.
J'envisagerais quelque chose comme ça :
VB:
Sub Macro1()
   Dim Maxi As Long
   Maxi = WorksheetFunction.Max([Y1:AA1])
   Sheets("RecNacCha").Visible = Maxi >= 1 And Maxi < 3
   Sheets("Adequa_Grue").Visible = Maxi >= 2 And Maxi < 4
   End Sub
À tester
 
J'ai tenté ce code
VB:
Sub Macro1()
'
' Macro1 Macro
'

'
'If Range("Y1:AB1").Select

If (CountBlank("Y1:AB1", 1) < 1) Or (CountBlank("Y1:AB1", 2) < 1) Then
Sheets("RecNacCha").Visible = False
End If
If (CountBlank("Y1:AB1", 3) < 1) Or (CountBlank("Y1:AB1", 2) < 1) Then
Sheets("Adequa_Grue").Visible = False
End If
If (CountBlank("Y1:AB1", 4) = 3) Then
Sheets("Adequa_Grue").Visible = False
Sheets("RecNacCha").Visible = False
End If

End Sub

=> Comment dire n'a pas l'effet escompté 😛
 
Saut Merci pour la réponse

C'est quasiment ce que je veux avec le fait (que si ce n'est pas coché la feuille disparait)

Par contre je me trouve bloqué LORSQUE si j'utilise la formule
VB:
    Sheets("RecNacCha").Visible = WorksheetFunction.CountIf(ActiveSheet.[Y1:AA1], 1) > 0
     Sheets("RecNacCha").Visible  = WorksheetFunction.CountIf(ActiveSheet.[Y1:AA1], 2) > 0
    Sheets("Adequa_Grue").Visible = WorksheetFunction.CountIf(ActiveSheet.[Y1:AA1], 2) > 0
    Sheets("Adequa_Grue").Visible = WorksheetFunction.CountIf(ActiveSheet.[Y1:AA1], 3) > 0
 

End Sub

Les fiches n'apparaissent pas correctement lorsque j'ai 3 conditions ou plus Avec 2 conditions pas de soucis
 
Bonjour

La solution a été trouvée en même temps que votre message

VB:
    Sheets("RecNacCha").Visible = WorksheetFunction.CountIf(ActiveSheet.[Y1:AA1], 1) > 0 Or WorksheetFunction.CountIf(ActiveSheet.[Y1:AA1], 2) > 0
    

    Sheets("Adequa_Grue").Visible = WorksheetFunction.CountIf(ActiveSheet.[Y1:AA1], 3) > 0 Or WorksheetFunction.CountIf(ActiveSheet.[Y1:AA1], 2) > 0

Je vous remercie énormément pour votre aide
 
- 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

Discussions similaires

  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
649
Retour