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

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
 

Fichiers joints

Dernière édition:

greg63

XLDnaute Junior
Ou ne faudrait il pas que je parte avec un code du type


Code:
Dim choix As Byte
choix = Range("Y1").Value
Select Case choix

    Case 1
 

Dranreb

XLDnaute Barbatruc
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
 

Dranreb

XLDnaute Barbatruc
Je ne peux pas voir pourquoi, puisque je n'ai pas le fichier. Alors tâchez de trouver vous même en mettant des espions sur les expressions impliquées.
 

greg63

XLDnaute Junior
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é :p
 

greg63

XLDnaute Junior
Ci joint le fichier

Pour des raisons de confidentialité je ne peux pas mettre le fichier avec les infos
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Essayez comme ça :
VB:
Sub Macro1()
   Sheets("RecNacCha").Visible = WorksheetFunction.CountIf(ActiveSheet.[Y1:AA1], 2) > 0
   Sheets("Adequa_Grue").Visible = WorksheetFunction.CountIf(ActiveSheet.[Y1:AA1], 3) > 0
   End Sub
 

greg63

XLDnaute Junior
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
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Il ne faut qu'une seule instruction pour chacune des deux feuilles, avec la bonne combinaison de conditions par des Or et And.
 

greg63

XLDnaute Junior
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
 

Haut Bas