j'ai besoin d'aide car j'ai du mal à ajouter une condition à cette macro, à savoir :
Précision :
si activate module de la Feuille2
si change module de la Feuille1
si sur la feuille1 la celluleF30est différente de "nord", "sud", "est", "ouest", alors on masque la Shapes("Rectangle : coins arrondis 101") située sur la feuille2
si sur la feuille1 la celluleF30est égale de "nord", "sud", "est", "ouest", alors on masque la Shapes("Rectangle : coins arrondis 101") située sur la feuille2
VB:
Private Sub Worksheet_Activate()
If Worksheets("Feuil1").Range("F30") <> "nord" And Worksheets("Feuil1").Range("F30") <> "sud" and Worksheets("Feuil1").Range("F30") <> "est" And Worksheets("Feuil1").Range("F30") <> "ouest" then
Worksheets("feuil2").Shapes("Rectangle : coins arrondis 101").Visible = msoFalse
Else
Worksheets("feuil2").Shapes("Rectangle : coins arrondis 101").Visible = msoTrue
End If
mais je dois modifier cette macro et ajouter cette condition :
si sur la feuille1la cellule F30 est égale à "nord", "sud", "est", "ouest", et que la cellule AQ17 de la feuille2<> 0, on ne masque pas la forme
si sur la feuille1 la cellule F30 est égale à "nord", "sud", "est", "ouest", et que la cellule AQ17 de lafeuille2 = 0, on masque la forme
si sur lafeuille1 la cellule F30 est différente de "nord", "sud", "est", "ouest", et que la cellule AQ17 de lafeuille2 = 0, on masque la forme
si sur lafeuille1 la cellule F30 est différente de "nord", "sud", "est", "ouest", et que la cellule AQ17 de lafeuille2 <> 0, on masque la forme
La valeur Empty d'une cellule vide est en effet convertie en 0 dans une expression arithmétique ou une expression logique combinant d'autre valeurs numériques. Mais avec la fonction Instr ça ne va pas si le terme de droite est une chaine vide: elle retourne 1. Dans ce cas :
VB:
Private Sub Worksheet_Activate()
Me.Shapes("Rectangle : coins arrondis 101").Visible = InStr("|nord|sud|est|ouest|", _
"|" & Worksheets("Feuil1").[F30].Value & "|") > 0 And Me.[AQ17].Value <> 0
End Sub
Sub Geographie()
If InStr("nordsudestouest", LCase(Worksheets("Feuil1").Range("F30"))) <> 0 Then
If Worksheets("Feuil2").Range("AQ17") <> 0 Then
Worksheets("feuil2").Shapes("Rectangle : coins arrondis 101").Visible = True
Else
Worksheets("feuil2").Shapes("Rectangle : coins arrondis 101").Visible = False
End If
Else
Worksheets("feuil2").Shapes("Rectangle : coins arrondis 101").Visible = False
End If
End Sub
Bonjour.
Essayez ce genre dans le module de l'objet Worksheet représentant la feuille2 :
VB:
Private Sub Worksheet_Activate()
Me.Shapes("Rectangle : coins arrondis 101").Visible = InStr("nord|sud|est[ouest", _
Worksheets("Feuil1").[F30].Value) > 0 And Me.[AQ17].Value <> 0
End Sub
Utilisez comme opérateur :
And si les deux condition doivent être vraies,
Or si elles ne doivent être fausses toutes les deux,
Xor si les deux conditions doivent être dans des états différents,
Eqv si elles doivent être dans des états identiques.
Bonjour.
Essayez ce genre dans le module de l'objet Worksheet représentant la feuille2 :
VB:
Private Sub Worksheet_Activate()
Me.Shapes("Rectangle : coins arrondis 101").Visible = InStr("nord|sud|est[ouest", _
Worksheets("Feuil1").[F30].Value) > 0 And Me.[AQ17].Value <> 0
End Sub
Utilisez comme opérateur :
And si les deux condition doivent être vraies,
Or si elles ne doivent être fausses toutes les deux,
Xor si les deux conditions doivent être dans des états différents,
Eqv si elles doivent être dans des états identiques.
j'ai testé votre solution mais la condition suivante n'est pas respectée ? si sur lafeuille1 la cellule F30 est différente de "nord", "sud", "est", "ouest", et que la cellule AQ17 de lafeuille2 = 0, on masque la forme
… du moins à l'activation de la feuille2. Mais pas en tapant quelque chose ou en effaçant sa cellule AQ17.
Pour que ça le fasse à ce moment là il faudrait aussi :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Me.[AQ17], Target) Is Nothing Then Exit Sub
Me.Shapes("Rectangle : coins arrondis 101").Visible = InStr("nord|sud|est|ouest", _
Worksheets("Feuil1").[F30].Value) > 0 And Me.[AQ17].Value <> 0
End Sub
est ce que Worksheets("D.S.I").[F30].Value) > 0 signifie que la cellule F30 doit être supérieure à 0 ou excel considère qu'une si une de ces valeurs n'est pas renseignée, il traduit par 0 ?
car dans cette cellule in ne peut y avoir que ("nord|sud|est[ouest")
J'ai toujours le même problème comme décrit au post #5 , ("Rectangle : coins arrondis 101") reste visible avec activate, alors que AQ17 est à 0 et que Worksheets("Feuil1").[F30] ne contient pas ("nord|sud|est[ouest") ??
La valeur Empty d'une cellule vide est en effet convertie en 0 dans une expression arithmétique ou une expression logique combinant d'autre valeurs numériques. Mais avec la fonction Instr ça ne va pas si le terme de droite est une chaine vide: elle retourne 1. Dans ce cas :
VB:
Private Sub Worksheet_Activate()
Me.Shapes("Rectangle : coins arrondis 101").Visible = InStr("|nord|sud|est|ouest|", _
"|" & Worksheets("Feuil1").[F30].Value & "|") > 0 And Me.[AQ17].Value <> 0
End Sub