IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Saisie dans TextBox autorisée si cellule vide


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Bonjour à tous,

    Je réalise actuellement un formulaire de saisie dans Vba.

    Dans une Combo (CmbNum) je recherche un numéro. La liste des numéros provient de la colonne A de la feuille "Général".

    Après avoir choisi un numéro, les données qu'il y a sur la même ligne sont affichées dans diverses ListBox (par exemple : LstNom reçoit le nom du candidat correspondant au n° affiché).

    Ensuite, il y a 3 TextBox (TNot1, Tnot2, Tnot3). Celles-ci reçoivent également des données se trouvant sur la même ligne. Tnot1 = Col I, Tnot2 = Col J et TNot3 = Col L.
    Dans mon formulaire, si TNot1 est vide alors la saisie est autorisée sinon on passe à Tnot3 et ainsi de suite. Si les 3 TextBox sont déjà saisies alors aucune saisie ne sera possible.

    Dernièrement, l'utilisateur clique sur le bouton valider (Cb1) si il y a eu quelque chose de saisie alors les modifications entrent dans le tableau de la feuille de calcul "Général", sinon rien ne se passe.

    J'ai commençé ceci mais je n'arrive pas à faire le reste. Le code charge la Combo ainsi que les différentes ListBox.
    Pouvez-vous m'aider s'il vous plait ?
    Merci par avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    Private Sub CmbNum_Change()
    Dim Cell As Range
    Dim A1(0 To 500, 0 To 1) As String
    Dim A2(0 To 500, 0 To 1) As String
    Dim A3(0 To 500, 0 To 1) As String
    Dim A4(0 To 500, 0 To 1) As String
    Dim A5(0 To 500, 0 To 1) As String
    Dim A6(0 To 500, 0 To 1) As String
    Dim A7(0 To 500, 0 To 1) As String
     
    Dim i As Byte
    Dim L As Byte
        If UForm.CmbNum.Value <> "" Then
        L = Len(CmbNum)
            For Each Cell In Sheets("Général").Range("A4:A500")
                If UCase(Left(Cell.Text, L)) = UCase(CmbNum.Text) Then
                    A1(i, 0) = Cell.Offset(0, 1).Text
                    A2(i, 0) = Cell.Offset(0, 2).Text
                    A3(i, 0) = Cell.Offset(0, 3).Text
                    A4(i, 0) = Cell.Offset(0, 4).Text
                    A5(i, 0) = Cell.Offset(0, 5).Text
                    A6(i, 0) = Cell.Offset(0, 6).Text
                    A7(i, 0) = Cell.Offset(0, 7).Text
                i = i + 1
                End If
            Next
            UForm.LstNom.List = A1()
            UForm.LstPnom.List = A2()
            UForm.LstAdr.List = A3()
            UForm.LstCp.List = A4()
            UForm.LstVille.List = A5()
            UForm.LstCat.List = A6()
            UForm.LstCat2.List = A7()
        End If
    End Sub
    PS : J'ai modifié mon post car je m'étais trompé de code.
    Désolé pour le contre temps. Je vais mettre celui que je viens de faire

  2. #2
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    J'ai tout de même avancé. Mais j'ai encore quelques problèmes à règler.

    Le code de chargement de la Combo et des TextBoxs
    Mais les textBoxs ne se remplissent pas lorsque la Combo est chargée.

    Dans mon code, chaque TxtBox commence par "T"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Private Sub CmbNum_Change()
    Dim Nume As Variant
    Dim Num As Variant
    Dim z As Byte
        For z = 1 To 10: Controls("T" & (z)) = "": Next z
        Num = 1
            For Each Nume In Sheets("Général").Range("A4:A" & Range("A" & Rows.Count).End(xlUp).Row)
            If Nume = CmbNum.Value Then
            Controls("T" & Num).Value = Nume.Offset(0, 1)
            Controls("T" & Num + 1).Value = Nume.Offset(0, 2)
            Controls("T" & Num + 2).Value = Nume.Offset(0, 3)
            Controls("T" & Num + 3).Value = Nume.Offset(0, 4)
            Controls("T" & Num + 4).Value = Nume.Offset(0, 5)
            Controls("T" & Num + 5).Value = Nume.Offset(0, 6)
            Controls("T" & Num + 6).Value = Nume.Offset(0, 7)
            Controls("T" & Num + 7).Value = Nume.Offset(0, 11)
            Controls("T" & Num + 8).Value = Nume.Offset(0, 8)
            Controls("T" & Num + 9).Value = Nume.Offset(0, 9)
            End If
            Next
    T8 = Format(T8, "0")
    T9 = Format(T9, "0.00")
    T10 = Format(T10, "0.00")
    End Sub
    Le code de validation. Dans ce code je rencontre un souci. En effet, ici j'ai écrit que si T8, T9 et T10 sont vides alors messages d'erreur.
    Pas contre, ce que je souhaite, c'est que si il y a eu une nouvelle saisie dans une des TxtBox T8, T9 ou T10 alors ne message ne doit pas apparaître. Là je coinçe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Private Sub Cb1_Click()
    Dim erreur(3) As Boolean, msg As String, i As Byte
    Dim Tablo As Variant
    'ver=0
    Tablo = Array("", "Note peau", "Note 1er tour", "Note 2ème tour")
    erreur(1) = Me.T8 = ""
    erreur(2) = Me.T9 = ""
    erreur(3) = Me.T10 = ""
    For i = 1 To 3
        If erreur(i) Then msg = msg & vbCrLf & "-" & " " & Tablo(i)
        Next
        If msg <> "" Then
        MsgBox "Vous n'avez saisi aucune note ?" & msg, 0, "A vérifier"
        Exit Sub
    End If
    Sheets("Général").Activate
    If Range("I4") = "" Then
        Range("I4").Select
    Else
        Range("I3").End(xlDown).Select
        ActiveCell.Offset(1, 0).Range("I1").Select
    End If
    ActiveCell.Value = Me.T9.Value
    ActiveCell.Offset(0, 1).Value = (Me.T10)
    ActiveCell.Offset(0, 3).Value = (Me.T8)
     
    CmbNum.Value = ""
    T1 = ""
    T2 = ""
    T3 = ""
    T4 = ""
    T5 = ""
    T6 = ""
    T7 = ""
    T8 = ""
    T9 = ""
    T10 = ""
    End Sub
    Le code dans chacune des TextBoxs. Il interdit toute saisie si ce n'est pas vide.
    Là aussi j'ai un soucis. Dans T8 un seul nombre entier suffit. Mais dans T9 et T10 je dois saisir un nombre décimal et bein entendu lorsque je saisi un seul chiffre alors la saisie décimale n'est plus possible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub T10_Change()
    If T10.Value = "" Then
    T10.Enabled = True
    Else
    T10.Enabled = False
    End If
    End Sub
    Pouvez-vous m'apporter votre éclairage s'il vous plait ?
    Merci par avance

    Mon premier code rattaché à CmbNum ne fonctionne pas.
    La Combo est bien chargée, mais les données ne s'affichent pas dans les TextBox.

    Quelle erreur ai-je commis ?

    Merci par avance

  3. #3
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Bonjour à tous,

    Mon code ne fonctionnant toujours pas alors je l'ai modifié comme ceci :

    Dans UserForm_Activate

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub UserForm_Activate()
    ActiveSheet.Range("A4").Select 'tu sélectionnes la 1ère valeur à inscrire dans ta combobox
    Do While ActiveCell <> "" 'tant que la cellule est non vide
    CbNum.AddItem ActiveCell 'tu ajoutes la valeur contenue dans la cellule à ta liste déroulante
    ActiveCell.Offset(1, 0).Select ' tu sélectionnes la cellule suivante dans la colonne A
    Loop 'et hop on recommence.
    End Sub
    Dans CbNum_Change

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Private Sub CbNum_Change()
    valeur = CbNum 'expliqué plus haut
    lig = Columns(1).Find(valeur, Range("A65536")).Row 'expliqué plus haut
    T1.Value = Range("B" & lig).Value 'la valeur du textbox = valeur de la cellule B & ligne
    T2.Value = Range("C" & lig).Value 'la valeur du textbox = valeur de la cellule C & ligne
    T3.Value = Range("D" & lig).Value 'la valeur du textbox = valeur de la cellule D & ligne
    T4.Value = Range("E" & lig).Value 'la valeur du textbox = valeur de la cellule E & ligne
    T5.Value = Range("F" & lig).Value 'la valeur du textbox = valeur de la cellule F & ligne
    T6.Value = Range("G" & lig).Value 'la valeur du textbox = valeur de la cellule G & ligne
    T7.Value = Range("H" & lig).Value 'la valeur du textbox = valeur de la cellule H & ligne
    T8.Value = Range("L" & lig).Value 'la valeur du textbox = valeur de la cellule L & ligne
    T9.Value = Range("I" & lig).Value 'la valeur du textbox = valeur de la cellule I & ligne
    T10.Value = Range("J" & lig).Value 'la valeur du textbox = valeur de la cellule J & ligne
     
    End Sub
    Et tout cela fonctionne plutôt bien.

    Par contre reste en suspend le sujet de mon post.
    Lorsque T8 ou T9 ou T10 qui contiennent des valeurs numériques sont déjà remplies, alors la saisie doit être interdite.

    Merci par avance

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut
    Bonjour

    tu peux utiliser la propriété Enable du textBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Private Sub CbNum_Change()
    valeur = CbNum 'expliqué plus haut
    lig = Columns(1).Find(valeur, Range("A65536")).Row 'expliqué plus haut
    T1.Value = Range("B" & lig).Value 'la valeur du textbox = valeur de la cellule B & ligne
    T2.Value = Range("C" & lig).Value 'la valeur du textbox = valeur de la cellule C & ligne
    T3.Value = Range("D" & lig).Value 'la valeur du textbox = valeur de la cellule D & ligne
    T4.Value = Range("E" & lig).Value 'la valeur du textbox = valeur de la cellule E & ligne
    T5.Value = Range("F" & lig).Value 'la valeur du textbox = valeur de la cellule F & ligne
    T6.Value = Range("G" & lig).Value 'la valeur du textbox = valeur de la cellule G & ligne
    T7.Value = Range("H" & lig).Value 'la valeur du textbox = valeur de la cellule H & ligne
    T8.Value = Range("L" & lig).Value 'la valeur du textbox = valeur de la cellule L & ligne
    T8.Enabled = IIf(Range("L" & lig) <> "", False, True)
    T9.Value = Range("I" & lig).Value 'la valeur du textbox = valeur de la cellule I & ligne
    T9.Enabled = IIf(Range("I" & lig) <> "", False, True)
    T10.Value = Range("J" & lig).Value 'la valeur du textbox = valeur de la cellule J & ligne
    T10.Enabled = IIf(Range("J" & lig) <> "", False, True)
    End Sub

  5. #5
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    J'avais essayé Enabled mais pas comme toi, donc cela ne fonctionnait pas.

    Il ne me reste plus que ce boût de code à modifer afin qu'un message d'erreur s'affiche uniquement si une des 3 TextBoxs est vide. Mais je crois avoir une idée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Dim erreur(3) As Boolean, msg As String, i As Byte
    Dim Tablo As Variant
    'ver=0
    Tablo = Array("", "Note peau", "Note 1er tour", "Note 2ème tour")
    erreur(1) = Me.T8 = ""
    erreur(2) = Me.T9 = ""
    erreur(3) = Me.T10 = ""
    For i = 1 To 3
        If erreur(i) Then msg = msg & vbCrLf & "-" & " " & Tablo(i)
        Next
        If msg <> "" Then
        MsgBox "Vous n'avez saisi aucune note ?" & msg, 0, "A vérifier"
        Exit Sub
    End If
    J'ai fait ceci mais ça ne marche pas. J'ai un message d'erreur sur la ligne en rouge. "Incompatibilité de type"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Private Sub C1_Click()
    Dim erreur(3) As Boolean, msg As String, I As Byte
    Dim Tablo As Variant
    
    'ver=0
    Tablo = Array("", "Note peau", "Note 1er tour", "Note 2ème tour")
    erreur(1) = Me.T8 = ""
    erreur(2) = Me.T9 = ""
    erreur(3) = Me.T10 = ""
    For I = 1 To 3
        If erreur(I) Then msg = msg & vbCrLf & "-" & " " & Tablo(I)
        Next
        If msg <> "" Then
        MsgBox "Vous n'avez saisi aucune note ?" & msg, 0, "A vérifier"
        Exit Sub
    End If
    Dim lngRow As Long
    With Sheets("Général") 'la feuille "Général" est activée
      If .Range("I4") = "" Then 'la cellule I4 est prise comme point de départ
          lngRow = 4 ' si elle est vide, elle est sélectionnée
      Else
          lngRow = Application.Match(CbNum.Text, .Range("A1:A65536"), 0)
      End If
      .Cells(lngRow, 9).Value = Me.T9.Value 'La valeur de T9 doit aller dans la cellule I8
      .Cells(lngRow, 10).Value = (Me.T10) 'La valeur de T10 dans la cellule J8
      .Cells(lngRow, 12).Value = (Me.T8) 'La valeur de T8 dans la cellule L8
    End With
    
    'Après validation les données présentes sont effacées du formulaire
    'La Combo (CbNum) prend le focus
    CbNum.Value = ""
    T1 = ""
    T2 = ""
    T3 = ""
    T4 = ""
    T5 = ""
    T6 = ""
    T7 = ""
    T8 = ""
    T9 = ""
    T10 = ""
    CbNum.SetFocus
    End Sub
    Merci par avance

  6. #6
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Mon problème est résolu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          lngRow = Application.Match(CDbl(CbNum.Text), .Range("A1:A65536"), 0)
    Merci à tous pour votre aide
    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Autoriser saisie dans textbox!
    Par alicia26 dans le forum VBA Access
    Réponses: 14
    Dernier message: 06/06/2008, 13h56
  2. Definir Format de saisie dans TextBox
    Par papy75 dans le forum IHM
    Réponses: 3
    Dernier message: 10/04/2008, 08h57
  3. Pb lors de la saisie dans textbox
    Par max81 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 02/04/2008, 13h49
  4. [Compatbilité] Contrôle de saisie dans TextBox
    Par n00bi dans le forum ASP.NET
    Réponses: 2
    Dernier message: 03/03/2008, 14h43
  5. Remplacer un caractère après saisie dans TextBox
    Par melouille56 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/10/2007, 15h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo