Commande grisé bouton

Bonjour à tous

depuis mon inscription par ici ,mon niveau a grave augmenter ,mais bon on en apprend tout les jours ,bref !

je viens d e faire une fiche de renseignement sur Excel.

a la fin d la fiche j'y est ajouter un bouton afin d'enregistrer le document au format xlsx.

seulement je voudrais désactiver ce bouton si 2 cellules sont pas rempli

j'ai regarder par ici et ailleurs mais par trouver cela,juste : bouton grisé ou désactivé sur une userform .

moi c"est un bouton sur une fiche excel.

voila le code que' j'ai pu mettre pour le moment :

Private Sub CommandButton1_Click()

End Sub

Private Sub Enregistrer_Click()

 Dim chD$, Fich$, ChNomF
 Application.DisplayAlerts = False
    chD = "C:\Users\jbell\Desktop\"
    Fich = ActiveSheet.Range("C7") & ActiveSheet.Range("F7") & Format("_Fiche")
    ChDrive "C:\"

    ChNomF = Application.GetSaveAsFilename(Fich, "Excel files (*.xlsx),*.xlsx")
    If ChNomF <> False Then
        ThisWorkbook.SaveAs ChNomF, xlOpenXMLWorkbook

    End If
End Sub

Je ne vois pas ou et comment intégrer l'activation ou la désactivation de ce bouton ,si la cellule D14 et D16 sont non saisie.

merci bien

Bonjour VengeurMasqué,

Ci-dessous un mini fichier pour ton besoin.

Voir les lignes de code dans le code Classeur et le code feuille (Essai).

Pour l'exemple une boite de message s'ouvre lors d'un clic gauche sur le bouton en capacité d'agir

A adapter selon ton programme.

Bons tests, bonne continuation.

50classbouton.xlsm (21.11 Ko)

merci

jai trouvé cela aussi :

mais comment l'intégrer ,bref je regarde votre proposition

Private Sub Worksheet_Calculate()

If Range("E11").Value <> "u" Then

Me.CommandButton1.Enabled = False

Else

Me.CommandButton1.Enabled = True

End If

End Sub

A nouveau,

Calculate va s'employer lorsque des nombres, formules ont besoin d'être mises à jour.

Ici tu présentes une lettre...

Tout dépend de ce qui est présent dans tes cellules D14 et D16.

re,

dans ces cellule ca sera du texte ,dont une la D16 ,un email obligatoire a entrer .

j'ai essayer ma sa bug encore,je pense qu'on y est proche la :

Private Sub Enregistrer_Click()

Rep = MsgBox("Saisie obligatoire", vbInformation, "ATTENTION")

'Fait tout autre besoin (autre macro...etc...) puis Raz ensuite D14 et D16

If Rep = 1 Then Range("D1").Select: Range("D14") = "": Range("D16") = ""

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Plg As Range

Set Plg = Union(Range("D14"), Range("D16"))

If Not Intersect(Target, Plg) Is Nothing And (Range("D14") > "" And Range("D16") > "") Then

ActiveSheet.OLEObjects("Enregistrer_Click").Enabled = True

Else: ActiveSheet.OLEObjects("Enregistrer_Click").Enabled = False

End If

Dim chD$, Fich$, ChNomF

Application.DisplayAlerts = False

chD = "C:\Users\jbell\Desktop\"

Fich = ActiveSheet.Range("C7") & ActiveSheet.Range("F7") & Format("_Fiche")

ChDrive "C:\"

ChNomF = Application.GetSaveAsFilename(Fich, "Excel files (*.xlsx),*.xlsx")

If ChNomF <> False Then

ThisWorkbook.SaveAs ChNomF, xlOpenXMLWorkbook

End If

End Sub

Suite,

Si c'est juste pour enregistrer tu n'as pas besoin de la boite de message. C'était juste pour l'exemple.

Il suffit de mettre après Display Alerts=False

Range("D14") = "": Range("D16") = ""

Ceci afin de faire grisé à nouveau ton bouton.

en fait je n'y connait rien de rien au VBA ! je débute la dessus ,mais j’apprends petit a petit !

Suite,

Si c'est juste pour enregistrer tu n'as pas besoin de la boite de message. C'était juste pour l'exemple.

Il suffit de mettre après Display Alerts=False

Range("D14") = "": Range("D16") = ""

Ceci afin de faire grisé à nouveau ton bouton.

ok ok

et si je veut un message du style : " Merci de saisir tel cellule ou tel cellule avant d’enregistrer"

la c'est plus pareil je pense.

merci bien

Private Sub Enregistrer_Click()

Dim chD$, Fich$, ChNomF

Application.DisplayAlerts = False

Range("D14") = "": Range("D16") = ""

chD = "C:\Users\jbell\Desktop\"

Fich = ActiveSheet.Range("C7") & ActiveSheet.Range("F7") & Format("_Fiche de renseig")

ChDrive "C:\"

ChNomF = Application.GetSaveAsFilename(Fich, "Excel files (*.xlsx),*.xlsx")

If ChNomF <> False Then

ThisWorkbook.SaveAs ChNomF, xlOpenXMLWorkbook

End If

End Sub

désolé mais le bouton "enregistrer la fiche" ne se grise pas si D14 et D16 sont vide.

Il faut bien sur enregistrer puisque ta ligne de code D14 = "" et D16 = "" est présente dans ce programme.

