[VBA] : Control de la presencia de un valor en un textbox
Resuelto
anton26
Mensajes publicados
33
Estado
Miembro
-
anton26 Mensajes publicados 33 Estado Miembro -
anton26 Mensajes publicados 33 Estado Miembro -
Bonjour,
He creado un userform dinámico con un número n de textbox dinámicos. Cuando hago clic en un botón de validar, los valores ingresados aparecen en una hoja de Excel. Me gustaría que apareciera un mensaje de error si uno o más textbox no tienen valor. ¿Cómo podría programar eso?
Gracias de antemano
Configuración: Windows XP / Firefox 13.0
He creado un userform dinámico con un número n de textbox dinámicos. Cuando hago clic en un botón de validar, los valores ingresados aparecen en una hoja de Excel. Me gustaría que apareciera un mensaje de error si uno o más textbox no tienen valor. ¿Cómo podría programar eso?
Gracias de antemano
Configuración: Windows XP / Firefox 13.0
10 respuestas
-
Hola,
'Ejemplo de prueba sobre controles creados dinámicamente
'en UserFormPrivate Sub CommandButton1_Click() Dim Cont As Control 'Bucle sobre UF For Each Cont In Me.Controls 'Prueba si el objeto TextBox está vacío If TypeOf Cont Is MSForms.TextBox And Cont.Object.Value = "" Then MsgBox "¡Atención! Falta Información" & Cont.Name End If Next Cont End Sub
-
Hola,
Gracias por este programa.
El problema es que no consigo adaptarlo a mi botón que se crea dinámicamente. -
Hola,
¡Tendrías que haberlo dicho desde el principio! Estoy buscando el código para interceptar un clic en un botón creado dinámicamente.
¡Hasta luego! -
Re,
Recupera el archivo y agárrate
https://www.commentcamarche.net/faq/31279-vba-ajouter-des-controles-dynamiquement-dans-un-userform
Buena suerte -
Hola,
Hola fxx :-)
Probablemente no necesita un código tan complicado, con
esta demo será más simple.
Usa tu función.
Utiliza la demo para agregar código al botón de manera dinámica.
Adapta Combo al nombre del botón, por supuesto.
¡Hasta luego!
Editar: Pero tal vez haya algo aún más simple, muestra el código usado para agregar
los controles dinámicos.
EDIT: No podía encontrar eso.
Si te golpeas contra una maceta y suena hueco, no necesariamente es la maceta la que está vacía. ;-)(Confucio)
NOTA: No respondo a mensajes privados para preguntas técnicas. -
```html 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)) 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``` -
Huumm, reconozco muchas partes de tu código... :-)
Pero veo que aún no lo has entendido del todo, es normal, no es fácil.
¿Solo tienes un botón? Si es así, no es necesaria la colección de objetos. (Módulo de clase)
Lo más simple... publica un ejemplo de tu libro de trabajo, veré cómo hacerlo funcionar.
Si te das un golpe en una olla y suena hueca, no es necesariamente la olla la que está vacía. ;-)(Confucio)
NOTA: No respondo a MP para preguntas técnicas. -
Sí, es muy probable que lo reconozcas, pero es cierto que soy principiante, así que no entiendo todo.
Para el botón, lo creé dinámicamente porque deseo que se coloque automáticamente al lado de la última caja de texto del formulario de usuario.
Adjunto mi archivo si deseas echarle un vistazo.
Gracias y buenas noches.
http://dl.free.fr/getfile.pl?file=/pb9pbCSv -
Re,
Un classeur avec tes TextBox
He guardado los datos en la Hoja1, ya que no hay hojas para cada alumno.
Haz lo que se indica en la hoja1.
El botón solo se valida cuando todos los textBox están completos.
He puesto un máximo de observaciones para que puedas entender la utilidad de las colecciones.
Tú dices..
¡Hasta luego!
Si te golpeas con una maceta y suena hueco, no necesariamente es la maceta la que está vacía. ;-)(Confucio)
NOTA: No respondo a mensajes privados para preguntas técnicas. -
Hola,
¡Muchas gracias, funciona a la perfección! Estoy empezando a entender cómo funcionan las colecciones gracias a tus comentarios. No había pensado en bloquear el botón de validar, ¡es una muy buena idea!
¡Gracias por el tiempo que le has dedicado!