Signaler

Declencher le code d'un bouton par un autre bouton [Résolu]

Posez votre question mod77 1222Messages postés vendredi 10 juillet 2009Date d'inscription 13 août 2017 Dernière intervention - Dernière réponse le 12 juin 2017 à 14:24 par Henri
Bonjour,

J'ai trouvé ceci
Application.Run "Feuil2.CommandButton2_Click"

pour faire ce que j'ai cité en titre, mais sans "Feuil2." car mon bouton est dans un formulaire. Mais cela ne fonctionne pas.
Un message d'erreur indique que la macro n'est pas dans le classeur ou que les macro sont désactivées.

J'ai écris simplement:
Application.Run "CommandButton2_Click"


Dois-je faire autre chse svp?



Afficher la suite 
Utile
+2
plus moins
bonsoir,
et pourquoi pas:
Call CommandButton2_Click()

si l'autre bouton est dans un autre formulaire qui s'appelle Feuil2 et si la fonction est publique, je suggère alors:
Call Form_Feuil2.CommandButton2_Click()

l'un ou l'autre n'est pas très propre, pourquoi ne pas déclarer une fonction qui serait appelée par les deux boutons?
Cette réponse vous a-t-elle aidé ?  
mod77 1222Messages postés vendredi 10 juillet 2009Date d'inscription 13 août 2017 Dernière intervention - 11 juin 2017 à 22:28
Bien vu Henri,
Bonne attention et analyse! Je me suis planté dès le départ.
J'ai déjà confondu (comme d'hab') les controles activX et les controles de formulaire.

Au départ, je comptais mettre la case du formulaire et lier à la cellule H3 puis j'ai changé d'avis et mis un activX.

Néanmoins, lorsque j'affiche, par clic droit, les colonnes H:K puis que je coche, les colonnes se cachent. Mais lorsque je décoche, elles ne se montrent pas.

J'ai essayé ton code, il ne fonctionne pas: "erreur de compilation référence incorrecte ou on qualifiée H3 "
Répondre
Henri- 11 juin 2017 à 23:58
 
Dans ta phrase qui commence par « Néanmoins », je ne comprends pas ce que
tu coches ou décoches ! Pour moi, pas besoin de cocher ou décocher : on doit
juste cliquer sur l'option du menu contextuel « Masquer » ou « Afficher » (après
avoir sélectionné les bons en-têtes de colonnes) ; voir l'exemple ci-dessous.

---------------------------------------------------

Sur une nouvelle feuille vierge, tu vois toutes les colonnes, dont H à K.

Sélectionne manuellement les colonnes H à K ; fais un clic droit sur l'en-tête
d'une de ces colonnes et choisis "Masquer" : ces colonnes sont cachées,
sans que tu aies besoin de cocher ou décocher quoi que ce soit.

En VBA : Columns("H:K").Hidden = True

---------------------------------------------------

Tes colonnes H à K sont actuellement masquées (cachées).

Sélectionne manuellement les colonnes G à L ; fais un clic droit sur l'en-tête
d'une de ces colonnes et choisis "Afficher" : ces colonnes sont montrées,
sans que tu aies besoin de cocher ou décocher quoi que ce soit.

En VBA : Columns("H:K").Hidden = False

Oui, ce n'est pas une erreur : en VBA, tu peux mettre directement "H:K" et pas
"G:L", car c'est seulement sur la feuille qu'il faut sélectionner les 2 colonnes
à gauche et à droite de la plage de colonnes masquées (et pour cause puisque
H à K étant cachées, tu ne peux pas les sélectionner !) ; par contre, même si
les colonnes H à K sont cachées, VBA sait où elles sont et peut en changer
leur état masqué ou non (.Hidden = True ou False).

================================

J'ai effectivement fait une erreur dans mon code VBA ; voici les 2 corrigés :

Pour la méthode avec Sub AfficheDetail :


Option Explicit

Sub AfficheDetail(onglet As String)
  ' Selon [H3], cache ou affiche les colonnes H,I,J,K
  With Worksheets(onglet)
    .Columns("H:K").Hidden = .[H3]
  End With
  [A3].Select
