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,

Oui, je pense que c'est mieux.

Voila le fichier

Merci

hello,

Help please

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éterminer

Hum... 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+

Merci beaucoup pour ton retour .

Je testais ta maccro et j'obtiens ça (scan ecran en pj)?

pb maccro

Une idée pourquoi?

Merci!!

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 changement

A+

merci beaucoup pour ta réponse rapide,

Mais du coup j'ai un nouveau message erreur (merci pour ta patience!!).

pb maccro message erreur

Merci encore

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!!!!

Rechercher des sujets similaires à "condition macro vba qui bug"