Code VBA activation conditionnelle

Bonjour la famille. je suis débutant en VBA

j'ai lancé la création d'un formulaire (voir l'aperçu) servant à alimenter une base de données (Tableau Excel)

cn

Pour ce faire, je veux créer la condition d'activation du bouton Ajouter si et seulement si tous les champs du formulaire sont remplis.

je parviens à le faire avec la condition sur une seule textebox ou combobox.

exemple : je parviens à activer ce bouton si du texte est rempli par exemple à la zone de texte "Sanction Encourue" que j'ai nommée "txtSanction"

Private Sub txtSanction_Change()
    If txtSanction <> "" Then
        btnAjout.Enabled = True

    Else
        btnAjout.Enabled = False

    End If
End Sub

mais moi je ne veux activer ce bouton qu'après que l'utilisateur ait rempli tous les champs ! A l'aide svpl

Bonjour Romaric1406

Sujet maintes fois évoqué ici et ailleurs, il faut faire une boucle sur les contrôles

For Each Ctl in Me.Controls

Next Ctl

J'espère que cela pourra vous aider

J'avoue quand même être un débutant, du coup je n'arrive pas à débuter

Re,

Et bien commencez par joindre un fichier anonymisé nous verrons ensuite...

A+

23exercice.xlsm (33.26 Ko)

Bonjour Romaric1406

En partant du principe que le dernier champ rempli est celui de la durée

Voilà ce qu'il faut mettre dedans

Private Sub txtDuree_AfterUpdate()
  Dim Ctl As Control, FlgOk As Boolean
  ' Initialiser le flag
  FlgOk = True
  ' Parcourir chaque contrôles
  For Each Ctl In Me.Controls
    ' Si c'est un TextBox ou un ComboBox
    If TypeOf Ctl Is msforms.TextBox Or _
      TypeOf Ctl Is msforms.ComboBox Then
      ' vérifier si vide, si oui = NOK
      If Ctl.Value = "" Then FlgOk = False: Exit For
    End If
  Next Ctl
  ' Sortie de la boucle on vérifie le flag
  If FlgOk = True Then Me.btnAjout.Enabled = True
End Sub

A+

Merci infiniment à vous. Je vous aurais offert une bouteille de champagne

Re

Je vous envoie mon adresse postale en MP

bonsoir ma famille Excel

J'ai une préoccupation toujours sur mon formulaire

pour ajouter une donnée, je veux demander à mon code (pour le bouton Ajouter) d'aller se placer sur la première cellule de la ligne d'en-tête (cell A3 de mon exemple)

Ensuite de descendre sur la dernière ligne non vide et de décaler d'une ligne en dessous pour entrer de nouvelles données sur une ligne vierge.

Cependant, je suis embêté car lorsque le tableau est vierge, comme par exemple sur le fichier, pour entrer ma première ligne de donnée, au lieu d'enrégistrer sur A4, il s'en va plutôt débuter sur A5, laissant la première ligne (A4:G4) du tableau vide.

voici mon code

Private Sub btnAjout_Click()
        Sheets("BD").Activate
        Range("A3").Select
        Selection.End(xlDown).Select
        Selection.Offset(1, 0).Select
        ActiveCell = CDate(txtDate)
        ActiveCell.Offset(0, 1).Value = txtNom
        ActiveCell.Offset(0, 2).Value = cboClasse
        ActiveCell.Offset(0, 3).Value = cboMotif
        ActiveCell.Offset(0, 4).Value = txtSanction
        ActiveCell.Offset(0, 5).Value = txtDuree

        MsgBox "Données bien enregistrées au tableau", vbOKOnly + vbInformation, "CONFIRMATION"

End Sub

A l'aide mes grands !

Bonjour Romaric1406,

Vous auriez dû ouvrir un autre post en citant celui là éventuiellement.

Sinon, il va vraiment falloir apprendre la programmation objet Virez moi tous ces "Activate", "Select"

Ensuite vous utilisez des tableaux structurés, c'est top... mais servez-vous en !

Pour ajouter des données dans la première ligne vierge d'un TS, voici un exemple à adapter

' Comme il s'agit d'un tableau structuré
Dim LstBdD As ListObject

Private Sub Cbn_Ajout_Click()
  Dim CelF As Range, Ind As Integer, Lig As Long
  If Me.Cbx_NomPrénom.Value = "" Then
    Me.Cbx_NomPrénom.SetFocus
    MsgBox "Veuillez renseigner le champs   'Nom/Prénom' "
    Exit Sub
  End If
  ' Demande
  If MsgBox("confirmez-vous l'ajout des données?", vbYesNo, "confirmation") = vbNo Then Exit Sub
  ' Si ok on ajoute
  With LstBdD
    ' Trouver la prochaine ligne vide du tableau
    Set CelF = .ListColumns(1).Range.Find("")
    ' Si aucune on ajoute une nouvelle ligne
    If CelF Is Nothing Or .ListRows.Count = 0 Then
      .ListRows.Add: Lig = .ListRows.Count
    Else
      Lig = CelF.Row - .HeaderRowRange.Row
    End If
    ' Inscrire les Droits CP en premier, avant recalcul
    .DataBodyRange(Lig, 1) = Me.Cbx_NomPrénom.Value
    ' Pour chaque Checkbox de la 1 à la 4
    For Ind = 1 To 4
      If Me.Controls("CheckBox" & Ind).Value = True Then
        ' On peut inscrire un X ou autre chose
        .DataBodyRange(Lig, 1+Ind) = "X"
      End If
    Next Ind
  End With
  ' Réinitialiser le formulaire
  Call UserForm_Initialize
End Sub

Private Sub UserForm_Initialize()
  Dim Ind As Integer
  ' Assignation de la base
  Set LstBdD = ThisWorkbook.Sheets("Feuil2").ListObjects("TabBdD")
  ' Initialiser le formulaire
  Me.Cbx_NomPrénom.ListIndex = -1
  For Ind = 1 To 4
     Me.Controls("CheckBox" & Ind).Value = False
   Next Ind
End Sub

A+

merci beaucoup

et désolé car je suis encore un pure débutant dans le VBA. je cherche encore à transcender mon niveau d'utilisation d'Excel

Rechercher des sujets similaires à "code vba activation conditionnelle"