XL 2016 Afficher / masquer un bouton de Commande (ContrôleActiveX) en fonction de la valeur d'une cellule.

RomainB27

XLDnaute Nouveau
Bonjour,

J'ai créé un fichier qui permettra de générer un devis ou une facture en fonction de plusieurs éléments sélectionnés par l'utilisateur du fichier.

A la fin du fichier j'ai crée un bouton de commande (ContrôleActiveX) qui permet de générer le document en format PDF, de l'ouvrir et de l'enregistrer dans le même emplacement que le fichier.

Seulement j'aimerai que ce bouton s'affiche quand toutes les informations nécessaires à l'établissement du document soient renseignées.
J'ai rentré plusieurs formules (différentes cellules) aux différentes étapes de demande de renseignements et qui vont me donner dans la case finale C80 la valeur 1 si tout est renseigné et 0 s'il manque au moins un renseignement.

Soit C80=1 : le bouton s'affiche
Soit C80=0 : le bouton ne s'affiche pas

Je n'arrive pas à trouver une solution pour cela et je ne sais surtout pas où afficher cette VBA dans mon module : avant ou après la VBA créée…


Sub GENERERDEVISFACTURE()
'
' GENERERDEVISFACTURE Macro
'
'
Dim Chemin As String
Chemin = ActiveWorkbook.Path
Sheets("Devis-Facture").Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
Chemin & "\" & Range("A1").Value & " " & Range("A2").Value & " " & Range("A4").Value & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True _

MsgBox "Le devis/la facture a été généré(e) dans le même emplacement où se trouve votre fichier DEVIS-FACTURES, à vous de le classer !"

End Sub

Merci pour votre aide :)

Romain
 
Solution
Bonjour,

Avec un classeur exemple c'eût été mieux. Dans une feuille d' un nouveau classeur, mettez un bouton de commande ActiveX , faites un click-droit sur le nom de la feuille puis visualiser le code.
Collez-y ce code et vérifiez que vous avez bien un bouton 'CommandButton1' sur votre feuille.
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
'Commenter ou décommenter la ligne d'instruction désirée

'Pour rendre le bouton de commande invisible ou visible
Me.CommandButton1.Visible = Me.Range("A1") = 1

'Pour rendre le bouton inactif ou actif
'Me.CommandButton1.Enabled = Me.Range("A1") = 1

End Sub

Mettez 1 ou n'importe quelle valeur dans A1 et voyez

P.S. ma préférence va à la deuxième ligne d'instruction, car les boutons...

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Avec un classeur exemple c'eût été mieux. Dans une feuille d' un nouveau classeur, mettez un bouton de commande ActiveX , faites un click-droit sur le nom de la feuille puis visualiser le code.
Collez-y ce code et vérifiez que vous avez bien un bouton 'CommandButton1' sur votre feuille.
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
'Commenter ou décommenter la ligne d'instruction désirée

'Pour rendre le bouton de commande invisible ou visible
Me.CommandButton1.Visible = Me.Range("A1") = 1

'Pour rendre le bouton inactif ou actif
'Me.CommandButton1.Enabled = Me.Range("A1") = 1

End Sub

Mettez 1 ou n'importe quelle valeur dans A1 et voyez

P.S. ma préférence va à la deuxième ligne d'instruction, car les boutons qui apparaissent et disparraissent sont lassants pour l'utilisateur.

cordialement
 

fanch55

XLDnaute Barbatruc
Salut à tous,
Même préférence que @Roblochon :
il vaut mieux jouer sur l'enable que sur la visibilité, cela évite de supprimer le bouton par mégarde dans un grand élan de nettoyage de lignes ou colonnes

Le code d'impression peut être modifié ainsi pour laisser l'utilisateur sauvegarder où il veut .
VB:
Private Sub GENERERDEVISFACTURE_Click()
    Dim FileName As Variant

    FileName = Application.GetSaveAsFilename( _
         FileFilter:="Publication (*.pdf),*.pdf", _
         InitialFileName:=ThisWorkbook.Path & "\" & [A1] & " " & [A2] & " " & [A4] & ".pdf")
    If Not FileName = False Then
         ' Publication
         ActiveSheet.ExportAsFixedFormat _
             Type:=xlTypePDF, OpenAfterPublish:=True, _
             FileName:=FileName
    End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    [GENERERDEVISFACTURE].Enabled = [C80] = 1
End Sub

Copiez le code dans celui de votre feuille ( pas un module )
et nommez votre commandbutton "GENERERDEVISFACTURE" .
 

RomainB27

XLDnaute Nouveau
Bonsoir Roblochon !

Merci pour votre aide ! je ne savais pas que l'on pouvait entrer un code pour une feuille… mais en écrivant ses lignes je réfléchi que si, car dans le module de VBA nous les avons...

Un grand merci !

Vous saurez peut-être répondre à une autre question que je me pose (autre discussion) ;)

Bon vendredi soir !
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 105
dernier inscrit
Joffrette