XL 2019 Worksheet_Change(ByVal Target As Range), 3 alternatives

pat66

XLDnaute Impliqué
Bonjour le forum,

auriez vous la gentillesse de me donner un coup de main svp

Conditions souhaitées dans workbook change de la Feuille 1 :

Code:
[CODE=vb]If Worksheets("Feuil1").Range("AM106").Value = 2 and Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 51").Visible = True Then
Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 6").Visible = False
Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 36").Visible = true
else
Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 6").Visible = true
Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 36").Visible = false
end if
[/CODE]

mais je souhaite en plus que que si une des deux conditions n'est pas remplie, alors :
Code:
Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 6").Visible = false
Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 36").Visible = false

un grand merci

Pat66
 
Solution
re
bonjour
la chose est tres simple
je te cite
'en d 'autres termes
'Si AM6 = 1 et la forme 51 est visible, on affiche la forme 6 et on masque la forme 36
'Si AM6 = 2 et la forme 51 est visible, on affiche la forme 36 et on masque la forme 6
'mais si la forme 51 est masquée, on masque les formes 6 et 36 quelque soit le contenu de AM6
dans le module de la Feuil1
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
onCacheOnMontre
End Sub



Dans un module standard
change les nomsdes shapes pour les tiens
dans cet exemple avec ces dux lignes tu gère les 3 conditions
Code:
Sub onCacheOnMontre()
dim cel as range
Set cel = sheets("Feuil1").[AM106]
With sheets("Feuil2")
.Shapes("forme6").Visible = cel = 1 And...

TooFatBoy

XLDnaute Barbatruc
Bonjour,

auriez vous la gentillesse de me donner un coup de main svp
On va essayer ;)

Une proposition :
VB:
    If Worksheets("Feuil1").Range("AM106").Value = 2 And Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 51").Visible = True Then
        Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 6").Visible = False
        Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 36").Visible = True
    Else
        If Worksheets("Feuil1").Range("AM106").Value = 2 Or Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 51").Visible = True Then
            Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 6").Visible = False
            Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 36").Visible = False
        Else
            Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 6").Visible = True
            Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 36").Visible = False
        End If
    End If
 

pat66

XLDnaute Impliqué
bonjour le forum
Bonjour TooFatBoy,

un grand merci à vous deux pour votre aide et encore une fois TooFatBoy m'a mis sur la piste, voici la solution qui répond à mes attentes :

If Worksheets("Feuil1").Range("AM106").Value = 2 And Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 51").Visible = True Then
Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 6").Visible = False
Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 36").Visible = True
Else
Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 6").Visible = True
Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 36").Visible = False
End If
If Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 51").Visible = False Then
Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 6").Visible = False
Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 36").Visible = False
End If

bon we
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Vérifiez si ça ne revient pas à :
VB:
Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 36").Visible _
      = Worksheets("Feuil1").Range("AM106").Value = 2 And Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 51").Visible
Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 6").Visible _
      = Worksheets("Feuil1").Range("AM106").Value <> 2 And Not Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 51").Visible
Vous devriez quand même donner des noms plus significatifs à vos Shape, vous ne pourriez que vous y retrouver plus facilement.
 

patricktoulon

XLDnaute Barbatruc
Bonjour tous
peut être aussi variabliser pour le mal aux yeux
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim F1 As Worksheet, F2 As Worksheet

Set F2 = Worksheets("Feuil2")
Set F1 = Worksheets("Feuil1")

F2.Shapes("Rectangle : coins arrondis 36").Visible = _
       F1.Range("AM106").Value = 2 And F2.Shapes("Rectangle : coins arrondis 51").Visible


F2.Shapes("Rectangle : coins arrondis 6").Visible = _
       F1.Range("AM106").Value <> 2 And Not F2.Shapes("Rectangle : coins arrondis 51").Visible
End Sub
 

pat66

XLDnaute Impliqué
bonjour à tous,

effectivement vos solutions sont beaucoup plus propres et je vous en remercie, mais elles ne tiennent pas compte de la 3eme condition :
VB:
If Shapes("Rectangle : coins arrondis 51").Visible = False Then
Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 6").Visible = False
Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 36").Visible = False

cdt
 

pat66

XLDnaute Impliqué
oui bien sur, patrickToulon et Dranreb sont les mêmes solutions, mais écrites différemment et malheureusement cette condition n'est pas respectée :
If Shapes("Rectangle : coins arrondis 51").Visible = False Then
Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 6").Visible = False
Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 36").Visible = False
 

