Activer/désativer un bouton (ajout enregistrement)

Bonsoir à tous,

Je vais avoir besoin de l'aide des pros en vba si voulez bien sinon je vais "sécher" devant mon écran...

Bref dans un formulaire je veux inactiver le bouton "Enregistrement" tant que tout les champs ne sont pas remplis.

J'ai essayé la méthode (...qui a une bonne tête mais qui ne fonctionne pas):

Private Sub txtDate_click()
If txtDate <> "" And txtNom <> "" And TxtPrenom <> "" And cboMotif <> "" Then
BtnEnreg.Enabled = True
Else
BtnEnreg.Enabled = False
End If
End Sub

J'ai essayé aussi:

Sub BtnEnregDispo()
frmSaisie.BtnEnreg.Enabled = IIf(frmSaisie.txtDate <> "" And frmSasie.txtNom <> "", True, False)
End Sub

Rien y fait. Si quelqu'un peut m'aider ce serait sympa!

Merci d'avance à ceux qui voudront bien m'accorder un peu de temps.

Bonsoir,

ci-jointe une proposition

Bonsoir Thev,

Merci beaucoup pour ce code...qui me démoralise un peu. Je me rends compte que je ne suis pas capable de faire un tel code seul pour le moment...

Visiblement j'étais loin du compte.

Encore merci.

Bonjour,

Tu a été sans doute un peu dérouté par l'utilisation du code spécifique à un tableau structuré qui permet la simplification et facilite la maintenance ultérieure.

ci-joint, un petit tutoriel sur l'utilisation de ce code

Un tableau structuré Excel est en fait l’équivalent d’une table Access.

  • Il est borné car le nombre de ses lignes et colonnes est obligatoirement défini
  • Il est identifié par son nom et les entêtes de ses colonnes.

Utilisation de la classe ListObject

Ses principales propriétés sont les objets :

  • Range = ensemble du tableau
  • HeaderRowRange = ligne des entêtes de colonne
  • DataBodyRange = lignes des données du tableau
  • TotalsRowRange = ligne des totaux du tableau si elle a été définie
  • ListRows = lignes du tableau
  • ListColumns = colonnes du tableau

Assignation du tableau structuré à partir de son nom :

Dim TS As ListObject

Set TS = Range("nom_du_tableau").ListObject

Ou Set TS = [nom_du_tableau].ListObject

'feuille où se trouve le tableau

Dim feuille As Worksheet

Set feuille = TS.Range.Worksheet

Gestion des lignes du tableau :

Dim ligne As ListRow

Dim i As Integer, nb_lig As Integer, nb_col As Integer

'// nombre de lignes

nb_lig = TS.ListRows.Count

'// nombre de colonnes

nb_col = TS.ListColumns.Count

'// ajout d'une ligne et indice de la ligne ajoutée

Set ligne = TS.ListRows.Add: i = ligne.Index

'// suppression d'une ligne d'indice i

TS.ListRows(i).Delete

'// vidage intégral du tableau

TS.DataBodyRange.Delete

'// remplissage d'une ligne d'indice i

TS.ListColumns("nom colonne").DataBodyRange(i) = valeur

'// recherche exacte de l'indice d'une ligne du tableau à partir d'une valeur de recherche unique dans une colonne donnée

i = Application.Match(valeur_recherchée, TS.ListColumns("nom_colonne").DataBodyRange, 0)

Bonjour,

@ Thev : beau résumé des instructions VBA utilisables pour les tableaux structurés.

Pourquoi ne pas ajouter ces informations en créant un fil spécifique sur le forum Trucs et Astuces.
C'est juste une idée et suggestion bien entendu

Cordialement

Bonjour Dan,

Merci pour ce retour.

Je vais donc suivre ta suggestion.

Bonsoir Thev,

Merci pour ces éléments que je vais étudier avec soin.

Bonne soirée

Je suis désolé Thev...je suis le vrai boulet!

J'ai copié le code que tu m'as indiqué à la fin de mon code (inactivation du bouton "Enregistrer" tant que tous les champs ne sont pas remplis) dans mon fichier de travail.

Et patatra ça ne fonctionne pas alors que dans ton envoi cela fonctionne très bien.

Qu'est-ce qui ne va pas stp????

Bonsoir,

avez-vous un message d'erreur ? Avez-vous donné le même nom à votre tableau que celui du code de thev ?

@ bientôt

LouReeD

Qu'est-ce qui ne va pas stp????
Ce que dit Loureed. Renommer ton tableau structuré : BDD au lieu de Tableau5 qui n'est pas un nom significatif.

En fait je voulais juste mettre le code de Thev (par Copier-coller dans mon fichier d'origine Cf ma PJ précédente) pour l'inactivation du bouton "Enregistrer" (tant que tous les champs ne sont pas remplis) du UserForm à savoir:

Private Sub cboMotif_Change()
If Me.cboMotif = "" Then Exit Sub

If Me.txtDate <> "" And Me.txtNom <> "" And Me.TxtPrenom <> "" And Me.cboType <> "" Then BtnEnreg.Enabled = True

End Sub

Il n' y a pour le moment aucun lien à faire avec BDD à mon avis (qui sert pour la sauvegarde et l'enregistrement de la saisie faite dans le UserForm).

Car pour le moment le bouton "Enregistrer" reste activé tout le temps.

Il suffit bien logiquement de recopier le code pour que cela fonctionne non?

Bonsoir,

oui une copie du code, en effet, mais ce code active le bouton "enregistrer" mais à l'ouverture du USF il faut qu'il soit désactivé ! Il faut donc mettre sa propriété "Enable" à False "par défaut" dans la fenêtre des propriétés des contrôles en ayant sélectionner le bouton avant :

image

@ bientôt

LouReeD

Je vais mieux...merci beaucoup, je pouvais tourner un bon moment avant de trouver.

A bientôt

Mais vous auriez pu le désactiver par VBA dans la SUB d'initialisation du USF, ça marche aussi !

@ bientôt

LouReeD

Rechercher des sujets similaires à "activer desativer bouton ajout enregistrement"