J'ai du mal rédiger cette macro avec select Case, quelqu'un aurait-il la gentillesse de me donner un coup de main
voici les conditions :
Private Sub Worksheet_Change(ByVal Target As Range)
If ActiveSheet.Range("F30") <> "oxigene" then
Worksheets("Feuil2").Shapes("APC").Visible = false
Worksheets("Feuil2").Shapes("ORF").Visible = false
If ActiveSheet.Range("F30")="oxigene" and ActiveSheet.Range("F31") = "T" then
Worksheets("Feuil2").Shapes("APC").Visible = false
Worksheets("Feuil2").Shapes("ORF").Visible = true
If ActiveSheet.Range("F30")="oxigene" and ActiveSheet.Range("F31") <> "T" then
Worksheets("Feuil2").Shapes("APC").Visible = True
Worksheets("Feuil2").Shapes("ORF").Visible = false
end sub
Dans un module d'objet Worksheet, Me désigne cet objet, et c'est généralement forcément la feuille active, du moins dans une Sub Worksheet_SelectionChange. Une Worksheet_Change pourrait à la rigueur s'exécuter si sa feuille est modifiée de l’extérieur alors qu'elle n'est pas active.
Bonjour à tous
juste en passant
le if <>"oxygene" doit etre separé ou alors le reste du code doit etre dans un else
pour le faire dans un select case comme tu a plusieurs conditions il faut utiliser un case true/false
ensuite il faut utiliser une règle de priorité de passage des cases sinon ça n'a pas l'effet escompté
car en effet plusieurs case peuvent te donner true ou false
et oui un case sera toujours plus rapide tout simplement parce que quand il a trouver le bon case on sort du select tandis qu'avec un if ou plusieur ou même avec des else , l'execusion lit tout les cases même si il a déjà trouver son "If"
bien que là avec 3 condition on a pas vraiment besoins de chercher gagner du temps
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
With Worksheets("Feuil2")
Select Case True
Case ActiveSheet.Range("F30") = "oxigene" And ActiveSheet.Range("F31") = "T"
.Shapes("APC").Visible = False
.Shapes("ORF").Visible = True
Case ActiveSheet.Range("F30") = "oxigene" And ActiveSheet.Range("F31") <> "T"
.Shapes("APC").Visible = True
.Shapes("ORF").Visible = False
Case ActiveSheet.Range("F30") <> "oxigene"
.Shapes("APC").Visible = False
.Shapes("ORF").Visible = False
End Select
End With
End Sub
Avec ta macro, je souhaiterai pouvoir aussi afficher ou masquer un Shapes sur la feuille active en plus de la feuil2, pourrais tu m'indiquer comment l'écrire, j'ai bien essayé en ajoutant à :
Private Sub Worksheet_Change(ByVal Target As Range)
With Worksheets("Feuil2")
Select Case True
Case ActiveSheet.Range("F30") = "oxigene" And ActiveSheet.Range("F31") = "T"
.Shapes("APC").Visible = False
.Shapes("ORF").Visible = True
j'avoue je pige pas d'une manière ou d'une autre ça te renvoie true ou false
sans doute a tu fait une faute de syntaxe
mais l'idée de @job75 est très bien
je plussoie @Dranreb pour le "Me" "activesheet" pourrait ne pas être la bonne feuille active en effet
comme ça on est sur que c'est bien les F30 et 31 de la bonne feuille qui est sont testés
Bonjour.
Si les Shape sont sur une autre feuille j'aurais peut être plutôt mis le code dans une Sub Worksheet_Activate du module Worksheet de cette autre feuille là. A quoi bon changer la visibilité de formes qu'on ne pourra voir que lorsqu'on l'activera ? …