Comment supprimer un bouton dans un userform en vba ou autre

fenec

XLDnaute Impliqué
Bonjour le forum,
Besoin de votre aide car je ne parviens pas à supprimer un commandbutton dans mon userform.
Je vais essayer d’être clair dans ma problématique.
Dans mon userform j’ai un bouton nommer "Créer Tournante" qui me copie mon fichier dans le but de ne pas modifier le fichier source.
Ce que je voudrais c’est que ce bouton ne soit pas copié lors de la copie vu que la tournante sera créée.
J’ai bien essayé de le rendre invisible ou de le déplacer mais ca ne marche pas car à l’ouverture du fichier copié il est toujours présent.
Suis à votre écoute pour résoudre mon problème.
Cordialement,
Philippe.
 

Pièces jointes

  • Pointage Congés forum.xls
    235.5 KB · Affichages: 148
  • Pointage Congés forum.xls
    235.5 KB · Affichages: 151

Roland_M

XLDnaute Barbatruc
Re : Comment supprimer un bouton dans un userform en vba ou autre

bonsoir,

placer cette ligne de code dans un module et l'userform fermé !
voir à mettre ton code actuel dans une macro qui devra être exécuté après fermeture de l'userf !

ThisWorkbook.VBProject.VBComponents("Menu").Designer.Controls.Remove "Créer_Tournante"

EDIT: fais attention car l'affichage ci-dessus met un espace inexistant à .Designer.
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Comment supprimer un bouton dans un userform en vba ou autre

Bonsoir fenec,

Pour que le fichier ci-joint fonctionne il faut avoir coché l'option :

- sur Excel 2003 et versions antérieures Faire confiance au projet Visual Basic (menu Outils-Macro-Sécurité-Editeurs approuvés).

- sur Excel 2007 et versions suivantes Accès approuvé au modèle d'objet du projet VBA (onglet Fichier-Options-Centre de gestion de la confidentialité-Paramètres...-Paramètres des macros).

Je vous laisse découvrir les macros.

Il n'est pas possible de supprimer le bouton mais on peut le masquer.

Et le masquage n'est possible qu'après fermeture de l'UserForm (noter la variable flag qui évite la fermeture du fichier).

Edit : bonsoir Roland_M, je ne t'avais pas vu.

Bonne fin de soirée.
 

Pièces jointes

  • Pointage Congés forum(1).xls
    260.5 KB · Affichages: 154
Dernière édition:

job75

XLDnaute Barbatruc
Re : Comment supprimer un bouton dans un userform en vba ou autre

Bonjour fenec, Roland_M, le forum,

Fichier (2) si l'on veut que le bouton n'apparaisse plus dans la feuille de l'UserForm :

Code:
Sub SupprimerBouton()
'ThisWorkbook.VBProject.VBComponents("Menu").Designer.Controls("Créer_Tournante").Visible = False
ThisWorkbook.VBProject.VBComponents("Menu").Designer.Controls("Créer_Tournante").Left = -100
Menu.Show
End Sub
J'ai aussi ajouté dans la macro du bouton :

Code:
Workbooks(NOM).Close False 'si le fichier est ouvert
Bonne journée.
 

Pièces jointes

  • Pointage Congés forum(2).xls
    260.5 KB · Affichages: 148

fenec

XLDnaute Impliqué
Re : Comment supprimer un bouton dans un userform en vba ou autre

Bonjour Roland_M, Job75, le forum,

Viens de tester vos solutions c’est tout à fait ce que je voulais.
La deuxième est intéressante mais pour aller encore plus loin en plus de ne plus faire apparaitre le bouton serait-il possible de supprimer les macros qui de ce fait ne servent plus.
Je sais que ce point n’était pas demander au départ mais votre deuxième solution m’y à fait penser.

Pour supprimer le module j’ai testé ceci :
Code:
Sub SupprimerBouton()
'ThisWorkbook.VBProject.VBComponents("Menu").Designer.Controls("Créer_Tournante").Visible = False
ThisWorkbook.VBProject.VBComponents("Menu").Designer.Controls("Créer_Tournante").Left = -100
Menu.Show
With ThisWorkbook.VBProject
     .VBComponents.Remove .VBComponents("module1")
 End With
End Sub

Mais pour la macro du bouton la je bloque.
Cordialement,
Philippe.
 

job75

XLDnaute Barbatruc
Re : Comment supprimer un bouton dans un userform en vba ou autre

Re,

Cette autre solution du fichier (3) a nettement ma préférence.

Elle consiste à ne pas mettre de bouton "Créer Tournante" dans l'USF mais à le créer par VBA.

Dans l'USF "Menu" il suffit de compléter avec ce code :

Code:
Dim bouton(0) As New Classe1
'---
Private Sub Userform_initialize()
'---
'---création du bouton---
If IsError([PasDeBouton]) Then
  Set bouton(0).bouton = Controls.Add("Forms.CommandButton.1")
  With bouton(0).bouton
    .Name = "Créer_Tournante"
    .Caption = "Créer Tournante"
    .Height = 24
    .Left = 222
    .Top = 6
    .Width = 70
    .BackColor = &H8000000F
  End With
End If
Et dans un nouveau module de classe "Classe 1" :

Code:
Public WithEvents bouton As MSForms.CommandButton

Private Sub bouton_Click() 'Copie le classeur
Dim NOM, lechemin As String
lechemin = ActiveWorkbook.Path & "\"
NOM = "Pointage Congés " & Sheets(1).[B5]
Application.DisplayAlerts = False
On Error Resume Next
Workbooks(NOM).Close False 'si le fichier est ouvert
Menu.Controls.Remove "Créer_Tournante"
ThisWorkbook.Names.Add "PasDeBouton", 1, Visible:=False 'nom défini masqué
ThisWorkbook.SaveAs lechemin & NOM & ".xls"
End Sub
A mon avis il est sans intérêt de supprimer les codes devenus inutiles dans le fichier créé.

Le nom défini "PasDeBouton" (masqué) empêche toute exécution.

A+
 

Pièces jointes

  • Pointage Congés forum(3).xls
    265.5 KB · Affichages: 138

job75

XLDnaute Barbatruc
Re : Comment supprimer un bouton dans un userform en vba ou autre

Re,

Maintenant si vous tenez à supprimer les lignes de codes voyez ce fichier (4).

Edit : j'ai mis le maximum de choses dans le module de classe, on ne touche pas à Module1.

A+
 

Pièces jointes

  • Pointage Congés forum(4).xls
    266 KB · Affichages: 138
Dernière édition:

job75

XLDnaute Barbatruc
Re : Comment supprimer un bouton dans un userform en vba ou autre

Re,

La suppression de la ligne 7 dans ThisWorkbook laisse entendre qu'on n'a plus besoin de l'USF Menu.

Il est donc supprimé avec ce fichier (4 bis).

A+
 

Pièces jointes

  • Pointage Congés forum(4 bis).xls
    264.5 KB · Affichages: 133

fenec

XLDnaute Impliqué
Re : Comment supprimer un bouton dans un userform en vba ou autre

Bonsoir Job75, le forum,

Comme vous la troisième solution à ma préférence car le visuel de l’application est nulle.
J’entends par la que l’on ne voit pas l’userform se fermer et revenir.
De plus j’ai appris quelque chose car je ne savais pas que l’on pouvait créer des boutons ainsi.
A propos est ce cela que l’on appelle : "un bouton dynamique "?

En ce qui concerne le fichier 4 il est dommage que le code ne rende pas le même visuel que le fichier 3.
Rentrant du travail, je verrais demain si j’arrive à modifier celui-ci en y intégrant les lignes de codes.

Pour ce qui est de la suppression de la ligne 7 c’est un essai que j’avais fait et que j’ai oublié d’enlever dans le fichier joint poste un, pardonnez moi cet oubli et le temps passé pour le fichier 4 bis, car l’userform " Menu "ne doit pas être supprimer.


Cordialement,
Philippe.
 

fenec

XLDnaute Impliqué
Re : Comment supprimer un bouton dans un userform en vba ou autre

Bonsoir le forum,
Je reviens vers vous et surtout vers Job75 pour l'aide qu'il m'a apporté en créant un bouton dans mon userform en vba (#post 6) car j'essaye en vain depuis une semaine à rajouter deux autres boutons de la même façon mais je n'y parviens pas.
Est ce tout simplement pas possible ou mon niveau plus que médiocre en vba est plus que réel.
Encore une question:
Avec ce genre de bouton faut il forcément passé par un module de classe
Cordialement,
Philippe.
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Comment supprimer un bouton dans un userform en vba ou autre

Bonjour fenec, le forum,

L'adaptation était pourtant simple, voyez le fichier joint créé à partir du fichier (3).

Concernant le module de classe "Classe1" il est indispensable.

Non pas pour créer les boutons mais pour leur affecter des macros.

Par exemple si l'on met dans l'USF "Menu" la macro Private Sub Créer_Tournante_Click() le clic sur le bouton créé ne la déclenchera pas.

Bonne journée.
 

Pièces jointes

  • Pointage Congés forum 3 boutons créés(1).xls
    267.5 KB · Affichages: 136

job75

XLDnaute Barbatruc
Re : Comment supprimer un bouton dans un userform en vba ou autre

Re,

Pour le fun - et uniquement pour le fun - voici une solution très bourrin pour se passer du module de classe.

Dans l'USF Menu :

Code:
Private Sub Userform_Initialize()
'---
'---création des 3 boutons---
'---
Application.OnTime 1, "AttenteClick"
'---
End Sub
Dans Module1 :

Code:
Sub AttenteClick()
Dim ac$, NOM$, lechemin$
Do
  DoEvents
  ac = Menu.ActiveControl.Name
  If ac = "Créer_Tournante" Then
    lechemin = ActiveWorkbook.Path & "\"
    NOM = "Pointage Congés " & Sheets(1).[B5]
    Application.DisplayAlerts = False
    On Error Resume Next
    Workbooks(NOM).Close False 'si le fichier est ouvert
    Menu.Controls.Remove "Créer_Tournante"
    Menu.Controls.Remove "Bonjour"
    Menu.Controls.Remove "Philippe"
    ThisWorkbook.Names.Add "PasDeBouton", 1, Visible:=False 'nom défini masqué
    ThisWorkbook.SaveAs lechemin & NOM
    Exit Sub
  ElseIf ac = "Bonjour" Or ac = "Philippe" Then
    MsgBox ac
    Menu.Accueil.SetFocus 'met le focus ailleurs
  End If
Loop
End Sub
Fichier joint.

Edit : après avoir cliqué sur le bouton "Historique", quand on cliquait sur "Annuler", le focus passait sur "Créer_Tournante"...

Pour l'éviter il a suffi d'ajouter Accueil.SetFocus à la fin de la macro du bouton "Annuler".

A+
 

Pièces jointes

  • Pointage Congés forum 3 boutons créés sans module de classe(1).xls
    264.5 KB · Affichages: 167
Dernière édition:

fenec

XLDnaute Impliqué
Re : Comment supprimer un bouton dans un userform en vba ou autre

Bonsoir le forum, Job75

Déjà dans un premier temps merci pour avoir répondu à ma demande.

Rentrant du travail, je regarde après un petit rafraichissement et vous tiens au courant dès que possible.

Cordialement,
Philippe
 

fenec

XLDnaute Impliqué
Re : Comment supprimer un bouton dans un userform en vba ou autre

Bonjour le forum, Job75

Suis parvenu à mettre en application dans mon fichier final c'est nickel.
La seule chose que je n'ai pas réussi à faire c'est d'intégrer un faceid dans l'un des boutons ainsi crées.

Pourriez vous m'éclairer sur ce point si pas trop abuser de votre temps.

Cordialement,
Philippe.
 

Statistiques des forums

Discussions
311 740
Messages
2 082 047
Membres
101 880
dernier inscrit
Anton_2024