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

Résolu/Fermé
anton26 Messages postés 31 Date d'inscription samedi 22 décembre 2012 Statut Membre Dernière intervention 25 janvier 2016 - 11 janv. 2013 à 15:21
anton26 Messages postés 31 Date d'inscription samedi 22 décembre 2012 Statut Membre Dernière intervention 25 janvier 2016 - 28 janv. 2013 à 14:37
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

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
11 janv. 2013 à 17:11
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
anton26 Messages postés 31 Date d'inscription samedi 22 décembre 2012 Statut Membre Dernière intervention 25 janvier 2016
14 janv. 2013 à 18:33
Bonjour,
Merci pour ce programme.
Le problème est que je n'arrive pas à l'adapter à mon bouton qui est créé dynamiquement.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
14 janv. 2013 à 18:37
Bonjour,
Il aurait fallu le dire au depart!! Je cherche le code pour intercepter un click bouton cree dynamiquement.

A+
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
14 janv. 2013 à 19:59
Re,

Recuperez le fichier et accrochez-vous

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

Bon courage
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 15/01/2013 à 13:56
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
15 janv. 2013 à 16:27
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
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 15/01/2013 à 18:31
Re,
Ont est déjà le 15... et je n'y pense plus beaucoup mais.. merci et bonne année à toi également.
0
anton26 Messages postés 31 Date d'inscription samedi 22 décembre 2012 Statut Membre Dernière intervention 25 janvier 2016
15 janv. 2013 à 21:00
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
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 15/01/2013 à 22:41
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
anton26 Messages postés 31 Date d'inscription samedi 22 décembre 2012 Statut Membre Dernière intervention 25 janvier 2016
27 janv. 2013 à 21:11
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
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 28/01/2013 à 02:13
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
anton26 Messages postés 31 Date d'inscription samedi 22 décembre 2012 Statut Membre Dernière intervention 25 janvier 2016
28 janv. 2013 à 14:37
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