Condition macro VBA qui bug
Bonjour à tous,
J'ai besoin de votre aide. Je bosse sur un fichier ou j'aimerai en fonction de si on sélectionne oui / non ou un pays des lignes se cachent ou apparaissent.
La partie haute de la macro fonctionne très bien (celle en fonction de oui ou non).
Par contre quand j'ajoute la partie basse si France, Allemagne, UK , Singapour et Chine ça ne fonctionne pas. Enfin ca fonctionne que quand je mets une fois la condition (si D33="France" then...) mais si je rajoute en bas Si (D33= "Allemagne") ca ne fonctionne pas.
Voila ma fonction qui fonctionne pour la partie hautee + France
Sub delete()
Range("D44:D48,D54:D55,F54:F55,D75:D79,D85:D86,F85:F86,D106:D107,D113:D114,F113:F114,D134:D134,D140:D141,F140:F141,D161:D163,D169:D170,F169:F170,D189:D189,D195:D197").ClearContents
Rows("41:185").Select
Selection.EntireRow.Hidden = False
If Range("D37") = "Non" Then
Range("41:72").EntireRow.Hidden = True
Else: Range("41:72").EntireRow.Hidden = False
End If
If Range("F37") = "Non" Then
Range("72:103").EntireRow.Hidden = True
Else: Range("72:103").EntireRow.Hidden = False
End If
If Range("H37") = "Non" Then
Range("103:131").EntireRow.Hidden = True
Else: Range("103:131").EntireRow.Hidden = False
End If
If Range("J37") = "Non" Then
Range("131:158").EntireRow.Hidden = True
Else: Range("131:158").EntireRow.Hidden = False
End If
If Range("L37") = "Non" Then
Range("158:185").EntireRow.Hidden = True
Else: Range("158:185").EntireRow.Hidden = False
End If
If Range("D33") = "France" Then
Range("92:97,120:125,147:152,176:181").EntireRow.Hidden = True
Else: Range("92:97,120:125,147:152,176:181").EntireRow.Hidden = False
End If
[B39].Select
End Sub
Par contre quand je fais comme ci dessous ça ne fonctionne plus
Sub delete()
Range("D44:D48,D54:D55,F54:F55,D75:D79,D85:D86,F85:F86,D106:D107,D113:D114,F113:F114,D134:D134,D140:D141,F140:F141,D161:D163,D169:D170,F169:F170,D189:D189,D195:D197").ClearContents
Rows("41:185").Select
Selection.EntireRow.Hidden = False
If Range("D37") = "Non" Then
Range("41:72").EntireRow.Hidden = True
Else: Range("41:72").EntireRow.Hidden = False
End If
If Range("F37") = "Non" Then
Range("72:103").EntireRow.Hidden = True
Else: Range("72:103").EntireRow.Hidden = False
End If
If Range("H37") = "Non" Then
Range("103:131").EntireRow.Hidden = True
Else: Range("103:131").EntireRow.Hidden = False
End If
If Range("J37") = "Non" Then
Range("131:158").EntireRow.Hidden = True
Else: Range("131:158").EntireRow.Hidden = False
End If
If Range("L37") = "Non" Then
Range("158:185").EntireRow.Hidden = True
Else: Range("158:185").EntireRow.Hidden = False
End If
If Range("D33") = "France" Then
Range("92:97,120:125,147:152,176:181").EntireRow.Hidden = True
Else: Range("92:97,120:125,147:152,176:181").EntireRow.Hidden = False
End If
If Range("D33") = "Allemagne" Then
Range("61:66,120:125,147:152,176:181").EntireRow.Hidden = True
Else: Range("61:66,120:125,147:152,176:181").EntireRow.Hidden = False
End If
If Range("D33") = "UK" Then
Range("61:66,92:97,147:152,176:181").EntireRow.Hidden = True
Else: Range("61:66,92:97,147:152,176:181").EntireRow.Hidden = False
End If
If Range("D33") = "Singapour" Then
Range("61:66,92:97,120:125,176:181").EntireRow.Hidden = True
Else: Range("61:66,92:97,120:125,176:181").EntireRow.Hidden = False
End If
If Range("D33") = "Chine" Then
Range("61:66,92:97,120:125,147:152").EntireRow.Hidden = True
Else: Range("61:66,92:97,120:125,147:152").EntireRow.Hidden = False
End If
[B39].Select
End Sub
Merci pour votre aide
Bonjour et bienvenue parmi nous,
pour plus de facilité et compréhension, joins un fichier à ta demande, stp!
A+
Bonjour,
Je n'ai pas de bug avec l'une ou l'autre macro.
A+
Hello,
Merci pour cette reponse.
Avec la deuxième macro, quand vous sélectionnez Allemagne par exemple, les lignes CAV CCQ et CVTEC disparaissent pour la France, UK, Singapour et la Chine?
Merci
Bonjour,
Ya pas de raison en effet la macro traite successivement tous les si...
Le si ... = Chine étant le dernier c'est toujours celui ci qui est affiché. Vrai ou Faux, mais c'est toujours le dernier qui s'applique.
Pour la première partie de la macro, voici le code optimisé :
Sub delete()
Range("D44:D48,D54:D55,F54:F55,D75:D79,D85:D86,F85:F86,D106:D107," & _
"D113:D114,F113:F114,D134:D134,D140:D141,F140:F141," & _
"D161:D163,D169:D170,F169:F170,D189:D189,D195:D197").ClearContents
Rows("41:185").Hidden = False
Range("41:72").Hidden = Not .Range("D37") = "Non"
Range("72:103").Hidden = Not .Range("F37") = "Non"
Range("103:131").Hidden = Not .Range("H37") = "Non"
Range("131:158").Hidden = Not .Range("J37") = "Non"
Range("158:185").Hidden = Not .Range("L37") = "Non"
If Range("D33") = "France"... 'La suite à déterminerHum... Pour la fin je n'ai pas d'idée. C'est un peu pilotracté hein ?
Il faut utiliser un débranchement : C'est soit France, soit Allemagne... soit Chine mais il ne peut pas y avoir de else dans chaque cas car chacun annule les précédents...
A+
merci pour ce retour. Peux tu m'aider à écrire la VBA avec soit chine soit France etc??
Bonsoir,
ça ne parait pas possible vu les conditions des Else
ça pourrait peut-être donner quelque chose qui ressemble à ça, mais c'est à toi de déterminer les bonnes plages à masquer ou non.
Dans un select case seules les lignes qui correspondent au bon case sont exécutées.
Sub delete()
Range("D44:D48,D54:D55,F54:F55,D75:D79,D85:D86,F85:F86,D106:D107," & _
"D113:D114,F113:F114,D134:D134,D140:D141,F140:F141," & _
"D161:D163,D169:D170,F169:F170,D189:D189,D195:D197").ClearContents
Rows("41:185").Hidden = False
Range("41:72").Hidden = Not .Range("D37") = "Non"
Range("72:103").Hidden = Not .Range("F37") = "Non"
Range("103:131").Hidden = Not .Range("H37") = "Non"
Range("131:158").Hidden = Not .Range("J37") = "Non"
Range("158:185").Hidden = Not .Range("L37") = "Non"
Select Case Range("D33")
Case "France"
Range("92:97,120:125,147:152,176:181").EntireRow.Hidden = True
Range("92:97,120:125,147:152,176:181").EntireRow.Hidden = False
Case "Allemagne"
Range("61:66,120:125,147:152,176:181").EntireRow.Hidden = True
Range("61:66,120:125,147:152,176:181").EntireRow.Hidden = False
Case "UK"
Range("61:66,92:97,147:152,176:181").EntireRow.Hidden = True
Range("61:66,92:97,147:152,176:181").EntireRow.Hidden = False
Case "Singapour"
Range("61:66,92:97,120:125,176:181").EntireRow.Hidden = True
Range("61:66,92:97,120:125,176:181").EntireRow.Hidden = False
End If
Case "Chine"
Range("61:66,92:97,120:125,147:152").EntireRow.Hidden = True
Range("61:66,92:97,120:125,147:152").EntireRow.Hidden = False
End Select
[B39].Select
End Sub...Mais pour l'instant ça ne me parait pas cohérent ! ...et je ne peux pas deviner !
Toi tu dois pouvoir y retrouver tes petits...
A+
Bonjour,
Sorry : Enlève les points avant Range (à chaque ligne)
Sub delete()
Range("D44:D48,D54:D55,F54:F55,D75:D79,D85:D86,F85:F86,D106:D107," & _
"D113:D114,F113:F114,D134:D134,D140:D141,F140:F141," & _
"D161:D163,D169:D170,F169:F170,D189:D189,D195:D197").ClearContents
Rows("41:185").Hidden = False
Range("41:72").Hidden = Not Range("D37") = "Non"
Range("72:103").Hidden = Not Range("F37") = "Non"
Range("103:131").Hidden = Not Range("H37") = "Non"
Range("131:158").Hidden = Not Range("J37") = "Non"
Range("158:185").Hidden = Not Range("L37") = "Non"
'La suite sans changementA+
Décidément si je tenais le galopin qui a pondu ça !
Je te redonne l'intégrale (testée cette fois ci...)
Sub delete()
Range("D44:D48,D54:D55,F54:F55,D75:D79,D85:D86,F85:F86,D106:D107," & _
"D113:D114,F113:F114,D134:D134,D140:D141,F140:F141," & _
"D161:D163,D169:D170,F169:F170,D189:D189,D195:D197").ClearContents
Rows("41:185").Hidden = False
Rows("41:72").Hidden = Not Range("D37") = "Non"
Rows("72:103").Hidden = Not Range("F37") = "Non"
Rows("103:131").Hidden = Not Range("H37") = "Non"
Rows("131:158").Hidden = Not Range("J37") = "Non"
Rows("158:185").Hidden = Not Range("L37") = "Non"
Select Case Range("D33")
Case "France"
Range("92:97,120:125,147:152,176:181").EntireRow.Hidden = True
Range("92:97,120:125,147:152,176:181").EntireRow.Hidden = False
Case "Allemagne"
Range("61:66,120:125,147:152,176:181").EntireRow.Hidden = True
Range("61:66,120:125,147:152,176:181").EntireRow.Hidden = False
Case "UK"
Range("61:66,92:97,147:152,176:181").EntireRow.Hidden = True
Range("61:66,92:97,147:152,176:181").EntireRow.Hidden = False
Case "Singapour"
Range("61:66,92:97,120:125,176:181").EntireRow.Hidden = True
Range("61:66,92:97,120:125,176:181").EntireRow.Hidden = False
Case "Chine"
Range("61:66,92:97,120:125,147:152").EntireRow.Hidden = True
Range("61:66,92:97,120:125,147:152").EntireRow.Hidden = False
End Select
[B39].Select
End Sub... Attention ça ne garantie pas la logique du select case : toi seul y voit clair dans ce que tu veux masquer ou pas...
A+
trop bien merci!!!!!!!!!
je l'ai changé ainsi et ça fonctionne parfaitement je revis
Range("D44:D48,D54:D55,F54:F55,D75:D79,D85:D86,F85:F86,D106:D107,D113:D114,F113:F114,D134:D134,D140:D141,F140:F141,D161:D163,D169:D170,F169:F170,D189:D189,D195:D197").ClearContents
Rows("41:185").Hidden = False
Rows("41:72").Hidden = Not Range("D37") = "Oui"
Rows("72:103").Hidden = Not Range("F37") = "Oui"
Rows("103:131").Hidden = Not Range("H37") = "Oui"
Rows("131:158").Hidden = Not Range("J37") = "Oui"
Rows("158:185").Hidden = Not Range("L37") = "Oui"
Select Case Range("D33")
Case "France"
Range("92:97,120:125,147:152,176:181").EntireRow.Hidden = True
Case "Allemagne"
Range("61:66,120:125,147:152,176:181").EntireRow.Hidden = True
Case "UK"
Range("61:66,92:97,147:152,176:181").EntireRow.Hidden = True
Case "Singapour"
Range("61:66,92:97,120:125,176:181").EntireRow.Hidden = True
Case "Chine"
Range("61:66,92:97,120:125,147:152").EntireRow.Hidden = True
End Select
[B39].Select
End Sub
merci encore!!!!