Ôte moi un doute, tu as bien mis aussi le code de la feuille.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plg As Range
Set Plg = Union(Range("D14"), Range("D16"))
If Not Intersect(Target, Plg) Is Nothing And (Range("D14") > "" And Range("D16") > "") Then
ActiveSheet.OLEObjects("CmbSave").Enabled = True
Else: ActiveSheet.OLEObjects("CmbSave").Enabled = False
End If
End Sub

Il faut bien sur enregistrer puisque ta ligne de code D14 = "" et D16 = "" est présente dans ce programme.

Ôte moi un doute, tu as bien mis aussi le code de la feuille.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plg As Range
Set Plg = Union(Range("D14"), Range("D16"))
If Not Intersect(Target, Plg) Is Nothing And (Range("D14") > "" And Range("D16") > "") Then
ActiveSheet.OLEObjects("CmbSave").Enabled = True
Else: ActiveSheet.OLEObjects("CmbSave").Enabled = False
End If
End Sub

je voudrais que le bouton "enregistrer la fiche" que j'ai creer soir grisé si et seulement si les cellules D14 et D16 sont vide.

le bouton doit etre activé bien sur quan on remplir les 2 cellules.

pour le code sur ma feuille ,non pas de code la ! c'est nécessaire ?

oulalala ,je commence a ramer sévère la !!

Je te rappelle mon 1ier message.

Voir les lignes de code dans le code Classeur et le code feuille (Essai)

Ma feuille est nommée Essai. Mais dans le code feuille je passe par ActiveSheet. Donc pas de souci.

Par contre dans le code du classeur (Workbook.Open), il faudra renommer la feuille comme celle que tu utilises.

effectivement j'ai une erreur : en gras

Private Sub CommandButton1_Click()

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Plg As Range

Set Plg = Union(Range("D14"), Range("D16"))

If Not Intersect(Target, Plg) Is Nothing And (Range("D14") > "" And Range("D16") > "") Then

ActiveSheet.OLEObjects("CmbSave").Enabled = True

Else: ActiveSheet.OLEObjects("CmbSave").Enabled = False

End If

End Sub

Private Sub Enregistrer_Click()

Dim chD$, Fich$, ChNomF

Application.DisplayAlerts = False

Range("D14") = "": Range("D16") = ""

chD = "C:\Users\jbell\Desktop\"

Fich = ActiveSheet.Range("C7") & ActiveSheet.Range("F7") & Format("_Fiche de renseignements-Rentrée2020")

ChDrive "C:\"

ChNomF = Application.GetSaveAsFilename(Fich, "Excel files (*.xlsx),*.xlsx")

If ChNomF <> False Then

ThisWorkbook.SaveAs ChNomF, xlOpenXMLWorkbook

End If

End Sub

ma feuille ,active ,s'appelle :fiche 1

et Workbook.Open ? la je comprend pas

la ligne en gras ou il y a l'erreur ,j'ai modifié,mais toujours erreur.

Else: ActiveSheet.Enregistrer("Enregistrer la fiche").Enabled = False

A nouveau,

Ton bouton est bien sur une feuille pas sur un formulaire?

Ensuite c'est bien un bouton Activex et non un bouton simple ?

Va sur ta feuille ou est présent le bouton.

Puis sélectionne l'onglet Développeur du menu Excel et clique sur Mode Création. Enfin clic droit sur le bouton et choisir Propriétés.

Quel est le nom du bouton à griser (Name) tout en haut de la fenêtre ouverte. C'est ce nom là qu'il faut prendre pour cibler ce bouton.

Ensuite toujours sur ce menu Développeur, choisis Visual puis clic droit sur ThisWorkbook qui représente le classeur. Choisir Code afin d'ouvrir la fenêtre de code de ce classeur. Tu dois y placer les même ligne de code que dans le classeur que j'ai posté. A l'ouverture du classeur le bouton sera toujours grisé.

bonjour

désolé du retard de ma réponse.

bon c'est assez galère la !pas si simple que je pensais!

etant donné que je saisie pas les choses ,mais je vais persisté !

dans ce fichier Excel j'ai ,environs 15 feuilles ,chacune renommer "Fiche 1" ,"Fiche 2" ,etc

dans les propriété de la Feuille exel 1 (Name) = Feuil1

en fait comme il y a 2 procédures dans cette feuille ,je ne comprend pas comment les imbriquer ensemble

car la procédure VBA sur enregistrer le fichier sous grace a ce bouton marche a merveille.

mais bloquer en gris ce bouton si 2 cellules de cette feuilles sont vide !!

j'ai beau ecrire les procédures ,toujours erreur il y a !

désolé de vous embeter a cela!

donc en fait sur la ligne :

Else: ActiveSheet.OLEObjects("CmbSave").Enabled = False

je remplace ActiveSheet par le nom de ma feuille active ,soit : Feuil1 ?

je l'ai fait mais toujours erreur ,a la ligne "End sub"

image02 image01

Bonjour,

Non puisque ActiveSheet est ta feuille active. Tu n'as pas besoin de la nommer.

C'est à dire la feuille (exemple: Fiche1) ou se trouve le bouton qui enregistre.

Le plus simple, reprends mon fichier posté et construis ta Fiche sur la feuille Essai en la renommant Fiche1. Ajoute ta macro enregistré que tu affecté au bouton présent.

Même une simple Fiche suffira.

Comment se nomme ton bouton?

Tu as lu mes messages d'hier pour obtenir le nom du bouton.

Tu as écris feuil1 et non ActiveSheet. Regarde la ligne au dessus.

Rechercher des sujets similaires à "commande grise bouton"