pat66

XLDnaute Impliqué
en d'autres termes
Si AM6 = 1 et la forme 51 est visible, on affiche la forme 6 et on masque la forme 36
Si AM6 = 2 et la forme 51 est visible, on affiche la forme 36 et on masque la forme 6
mais si la forme 51 est masquée, on masque les formes 6 et 36 quelque soit le contenu de AM6
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Pourtant, au niveau logique, ça semble parfaitement correspondre à ta demande. 🤔

Ta demande initiale :
VB:
Sub test_1()
'
    C_1 = Worksheets("Feuil1").Range("AM106").Value
    C_2 = Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 51").Visible

    Set Coin_6 = Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 6")
    Set Coin_36 = Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 36")

    If (C_1 = 2) And (C_2 = True) Then
        Coin_6.Visible = False
        Coin_36.Visible = True
    Else
        Coin_6.Visible = True
        Coin_36.Visible = False
    End If

    If (C_1 <> 2) Or (C_2 = False) Then
        Coin_6.Visible = False
        Coin_36.Visible = False
    End If

End Sub

Ce qui peut se remplacer par :
VB:
Sub test_2()
'
    C_1 = Worksheets("Feuil1").Range("AM106").Value
    C_2 = Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 51").Visible

    Set Coin_6 = Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 6")
    Set Coin_36 = Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 36")

    Coin_6.Visible = (C_1 <> 2) And (C_2 = False)
    Coin_36.Visible = (C_1 = 2) And (C_2 = True)

End Sub

Et c'est exactement la réponse de Dranreb.

Peux-tu m'expliquer où il y a erreur, car je ne vois pas. :(
 
Dernière édition:

pat66

XLDnaute Impliqué
re,

ton post 10 =
si je mets 2 dans AM106 et que la forme 51 est visible, la forme 36 s'affiche et la forme 6 est masquée = ok
si je mets 1 dans AM106 et que la forme 51 est visible, les formes 6 et 36 sont masquées, hors la forme 6 devrait s'afficher et la forme 36 être masquée

Les formes 6 et 36 ne doivent être masquées uniquement que si la forme 51 est masquée
 

TooFatBoy

XLDnaute Barbatruc
si je mets 1 dans AM106 et que la forme 51 est visible, les formes 6 et 36 sont masquées, or la forme 6 devrait s'afficher et la forme 36 être masquée
Non, ce n'est pas ce que tu as demandé en #1 :
mais je souhaite en plus que que si une des deux conditions n'est pas remplie, alors :
Code:
Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 6").Visible = false
Worksheets("Feuil2").Shapes("Rectangle : coins arrondis 36").Visible = false

Dans ton exemple, une des deux conditions n'est pas remplie (AM106<>2 mais Forme51 visible), donc on devrait avoir les deux formes masquées.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
en d'autres termes
Si AM6 = 1 et la forme 51 est visible, on affiche la forme 6 et on masque la forme 36
Si AM6 = 2 et la forme 51 est visible, on affiche la forme 36 et on masque la forme 6
mais si la forme 51 est masquée, on masque les formes 6 et 36 quelque soit le contenu de AM6
Bonjour
bon ben la c'est déjà plus clair
alors c'est simple je viens de tester ca match
remplace "A1" par "AM106"

deux conditions en remplissent 3
exemple
VB:
'en d 'autres termes
'Si AM6 = 1 et la forme 51 est visible, on affiche la forme 6 et on masque la forme 36
'Si AM6 = 2 et la forme 51 est visible, on affiche la forme 36 et on masque la forme 6
'mais si la forme 51 est masquée, on masque les formes 6 et 36 quelque soit le contenu de AM6
 

Sub onCacheOnMontre()
Set cel = [A1]
With ActiveSheet
.Shapes("forme6").Visible = cel = 1 And .Shapes("forme51").Visible
.Shapes("forme36").Visible = cel = 2 And .Shapes("forme51").Visible
End With
End Sub

'sub pour me cacher la 51 pour les tests (à supprimer bien sur )
Sub cachemontre51()
With ActiveSheet.Shapes("forme51"): .Visible = Not .Visible: End With
onCacheOnMontre
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 210
Messages
2 086 279
Membres
103 170
dernier inscrit
HASSEN@45