XL 2019 Afficher ou masquer commandbutton avec condition

pat66

XLDnaute Impliqué
Bonjour Le forum,
je cherche la macro qui me permette d'afficher ou masquer un commandbutton
ex :
en B6 il y a écrit : Lyon ou Marseille ou Paris, le bouton s'affiche
en B6 il y a écrit: Nantes ou Bayonne ou Nice, le bouton reste masqué

Je précise que la source de B6 est sur une autre feuille

un grand merci

Pat66
 
Dernière édition:
Solution
Bonjour à tous,
effectivement Jacky pour réinitialiser la couleur il suffit de rajouter en feuil1 dans activate
If CommandButton1.Visible = False Then
Range("D12") = "B"
CommandButton1.BackColor = RGB(19, 31, 57)
CommandButton1.ForeColor = RGB(255, 192, 0)
End If
Range("A2").Select

merci à tous et belle journée

Jacky67

XLDnaute Barbatruc
Bonjour Le forum,
je cherche la macro qui me permette d'afficher ou masquer un commandbutton
ex :
en B6 il y a écrit : Lyon ou Marseille ou Paris, le bouton s'affiche
en B6 il y a écrit: Nantes ou Bayonne ou Nice, le bouton reste masqué

Je précise que la source de B6 est sur une autre feuille

un grand merci

Pat66
Bonjour,
Ce code dans le module de la feuille ou se trouve la saisie des villes
Feuil1 étant le code name de la feuille avec le bouton (A adapter)

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$B$6" Then
        Feuil1.CommandButton1.Visible = LCase([b6]) = "lyon" Or LCase([b6]) = "marseille" Or LCase([b6]) = "paris"
    End If
End Sub
 
Dernière édition:

pat66

XLDnaute Impliqué
Bonjour Jacky67,

j'ai bien suivi tes conseils
dans la feuil2 case B6, j'ai une liste déroulante avec la liste des villes à choisir et
dans la feuil1 le commandbutton1, j'ai adapté ta macro, mais elle s'arrête :
j'ai mis dans feuil2 :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$6" Then
Feuil1.CommandButton1.Visible = LCase([b6]) = "LYON" Or LCase([b6]) = "MARSEILLE" Or LCase([b6]) = "PARIS"
End If
End Sub

j'ai testé en remplaçant les LCase en UCase, ça à l'air de fonctionner ?

Pourrait on ajouter une condition ?
si la ville ne fait pas partie de la liste alors on écrit la valeur B dans la cellule AE108 de la feuil1

merci

belle journée
 
Dernière édition:

Jacky67

XLDnaute Barbatruc
Bonjour Jacky67,

j'ai bien suivi tes conseils
dans la feuil2 case B6, j'ai une liste déroulante avec la liste des villes à choisir et
dans la feuil1 le commandbutton1, j'ai adapté ta macro, mais elle s'arrête :
j'ai mis dans feuil2 :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$6" Then
Feuil1.CommandButton1.Visible = LCase([b6]) = "LYON" Or LCase([b6]) = "MARSEILLE" Or LCase([b6]) = "PARIS"
End If
End Sub

j'ai testé en remplaçant les LCase en UCase, ça à l'air de fonctionner ?

Pourrait on ajouter une condition ?
si la ville ne fait pas partie de la liste alors on écrit la valeur B dans la cellule AE108 de la feuil1

merci

belle journée
Re..
???
on écrit la valeur B dans la cellule AE108 de la feuil1
Mettre le classeur en PJ avec en dur la valeur souhaitée
 
Dernière édition:

pat66

XLDnaute Impliqué
Bonsoir Le fil
Bonsoir Jacky67

J'ai un petit problème concernant la réinitialisation du bouton, je suis obligé de cliquer sur une cellule de la feuil1 pour qu'il disparaisse, saurais tu a quoi cela est dû ? sachant que je souhaite rester sur la Feuil2 car la saisie n'est pas terminée

merci d'avance

Pat66
 

Pièces jointes

  • Classeur2-Villes.xlsm
    24.2 KB · Affichages: 9
Dernière édition:

Phil69970

XLDnaute Barbatruc
Pat66, Jacky67, le forum

Pour être cohérent avec le reste du code je pense qu'il faut mettre ceci:

Donc rajouter ==> Worksheets("Feuil1").CommandButton1.Visible = False
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Worksheets("Feuil1").CommandButton1.BackColor = &H8000000F
Worksheets("Feuil1").CommandButton1.Visible = False
[d12] = "B"
End Sub

Private Sub Workbook_Open()
If [d12] = "B" Then Worksheets("Feuil1").CommandButton1.Visible = False
End Sub

Edit :
Il y a un probleme avec le code car si tu fermes le fichier avec Lyon en feuil2  quand tu l'ouvres cela ne correspond pas à l'instruction

            If LCase([b6]) = "lyon" Or LCase([b6]) = "marseille" Or LCase([b6]) = "paris" Then
                .CommandButton1.Visible = True
                .[d12] = "A"

@Phil69970
 
Dernière édition:

pat66

XLDnaute Impliqué
Bonsoir Phil69970,
Oui c'est vrai et merci pour cette remarque, mais cela ne résout pas le problème de mon post #8
Exemple:
euil2 je selectionne Nantes, feuil1 D2 =B, mais le bouton reste affiché tant que je n'ai pas cliqué dans une cellule ?
 
Dernière édition:

Phil69970

XLDnaute Barbatruc
Re

Je reprends mon explication
D'un coté tu fermes le fichier avec par exemple Lyon (cel "B6") donc normalement tu demandes au code de faire
VB:
            If LCase([b6]) = "lyon" Or LCase([b6]) = "marseille" Or LCase([b6]) = "paris" Then
                .CommandButton1.Visible = True
                .[d12] = "A"

Et quand tu l'ouvres il n'y a pas de contrôle sur la feuil2 sur la cel "B6" donc quelque soit sa valeur il s'ouvre comme il s'est fermé
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Worksheets("Feuil1").CommandButton1.BackColor = &H8000000F
Worksheets("Feuil1").CommandButton1.Visible = False
[d12] = "B"
End Sub

Donc il y a discordance entre les 2 feuilles
Je sais pas si je suis bien clair....:oops:

Il faut revoir ce que tu veux faire dans une autre demande... et après voir ton autre pb

@Phil69970
 

pat66

XLDnaute Impliqué
Re,

je comprends alors ce classeur ne sera pas modifiable car je le fermerai avec ThisWorkbook.Saved = True afin que les modif ne puissent être enregistrées, donc je vais supprimer _BeforeClose(Cancel As Boolean) et _Open()

Donc je mon problème reste entier (voir post#8), comment faire lorsque je reviens sur la feuil1 pour que le bouton disparaisse lorsque j'ai sélectionné en feuil2 une ville qui inscrit B en feuil1 ?
car pour l'instant je suis obligé de selectionner une cellule de la feuil1 pour qu'il disparaisse
 
Dernière édition:

pat66

XLDnaute Impliqué
re

j'ai trouvé j'ai ajouter Range("E14").Activate dans
Private Sub Worksheet_Activate()
With Feuil2
If LCase(.[b6]) = "lyon" Or LCase(.[b6]) = "marseille" Or LCase(.[b6]) = "paris" Then
Feuil1.CommandButton1.Visible = True
Feuil1.[d12] = "A"
Else
Feuil1.CommandButton1.BackColor = &H8000000F
Feuil1.CommandButton1.Visible = False
Feuil1.[d12] = "B"
End If
End With
Range("E14").Activate
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
315 242
Messages
2 117 700
Membres
113 271
dernier inscrit
Enolran