[VBA] : Control de la presencia de un valor en un textbox

Resuelto
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

10 respuestas

  1. f894009 Mensajes publicados 17417 Fecha de registro   Estado Miembro Última intervención   1 717
     
    Hola,

    'Ejemplo de prueba sobre controles creados dinámicamente
    'en UserForm
    Private 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 
    0
  2. anton26 Mensajes publicados 33 Estado Miembro
     
    Hola,
    Gracias por este programa.
    El problema es que no consigo adaptarlo a mi botón que se crea dinámicamente.
    0
  3. f894009 Mensajes publicados 17417 Fecha de registro   Estado Miembro Última intervención   1 717
     
    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!
    0
  4. f894009 Mensajes publicados 17417 Fecha de registro   Estado Miembro Última intervención   1 717
     
    Re,

    Recupera el archivo y agárrate

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

    Buena suerte
    0
  5. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    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.
    0
    1. f894009 Mensajes publicados 17417 Fecha de registro   Estado Miembro Última intervención   1 717
       
      Hola y feliz año, ermitaño,

      ¡Solo tenía este enlace a mano! Pero, con un poco de reflexión, era factible.

      Adiós
      0
    2. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
       
      Re,
      Ya somos 15... y ya no lo pienso mucho, pero... gracias y feliz año también para ti.
      0
  6. anton26 Mensajes publicados 33 Estado Miembro
     
    ```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
    
    ```
    0
  7. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    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.
    0
  8. anton26 Mensajes publicados 33 Estado Miembro
     
    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
    0
  9. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    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.
    0
  10. anton26 Mensajes publicados 33 Estado Miembro
     
    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!
    0