End Sub

Private Sub ckbDetail1_Click()  ' Cache / affiche le détail des lots
  AfficheDetail "Presence"
End Sub


Pour la méthode plus directe :


Option Explicit

Private Sub ckbDetail1_Click()
  ' Selon [H3], cache ou affiche le détail des lots
  With Worksheets("Presence")
    .Columns("H:K").Hidden = .[H3]
  End With
  [A3].Select
End Sub


Sans ton classeur, je ne sais pas trop sur quelle feuille est ta cellule A3 :
peut-être sur ta feuille "Presence", mais c'est pas sûr !

Si ta cellule [A3] est celle de la feuille "onglet" ou "Presence", alors
dans les 2 codes, supprimer la ligne [A3].Select, et après ... = .[H3]
ajouter sur la même ligne « : .[A3].Select » :

    .Columns("H:K").Hidden = .[H3]: .[A3].Select

Le 2ème code final serait donc celui-ci :


Option Explicit

Private Sub ckbDetail1_Click()
  ' Selon [H3], cache ou affiche le détail des lots
  With Worksheets("Presence")
    .Columns("H:K").Hidden = .[H3]: .[A3].Select
  End With
End Sub


================================

Pour mon code VBA de ton sujet « copier une ligne sans sa couleur de fond »,
j'avais fait une erreur de frappe que je viens de corriger : message de 23:47.

À te lire pour avoir ton avis.
 
Répondre
mod77 1222Messages postés vendredi 10 juillet 2009Date d'inscription 13 août 2017 Dernière intervention - 12 juin 2017 à 13:56
Bonjour Henri,

J'ai testé tous tes code mais rien ne fonctionne :-( erreur " variable inconnue H3" . Mais
c'est de ma faute car je n'ai pas fait changer la valeur de H3 à chaque fois que je coche la case à cocher.
J'ai repris le code de base voici:

Sub AfficheDétails(onglet As String) 'Affiche Détails
If Sheets(onglet).Range("H3") = "VRAI" Then 'Affiche les colonnes H,I,J,K
Sheets(onglet).Columns("H:K").Select
Selection.EntireColumn.Hidden = True
Sheets(onglet).Range("H3") = "FAUX"
Else 'Cache les colonnes H,I,J,K
Sheets(onglet).Columns("H:K").Select
Selection.EntireColumn.Hidden = False
Sheets(onglet).Range("H3") = "VRAI"
End If

ça fonctionne!

merci à vous 2
Répondre
Henri- 12 juin 2017 à 14:24
 
@mod77

Si tu as eu l'erreur "variable inconnue H3", c'est que tu as dû écrire H3
au lieu de [H3] ; il faut les crochets ; [H3] est juste la notation abrégée
de Range("H3") ; avantage : [H3] est plus court à écrire et à lire !  ;)

C'est grâce aux crochets que VBA comprend que [H3] est une cellule
et pas une constante ou variable ; exemples :


Const H2 As String * 4 = "VRAI"    ' constante H2 de 4 caractères
Dim H3 As String * 4: H3 = "VRAI"  ' variable H3 de 4 caractères
[H3] = "FAUX"                      ' cellule H3 de la feuille active


Si tu préfères écrire Range("H3") = "FAUX", c'est ok aussi.  ;)

Pour ton sujet "copier une ligne sans sa couleur de fond", tu as oublié
de lire mon dernier message du 11 juin à 23:47 : j'ai corrigé une faute
de frappe => mon code VBA marchera pour Excel et pour Calc.
 
Répondre
mod77 1222Messages postés vendredi 10 juillet 2009Date d'inscription 13 août 2017 Dernière intervention - 11 juin 2017 à 23:01
J'ai remis comme avant et là : erreur "argument non facultatif ", sans plus...
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonjour,

Pour répondre, il serait plus simple de disposer de ton fichier,
débarrassé des informations confidentielles s'il y lieu.

Déposes le fichier avec des commentaires explicatifs sur
https://mon-partage.fr/ ou sur http://cjoint.fr/
et mets le lien obtenu dans ton prochain message.

Tuto : Comment utiliser C.joint.fr
.
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !