Backstyle récalcitrant...! [Résolu]

Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018
- - Dernière réponse : CerberusPau
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018
- 26 févr. 2011 à 20:06
Bonsoir,

Qui pourrait me dire pourquoi ça marche pas...?
Private Sub Validation_Click()

Application.ScreenUpdating = True
Validation.BackStyle = fmBackStyleTransparent
If Validation.Caption "AVEC" Then Validation.Caption "SANS" Else: Validation.Caption = "AVEC"

End Sub


Quand je clique le bouton "Validation", mon texte change normalement, mais le bouton n'est plus transparent....
Bon, oui, je peux tricher en lui donnant la couleur de mon fond, mais ce qui se trouve derrière le bouton demeure invisible!

En revanche, si je demande une impression, ou que je ferme et rouvre le fichier, il est bien transparent.

Comprends pas...

Merci de votre aide.

Cordialement

Rataxes64
Afficher la suite 
A voir également:

20/21 réponses

Meilleure réponse
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
3
Merci
Evidemment, que c'est transparent à un click puis opaque au suivant, etc...
Ce que je t'ai montré est un exemple d'utilisation alternée

Autrement écrit, regarde donc cet exemple plus complet. Il est auto-explicite, non ?
Private Sub CommandButton1_Click()
  CommandButton1.Visible = False
  DoEvents
  CommandButton1.BackStyle = (CommandButton1.BackStyle + 1) Mod 2
  DoEvents
  CommandButton1.Visible = True
  DoEvents
  CommandButton1.Caption IIf(CommandButton1.BackStyle 0, "transparent", "opaque")
End Sub

A toi d'analyser, comprendre et utiliser à ta guise (je n'aime en général pas servir du tout cuit, préférant de très loin montrer un mécanisme et laisser cogiter. C'est la moindre des choses... et c'est vraiment très simple !!!)

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 137 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
46
0
Merci
Salut

essaie peut etre
Validation.BackStyle = fmBackStyleTransparent
Validation.invalidate 
Commenter la réponse de cs_ShayW
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018
0
Merci
Désolé ShayW...

Validation.invalidate


"erreur d'exécution 438"
"Propriété ou méthode non gérée par cet objet"

Merci quand même

Cordialement
Rataxes64
Commenter la réponse de CerberusPau
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
46
0
Merci
c'est du vba ?
Commenter la réponse de cs_ShayW
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018
0
Merci
Ben...Oui,
j'ai posté sur > Langages dérivés > VBA

Cordialement.
Rataxes64
Commenter la réponse de CerberusPau
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
46
0
Merci
Excuse pas fait attention

j'ai copié ton code il marche bien
quand je clique le bouton il devient transparent
et en plus si j'écris
Application.ScreenUpdating = false
ça marche aussi

écris sur un autre userform
ps j'ai l'office 2003
Commenter la réponse de cs_ShayW
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018
0
Merci
Arrrrrght,

Marche toujours pas, pourtant, moi aussi j'ai bien Office 2003.

J'ai pas créé un UserForm, le bouton a été créé directement dans la feuille.

Tu crois que c'est à cause de ça ?

Cordialement
Rataxes64
Commenter la réponse de CerberusPau
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
0
Merci
Bonjour

Tu ne peux modifier cette propriété alors que, au click, ton bouton est actif.

cet exemple, avec 2 boutons te montre par contre que depuis le deuxième, un click change la propriété du premier, puisque le 12er n'est pas actif.
Private Sub CommandButton2_Click()
  CommandButton1.BackStyle = (CommandButton1.BackStyle + 1) Mod 2
End Sub


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Commenter la réponse de ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
0
Merci
ou encore : utilise un subterfuge du genre

Private Sub CommandButton1_Click()
  CommandButton1.Visible = False
  DoEvents
  CommandButton1.BackStyle = (CommandButton1.BackStyle + 1) Mod 2
  DoEvents
  CommandButton1.Visible = True
  DoEvents
End Sub


qui réagit au click de ton seul bouton, mais ne traite son backstyle que pendant qu'il n'est pas visible (puis le re-rend visible)
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Commenter la réponse de ucfoutu
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018
0
Merci
Merci ucfoutu

ça le fait ... à moitié!

Si je ne double pas les lignes

Validation.BackStyle = (Validation.BackStyle + 1) Mod 2
DoEvents

Un click c'est transparent, mais au click suivant ça ne l'est plus...!



En revanche, si je les double, ç'est bon pour chaque click...

Private Sub Validation_Click()

If Validation.Caption "AVEC" Then Validation.Caption "SANS" Else: Validation.Caption = "AVEC"

Validation.Visible = False
DoEvents

Validation.BackStyle = (Validation.BackStyle + 1) Mod 2
DoEvents

Validation.BackStyle = (Validation.BackStyle + 1) Mod 2
DoEvents

Validation.Visible = True
DoEvents

End Sub


Mais pourquoi ?
Pourrais-tu m'expliquer un peu cette syntaxe ?

Cordialement
Rataxes64
Commenter la réponse de CerberusPau
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
0
Merci
Allez ... juste une petite mise sur rail (et je m'arrêterai là) n:
Si tu veux rendre transparent au premier click, mais que les clicks suoivants ne modifient plus rien de ta transparence :
Tu utilises une bête variable booléenne, déclarée Static. Tu la passes à True à la fin de ta procédure. En début de procédure, tu conditionnes le mécanisme de transparence à l'état à False de cette variable static ..
Je te laisse car c'est maintenant trop simple à mettre en oeuvre

Travaille bien.





____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Commenter la réponse de ucfoutu
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018
0
Merci
Merci de cette mise sur rails, sur lesquels je n'oublierai pas la goutte d'huile pour éviter que ça grince.

Dans ma question initiale, je voulais savoir pourquoi CommandButton1.BackStyle = 0 "directement" était "insuffisant", et tu m'as donné la réponse : pas quand le bouton est actif ... et puis tu m'as suggéré ton subterfuge (passer par visible avant et après)...

J'ai donc essayé d'insérer CommandButton1.BackStyle 0 comme tu l'avais fait pour CommandButton1.BackStyle (CommandButton1.BackStyle + 1) Mod 2, mais ça ne fonctionnait toujours pas (c'est ça que je ne comprends toujours pas d'ailleurs, mis bon).

"Visiblement", Visible=False et Visible=True ne suffisent donc pas...sans Mod

Quant à Mod, ben oui, j'avais oublié, et l'Aide m'a remis la pendule à l'heure :
Si au départ, à la création du bouton, BackStyle = 0(transparent), la valeur de (CommandButton1.BackStyle + 1)= 1 et avec 1 Mod 2 => reste = 1 , donc BackStyle = 1 (opaque).
Le click suivant on a (CommandButton1.BackStyle + 1)2 ; 2 Mod 2> reste = 0 donc BackStyle = 0 (transparent).

Ton idée de définir un Static peut être une solution, mais puisqu'on a inversé l'état initial (transparent à opaque), "il suffit" de l'inverser à nouveau pour que le bouton reste transparent au final (opaque à transparent)après un click.

C'est quand même étrange qu'un état BackStyle=0 lors de la création du bouton dans la feuille, renvoie un affichage opaque quand on clique dessus, et qu'on soit obligé de se prendre la tête comme ça, non ?

Cela m'aura toutefois permis de réviser Mod!

Merci pour tout

Cordialement
Rataxes64
Commenter la réponse de CerberusPau
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
0
Merci
je trouve que tu vas chercher midi à quatorze heures.

l'exemple avec utilisation du modulo permettait de basculer d'un état à l'autre.
Et toi tu veux ne basculer qu'une seule fois ? ===>> ben alors : force donc à 0 !
exemple :

Private Sub CommandButton1_Click()
    CommandButton1.Visible = False
    DoEvents
    CommandButton1.BackStyle = 0 ' au lieu de basculer par mod !
    DoEvents
    CommandButton1.Visible = True
    DoEvents
End Sub


Observation : il te faudra gérer de la même manière le double clic, à moins que tu ne veuilles rendre à nouveau opaque au double clic
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Commenter la réponse de ucfoutu
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018
0
Merci
Bonjour,

Eh bien justement, le problème que je rencontre c'est que ça me marche pas...

Je résume.
1) Je CREE un bouton dans ma feuille avec BackStyle = 0.

2) Curieusement, quand je clique dessus, il s'AFFICHE opaque...!

3) Je cherche donc alors à le FORCER transparent en utilisant "_Click", mais ça ne marche pas non plus... d'où mon post.

4) Tu m'en expliques la raison (bouton actif) et propose un subterfuge en passant par Visible False / True (+ Mod).

5) Je l'adapte avec le même code que tu proposes maintenant (sans Mod), mais ça ne marche toujours pas... Je ne comprends pas ce qui fait que même "créé", ou "forcé" transparent, le bouton s'affiche opaque quand je clique dessus.

6) J'essaie alors avec "mod" comme dans ton exemple, et là ça marche (en alterné).

7) je "double" les lignes "Mod", et là, enfin, mon bouton créé transparent le RESTE quand le clique dessus.

Mon problème est donc résolu (merci pour ton aide) , mais je ne vois vraiment pas ce qui le génère. J'aimerais pouvoir comprendre, car normalement cette Private Sub "_Click " devrait être inutile puisque le bouton a été créé avec son BackStyle = 0

Cordialement
Rataxes64
Commenter la réponse de CerberusPau
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
0
Merci
Lorsque tu cliques sur un bouton de commande, il change d'état (cliqué) et se redessine. C'est la particularité de ce contrôle. Se redessinant, il reprend tout à zéro, raison pour laquelle il faut lui rendre à nouveau sa transparence après coup.
Je ne comprends pas pourquoi mon dernier code ne marche pas de manière satisfaisante chez toi (il marche sans faille chez moi !); Peux-tu donc me montrer ici l'intégralité de ta sub commandbutton1_click ?



____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Commenter la réponse de ucfoutu
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018
0
Merci
Bonjour,

je t'ai plutôt joint un fichier ici
qui comporte le bouton et le code (Ce lien n'est valable que quelques jours).

Si tu commentes la ligne Exit Sub, ça marche, sinon, non...

Cordialement
Rataxes64
Commenter la réponse de CerberusPau
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
0
Merci
Je n'aime pas, de manière générale (raisons de sécurité) télécharger un fichier et ... l'ouvrir !!

De toutes manières, regarde ce que j'obtiens avec ton lien :
Erreur interne - Erreur 500

La page demandée a provoqué une erreur interne

Il s'agit d'une erreur liée soit à votre code, soit aux redirections (.htaccess) du site hébergé.

Je te serais reconnaissant de te contenter de mettre ici le seul code de ta procédure click.
Merci.

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Commenter la réponse de ucfoutu
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018
0
Merci
Bonjour,

Je te rassure, je n'ai jamais eu de problème avec c-joint.fr et je pensais que ce serait "plus clair" directement avec le fichier xls.
J'ai retesté l'adresse, qui marche :
http://www.cijoint.fr/cjlink.php?file=cj201102/cijitQFoSA.xls

Mais comme tu le préfères, voici mon code seul :
Private Sub Validation_Click()

Application.ScreenUpdating = False
ActiveSheet.Unprotect

'changement alterné du Caption
If Validation.Caption = "Avec Auto Contrôle" _
Then Validation.Caption = "Sans Auto Contrôle" _
Else: Validation.Caption = "Avec Auto Contrôle"

'si on s'en tient là : La transparence initiale est "perdue"...!
Exit Sub

Validation.Visible = False
DoEvents                '=> bouton caché

'4 lignes ci-dessous à décommenter pour passer par "Mod"
Validation.BackStyle = (Validation.BackStyle + 1) Mod 2
DoEvents                '=> BackStyle passe à 1 (opaque)

'2 lignes ci-dessous à commenter si on préfère alterner transparent/opaque
Validation.BackStyle = (Validation.BackStyle + 1) Mod 2
DoEvents                '=> BackStyle repasse à 0 (transparent)

Validation.Visible = True
DoEvents                '=> Bouton visible

ActiveSheet.Protect

End Sub


J'ai inséré un "Exit Sub" pour tester avec ou sans ton "subterfuge".

Cordialement
Rataxes64
Commenter la réponse de CerberusPau
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
0
Merci
voilà ton code modifié pour correspondre à ce que je t'avais dit.
Il fonctionne chez moi (j'ai vérifié) pour le clic et force la transparence à tous coups.
Attention toutefois au double-clic (qu'il te faudra gérer séparément)
Private Sub validation_Click()
  ActiveSheet.Unprotect
  If validation.Caption = "Avec Auto Contrôle" Then
    validation.Caption = "Sans Auto Contrôle"
  Else
    validation.Caption = "Avec Auto Contrôle"
  End If
    validation.Visible = False
  DoEvents
  validation.BackStyle = 0
  DoEvents
  validation.Visible = True
  DoEvents
  ActiveSheet.Protect
End Sub




____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Commenter la réponse de ucfoutu
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018
0
Merci
Bonjour,

Non, non, ça j'ai déjà essayé, et ça ne marche pas chez moi.

Mais j'ai quand même retesté.
Après redémarrage du PC,
Dans un classeur vierge :
Copie de ton code SEUL,
Création du bouton qui va bien...

Que dalle!!!

Je n'ai pas d'autre PC sous la main pour essayer, mais omme ça marche chez toi, c'est que je dois avoir un problème "quelque part" avec mon Excel 2003.


Alors, écoute, puisque je ne suis pas sans solution grâce à toi (avec Mod x 2), je ne veux pas abuser d'avantage, et propose d'en rester là.
Je te remercie infiniment de ta patience.

Cordialement
Rataxes64
Commenter la réponse de CerberusPau