Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…