Bonjour,
J'aimerais rendre invisible un contrôle de formulaire (barre de défilement) lorsqu'une cellule de la feuille a une certaine valeur.
Qui peut m'aider svpl ?
Bonjour,
J'aimerais rendre invisible un contrôle de formulaire (barre de défilement) lorsqu'une cellule de la feuille a une certaine valeur.
Qui peut m'aider svpl ?
Exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 If cells(1,2).Value='x' Then objCtrl.Visible = True Else objCtrl.Visible = False End If
Merci.
J'en fais une macro ? Qui se déclenche comment ?
Bonjour,
Par exemple (à adapter), dans le module de la feuille :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("C29")) Is Nothing Then If Range("C29")="x" Then Me.Shapes("Case à cocher 1").Visible = False Else Me.Shapes("Case à cocher 1").Visible = True End If End If End Sub
Cordialement,
Patrice
Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.
Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur
Merci pour la réponse.
J'ai remplacé Me.Shapes("Case à cocher 1") par ActiveSheet.Shapes.Range(Array("Scroll Bar 1")).
Est-ce juste ?
Et quel sera le déclencheur visible/invisible ?
Pas besoin d'un Array s'il n'y a qu'un contrôle !
Me représente la feuille concernée par la modification, elle n'est pas forcément active !
En VBA, il faut éviter d'utiliser les objets actifs, en particulier dans les procédures évènementielles !
Dans mon exemple, le déclencheur c'est la modification (mais pas de changement du résultat d'un calcul) de la cellule C29 de cette feuille.
Edit : chez moi, Excel vf c'est pas "Scroll Bar 1" mais "Barre de défilement 1"
Cordialement,
Patrice
Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.
Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur
Décidément, je ne suis pas très bon... ça ne fonctionne pas.
Sans abuser, je peux joindre le fichier pour voir où est l'erreur ?
C'est super sympa !
Voici donc la macro et le fichier joint :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("C29")) Is Nothing Then If IsEmpty(Range("C29")) Then Me.Shapes.Range("Scroll Bar 1").Visible = False Me.Shapes.Range("Scroll Bar 1").ControlFormat.Value = xlOff ' Décocher le chekbox Else Me.Shapes.Range("Scroll Bar 1").Visible = True End If End If End Sub
Sur mon poste, lorsque j'ouvre ton fichier, le contrôle incriminé ne s'appelle pas "scroll bar 1"...
Tu gagnerais à le renommer avec un nom "à toi" pour éviter toute équivoque. Travailler avec les noms attribués par Excel est rarement une bonne idée...
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Voilà :
controle1.xlsm
Cordialement,
Patrice
Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.
Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur
C'est parfait ... un grand merci !
Bonne soirée.
Bonjour,
Je ne réponds pas aux question techniques par MP.
Il suffit de continuer le post.
Le code (que je n'avais pas publié) teste la valeur contenue dans la cellule (If Range(adr).Value= ...), c'est-à-dire lorsqu'il y a une formule, c'est bien le résultat de la formule.Envoyé par Peat1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Private Sub Worksheet_Change(ByVal Target As Range) Dim adr As String adr = "C29" 'adresse de la cellule testée If Not Intersect(Target, Range(adr)) Is Nothing Then If Range(adr).Value = "ok" Then Me.Shapes("Barre de défilement 1").Visible = True Else Me.Shapes("Barre de défilement 1").Visible = False End If End If End Sub
Cordialement,
Patrice
Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.
Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur
Si je mets par ex. la formule =SI(D29=1;"ok";"faux") dans la cellule "C29" et que j'entre la valeur "2" dans la celle "D29", le résultat dans la cellule "C29" est faux mais le barre de défilement reste visible. Que faut-il corriger svpl ?
Bonjour,
Dans ce cas c'est le changement de D29 qui est détectable :
Il n'y a pas d'évènement pour détecter le changement du résultat d'une formule dans une cellule.
Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Private Sub Worksheet_Change(ByVal Target As Range) Dim adr As String adr = "D29" 'adresse de la cellule testée If Not Intersect(Target, Range(adr)) Is Nothing Then If Range(adr).Value = "1" Then Me.Shapes("Barre de défilement 1").Visible = True Else Me.Shapes("Barre de défilement 1").Visible = False End If End If End Sub
Une solution consiste à détecter la modification de la (ou des) cellule(s) antécédente(s) de la formule.
On pourrait aussi utiliser un autre évènement mais ce sera plus chronophage.
Cordialement,
Patrice
Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.
Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur
C'est périphérique à ton problème, soit complètement hors propos, et peut-être que ce tu as mis est correct, mais ça me semble bizarre de mettre faux entre guillemets dans la formule. Si tu testes par la suite sur la valeur booléenne, ça ne fonctionnera pas. Perso, j'aurais écrit =SI(D29=1;"ok";FAUX), ou encore =SI(D29=1;"OK")
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Oui, tout à fait d'accord. C'était juste pour mettre une valeur en guise d'essai.
Parfait, j'ai réussi à faire ce dont j'avais besoin en changeant le déclencheur.
J'aimerais encore savoir svpl s'il possible de définir les paramètres (par ex. la valeur max.) de cette barre de défilement lorsqu'elle est affichée et, si oui, comment ?
Bonjour,
La méthode que j'ai employée permet de façon générique et simple d'afficher / masquer une forme (shape) posée sur une feuille, quel que soit le type d'objet.
C'est pas la mieux adaptée pour définir les propriétés d'un objet précis, par exemple un contrôle de formulaire.
Il faut savoir que lorsque qu'on insère un objet (ex: un contrôle de formulaire), sur une feuille, Excel génère un problème de disparité des noms par défaut qu'il attribue aux propriétés Name de cet objet :
- la forme (Shape) reçoit un nom dans la langue locale (ex : Barre de défilement 1)
- alors que l'objet (ex : le contrôle) reçoit un nom en anglais (ex : ScrollBar 1)
Pour éviter ça, il faut harmoniser ces noms, pour cela donner manuellement un nom personnalisé à la forme, et par héritage l'objet reçoit le même nom (dans ce cas la barre de défilement)
Un exemple : controle2.xlsm
Les macro du module de feuille :
Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim adr As String adr = "D29" 'adresse de la cellule testée If Not Intersect(Target, Range(adr)) Is Nothing Then If Range(adr).Value = "1" Then Me.Shapes("Ma Barre de défilement").Visible = True ' on peut aussi écrire : ' Me.ScrollBars("Ma Barre de défilement").Visible = True Else Me.Shapes("Ma Barre de défilement").Visible = False ' on peut aussi écrire : ' Me.ScrollBars("Ma Barre de défilement").Visible = False End If End If End Sub Sub Parametres_de_ma_barre() Dim scb As ScrollBar Set scb = Me.ScrollBars("Ma barre de défilement") With scb .Visible = True .Top = 424 .Left = 243 .Height = 21 .Width = 150 .Value = 50 End With End Sub Sub Raz_de_ma_barre() Dim scb As ScrollBar Set scb = Me.ScrollBars("Ma barre de défilement") With scb .Visible = True .Top = 27 .Left = 60 .Height = 30 .Width = 174 .Min = 0 .Max = 100 .Value = 0 .SmallChange = 1 .LargeChange = 10 .LinkedCell = "" End With End Sub
Cordialement,
Patrice
Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.
Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager