[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
 

Pièces jointes

  • Sans titre.png
    Sans titre.png
    29.7 KB · Affichages: 16
Dernière édition:

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
 

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
 

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
 

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
 

Discussions similaires

Réponses
4
Affichages
419
Réponses
0
Affichages
308
Réponses
3
Affichages
166

Statistiques des forums

Discussions
314 653
Messages
2 111 577
Membres
111 205
dernier inscrit
Adrien25