Microsoft 365 Plusieurs conditions avec Sub Worksheet_Activate() ou Change

pat66

XLDnaute Impliqué
Bonjour le forum,

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 cellule F30 est 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 cellule F30 est é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 feuille1 la 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 la feuille2 = 0, on masque la forme
si sur la feuille1 la cellule F30 est différente de "nord", "sud", "est", "ouest", et que la cellule AQ17 de la feuille2 = 0, on masque la forme
si sur la feuille1 la cellule F30 est différente de "nord", "sud", "est", "ouest", et que la cellule AQ17 de la feuille2 <> 0, on masque la forme

un grand merci à tous
 
Dernière édition:
Solution
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

ThierryP

XLDnaute Occasionnel
Bonjour pat66,

Quelque chose comme ça peut-être :
VB:
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
 

Dranreb

XLDnaute Barbatruc
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.
 
Dernière édition:

pat66

XLDnaute Impliqué
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.
Dranreb,

j'ai testé votre solution mais la condition suivante n'est pas respectée ?
si sur la feuille1 la cellule F30 est différente de "nord", "sud", "est", "ouest", et que la cellule AQ17 de la feuille2 = 0, on masque la forme

merci d'avance
 

Dranreb

XLDnaute Barbatruc
… 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
 

pat66

XLDnaute Impliqué
ok,

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") ??
 

Dranreb

XLDnaute Barbatruc
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
 
Dernière édition:

pat66

XLDnaute Impliqué
ok,

c'est une excellente idée d'avoir pensé à "change", je vous remercie car c'est vrai que je dois pouvoir changer la valeur de AQ17

et j'ai coller dans activate
Me.Shapes("Rectangle : coins arrondis 101").Visible = InStr("|nord|sud|est|ouest|", _
"|" & Worksheets("Feuil1").[F30].Value & "|") > 0 And Me.[AQ17].Value <> 0

ca à l'air de fonctionner, je fais encore quelques tests ...
 
Dernière édition:

pat66

XLDnaute Impliqué
ça fonctionne nickel !!

un grand merci à vous Dranreb, vos compétences n'ont d'égal que votre générosité, (je sais pas si c'est français mais j'avais envie de le dire) ;)

Et merci aussi à ThierryP pour avoir essayer de m'aider....

bonne soirée
 

Discussions similaires

Statistiques des forums

Discussions
312 209
Messages
2 086 271
Membres
103 168
dernier inscrit
isidore33