[VBA] : Contrôle de la présence d'une valeur dans une textbox

Résolu
anton26 Messages postés 33 Statut Membre -  
anton26 Messages postés 33 Statut Membre -
Bonjour,

J'ai créé une userform dynamique avec un nombre n de textbox dynamiques. Quand je clique sur un bouton valider, les valeurs rentrées apparaissent sur une feuille Excel. Je souhaiterai qu'un message d'erreur apparaisse si une ou plusieurs textbox n'a (ont) pas de valeur(s). Comment pourrais-je programmer cela ?

Merci d'avance

10 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    'Exemple test sur contrôles crees en dynamique
    'dans UserForm
    Private Sub CommandButton1_Click()
      Dim Cont As Control
      'Boucle sur UF
      For Each Cont In Me.Controls
        'Test si Objet TextBox et vide
        If TypeOf Cont Is MSForms.TextBox And Cont.Object.Value = "" Then
          MsgBox "Attention! Manque Info" & Cont.Name
        End If
      Next Cont
    End Sub
    
    0
  2. anton26 Messages postés 33 Statut Membre
     
    Bonjour,
    Merci pour ce programme.
    Le problème est que je n'arrive pas à l'adapter à mon bouton qui est créé dynamiquement.
    0
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,
    Il aurait fallu le dire au depart!! Je cherche le code pour intercepter un click bouton cree dynamiquement.

    A+
    0
  4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    Recuperez le fichier et accrochez-vous

    https://www.commentcamarche.net/faq/31279-vba-ajouter-des-controles-dynamiquement-dans-un-userform

    Bon courage
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    Bonjour fxx :-)
    Il n'a probablement pas besoin d'un code aussi compliquer, avec
    cette démo se sera plus simple.
    Employer ta fonction.
    Se servir de la démo pour ajouter du code au bouton de façon dynamique.
    Adapter Combo au nom du bouton bien entendu.
    A+
    Edit : Mais il y a peut-être encore plus simple, montre le code employer pour ajouter
    les contrôles dynamique
    EDIT : Je le retrouvais plus celui-là

    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    NOTE : Je ne répond pas aux MP pour les questions techniques.
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour et bonne annee lermite,

      Je n'avais que ce lien sous la main! Mais, avec un peu de reflection c'etait jouable.

      Bye
      0
    2. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      Re,
      Ont est déjà le 15... et je n'y pense plus beaucoup mais.. merci et bonne année à toi également.
      0
  7. anton26 Messages postés 33 Statut Membre
     
    Voila le code qui permet de créer dynamiquement mes textbox ainsi que le code qui permet de placer les valeurs dans une feuille. Actuellement, avec le code que j'ai écrit, cela ne fonctionne pas. Je souhaiterais que le message d'erreur apparaisse si un ou plusieurs textbox n'a pas été complètée.

    For i = 1 To n
            Set Obj = Me.Controls.Add("forms.Textbox.1")    'Créé n textbox
                With Obj
             .Left = 90                 'Position des textbox à partir du bord gauche de l'userform
              .Top = 25 * i + 10          'Espacement entre chaque textbox
              .Width = 100                'Longueur de la textbox
              .Height = 18               'Hauteur de la textbox
             '.BackColor = &HC0FFFF      'Couleur du fond
              .BorderStyle = 0            'Style de bordure (0 ou 1)
              .FontName = "calibri"       'Police de l'écriture
              .FontBold = False           'Ecriture en gras
              .FontSize = 10              'Taille de la police
              .Enabled = True             'Possibilité d'écrire dans la case
                End With
    Next i
    
    Dim Bouton As MSForms.CommandButton             'Ajout d'un bouton valider
    Dim Cl As ClasBT
    
    Set Collect = New Collection
    Set CollectBT = New Collection
    
                Set Bouton = Me.Controls.Add("Forms.CommandButton.1", "Bt1", True)
                CollectBT.Add Bouton, "1"           'Ajouter à la collection d'objet
                Set Cl = New ClasBT                 'Ajouter à la collection de classe
                Set Cl.GroupBoutons = Bouton
                Collect.Add Cl
    
    Public Sub ControlClick(nom As String, num As Long)     'Controle du bouton valider
    
    Dim Ctrl As Control
    Dim CtrlName As String
    Dim CtrlIndex As Integer
    Dim ctrlText As String
    
       For Each Ctrl In Me.Controls
              CtrlName = Ctrl.Name
              If InStr(CtrlName, "TextBox") = 1 Then
                    'recuperation du numero du Textbox
                  CtrlIndex = Val(Mid(CtrlName, 8))
                   'MsgBox CtrlIndex
                  Worksheets("trimestre 1").Cells(CtrlIndex + 9, 1).Value = Ctrl.Text           'Positionnement des textbox dans une feuille (cells(ligne,colonne))
                  Worksheets("trimestre 2").Cells(CtrlIndex + 9, 1).Value = Ctrl.Text           'Positionnement des textbox dans une feuille (cells(ligne,colonne))
                  Worksheets("trimestre 3").Cells(CtrlIndex + 9, 1).Value = Ctrl.Text           'Positionnement des textbox dans une feuille (cells(ligne,colonne))
             Else
            
             End If
      Next
             
          For i = 1 To n
        If Worksheets("trimestre 1").Cells(i + 9, 1).Value = "" Then       'Controle des valeurs rentrées dans les textbox
         
        Reponse = MsgBox("Merci de compléter chaque case." & Chr(10) & Chr(10) & "Pour complèter votre liste cliquez sur OK." & Chr(10) & "Pour revenir a la page d'accueil cliquez sur Annuler.", vbExclamation + vbOKCancel, "Erreur")
            If Reponse = vbCancel Then   'Si on clique sur Cancel
                Unload UserForm1
                demarrage.Show
             Else
            
            End If
        
        End If
        Next i
     
    
    


    Voici mon module de classe (ClasBT) pour mon bouton valider :

    Option Explicit
    
    Public WithEvents GroupBoutons As MSForms.CommandButton
    
    Private Sub GroupBoutons_Click()       
        
        Call UserForm1.ControlClick(GroupBoutons.Caption, GroupBoutons.Tag)
       
    End Sub
    0
  8. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Huumm, je reconnais beaucoup de partie de ton code... :-)
    Mais je vois que tu n'a pas encore tout à fait compris, c'est normal, c'est pas facile.
    Tu n'a qu'un bouton ? Si oui, pas besoin de la collection d'objet. (Module de classe)
    Le plus simple... poste un exemple de ton classeur, je verrais pour le rendre op.

    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    NOTE : Je ne répond pas aux MP pour les questions techniques.
    0
  9. anton26 Messages postés 33 Statut Membre
     
    Oui c'est fort possible que tu le reconnaisse mais il est vrai que je suis débutant donc je ne comprends pas tout.
    Pour le bouton je l'ai créé dynamiquement car je souhaite qu'il se place automatiquement à coté de la dernière textbox du userform.
    Tu trouveras ci-joint mon fichier si tu souhaites y jeter un coup d'oeil.
    Merci et bonne soirée.
    http://dl.free.fr/getfile.pl?file=/pb9pbCSv
    0
  10. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Re,
    Un classeur avec tes TextBox
    J'ai sauvé les données sur la Feuil1, vu qu'il n'y a pas les feuilles pour chaque élève.
    Fais comme stipulé sur la feuil1.
    Le bouton ne se valide que quand tout les textBox sont rempli
    J'ai mis un max de remarques pour que tu puisse comprendre l'utilité des collections.
    Tu dis..
    A+
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    NOTE : Je ne répond pas aux MP pour les questions techniques.
    0
  11. anton26 Messages postés 33 Statut Membre
     
    Bonjour,
    Merci beaucoup, cela fonctionne a la perfection. Je commence a comprendre comment fonctionnent les collections grâce a tes commentaires. Je n'avais pas pensé à verrouiller le bouton valider c'est une très bonne idée !
    Merci pour le temps que tu y as consacré !
    0