[VBA] pb de programmation enregistrement

Résolu
grace -  
Polux31 Messages postés 7219 Statut Membre -
Bonjour,

j'ai deux petite question concernant mon programme. ce dernier me permet de remplirun base de données Excel. L'utilisateur rempli les différents champs (textbox et combobox) et quand il clique sur enregistrer, je veux que ces données soient mises à la suite des autres (déja existante).

Or avec le programme suivant, mes données sont mises à la ligne 14! or j'ai déja 1500 lignes de remplies, il faudrait donc que cela s'enregistre à la ligne 1501!

D'autre part, je souhaite rajouter une boucle qui me permette de vérifier si le numéro saisie en textbox1 n'est pas existant dans la colonne A de ma base de donnée. Si c'est le cas : mettre un message d'erreur, sinon enregistrer les données à la suite.

Le programmme est le suivant :
Private Sub Enregistrer_Click()
If TextBox1.Value = "" Then
MsgBox "Il faut entrer un numero d'étiquette"
ElseIf ComboBox1.Value = "" Then
MsgBox "Choisir un responsable secteur dans la liste"
ElseIf ComboBox2.Value = "" Then
MsgBox "Choisir un secteur dans la liste"
ElseIf ComboBox3.Value = "" Then
MsgBox "Choisir une ligne dans la liste"
ElseIf ComboBox4.Value = "" Then
MsgBox "Choisir un type d'étiquette dans la liste"
ElseIf ComboBox5.Value = "" Then
MsgBox "Déterminer la criticité de l'étiquette"
ElseIf TextBox4.Value = "" Then
MsgBox "Il faut entrez une date d'émission"
ElseIf Not IsDate(TextBox4.Value) Then
MsgBox "Entrer une date au format jj/mm/aaaa"
Else
'Enregistrement des valeurs entrées par l'utilisateur dans le registre'
Dim x As Integer
x = 4
While Range("A" & x).Value <> ""
x = x + 1
Wend
'enlever le mot de passe du classeur'
Worksheets("Registre").Unprotect Password:="tpm2008"
Sheets("Registre").Range("A" & x).Value = Me.TextBox1.Value
Sheets("Registre").Range("B" & x).Value = Me.ComboBox1.Value
Sheets("Registre").Range("C" & x).Value = Me.ComboBox2.Value
Sheets("Registre").Range("D" & x).Value = Me.ComboBox3.Value
Sheets("Registre").Range("E" & x).Value = Me.TextBox2.Value
Sheets("Registre").Range("F" & x).Value = Me.TextBox3.Value
Sheets("Registre").Range("K" & x).Value = Me.ComboBox4.Value
Sheets("Registre").Range("L" & x).Value = Me.ComboBox5.Value
Sheets("Registre").Range("G" & x).Value = Me.TextBox4.Value
Sheets("Registre").Range("I" & x).Value = Me.TextBox5.Value
Sheets("Registre").Range("J" & x).Value = Me.TextBox6.Value
'protection de la feuille "registre"'
Worksheets("Registre").Protect Password:="tpm2008"
'remise à 0 de tous les champs de l'application'
TextBox1.Value = ""
ComboBox1.Value = ""
ComboBox2.Value = ""
ComboBox3.Value = ""
TextBox2.Value = ""
TextBox3.Value = ""
ComboBox4.Value = ""
ComboBox5.Value = ""
TextBox4.Value = ""
TextBox5.Value = ""
TextBox6.Value = ""
End If
End Sub


Je vous remercie par avance
Configuration: Windows XP
Internet Explorer 6.0

5 réponses

  1. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    As-tu essayé ça :
    While Sheets("Registre").Cells(x, 1).Value <> "" 
        x = x + 1 
    Wend 
    


    Avec juste le code, on ne sait pas quelle feuille est active. Ou bien mettre Sheets("Registre").Activate juste avant de faire le While

    ;o)

    1
    1. grace
       
      merci, cette fois-ci tout fonctionne c'est génial!

      grace
      0
  2. grace
     
    petit rectification :
    si la saisie de la textbox1 est existante dans la colonne de ma base de données alors afficher un message d'erreur, sinon on peut l'enregistrer

    Désolé ! :-s
    0
  3. Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   310
     
    Grace,
    pour ton problème n°1, je suppose que la case A14 se retrouve vide par erreur. Sinon, il n'y a pas de raison que tes données soient saisies à cet endroit là.

    pour ton problème n°2, je te propose la modification suivante :
    (on cherche la valeur de textbox1 dans la colonne A, comme avec Ctrl+F. Si on en trouve une, alors on met un message d'erreur)
    Private Sub Enregistrer_Click()
    
    If TextBox1.Value = "" Then
        MsgBox "Il faut entrer un numero d'étiquette": Exit Sub
    Else
        Dim MyRange As Range
        Set MyRange = Sheets("Registre").Columns(1).Find(TextBox1.Value, , , xlWhole)
        If Not MyRange Is Nothing Then
            MsgBox "la valeur '" & TextBox1.Value &  _ 
            "' est déjà présente à la ligne " & MyRange.Row
            Exit Sub
        End If
    End If
    
    If ComboBox1.Value = "" Then
    'reprendre à partir de là ton enchaînement de tests

    I.
    0
    1. grace
       
      pour le pb n°2 je vais essayer. Merci

      Pour le pb n°1: c'est bien ca le pb c'est que la case 14 n'est pas vide!!!
      0
    2. grace
       
      quoi que je fasse mes données s'inscrivent dans la ligne 14 (que j'ai 1500 lignes de prises ou 4!)

      Mon programme est le suivant:

      Private Sub Enregistrer_Click()
      'message d'erreur si le numero d'étiquette existe déja
      If TextBox1.Value = "" Then
      MsgBox "Il faut entrer un numero d'étiquette": Exit Sub
      Else
      Dim MyRange As Range
      Set MyRange = Sheets("Registre").Columns(1).Find(TextBox1.Value, , , xlWhole)
      If Not MyRange Is Nothing Then
      MsgBox "la valeur '" & TextBox1.Value & _
      "' est déjà présente à la ligne " & MyRange.Row
      Exit Sub
      End If
      End If
      If ComboBox1.Value = "" Then
      MsgBox "Choisir un responsable secteur dans la liste"
      ElseIf ComboBox2.Value = "" Then
      MsgBox "Choisir un secteur dans la liste"
      ElseIf ComboBox3.Value = "" Then
      MsgBox "Choisir une ligne dans la liste"
      ElseIf ComboBox4.Value = "" Then
      MsgBox "Choisir un type d'étiquette dans la liste"
      ElseIf ComboBox5.Value = "" Then
      MsgBox "Déterminer la criticité de l'étiquette"
      ElseIf textbox4.Value = "" Then
      MsgBox "Il faut entrez une date d'émission"
      ElseIf Not IsDate(textbox4.Value) Then
      MsgBox "Entrez une date au format jj/mm/aaaa"
      Else
      <gras>'Enregistrement des valeurs entrées par l'utilisateur dans le registre'
      Dim x As Long
      x = 4
      While Cells(x, 1).Value <> ""
      x = x + 1
      Wend
      Sheets("Registre").Cells(x, 1).Value = Me.TextBox1.Value
      Sheets("Registre").Cells(x, 2).Value = Me.ComboBox1.Value
      Sheets("Registre").Cells(x, 3).Value = Me.ComboBox2.Value
      Sheets("Registre").Cells(x, 4).Value = Me.ComboBox3.Value
      Sheets("Registre").Cells(x, 5).Value = Me.TextBox2.Value
      Sheets("Registre").Cells(x, 6).Value = Me.TextBox3.Value
      Sheets("Registre").Cells(x, 11).Value = Me.ComboBox4.Value
      Sheets("Registre").Cells(x, 12).Value = Me.ComboBox5.Value
      Sheets("Registre").Cells(x, 7).Value = Me.textbox4.Value
      Sheets("Registre").Cells(x, 9).Value = Me.TextBox5.Value
      Sheets("Registre").Cells(x, 10).Value = Me.TextBox6.Value
      <gras>
      'remise à 0 de tous les champs de l'application'
      TextBox1.Value = ""
      ComboBox1.Value = ""
      ComboBox2.Value = ""
      ComboBox3.Value = ""
      TextBox2.Value = ""
      TextBox3.Value = ""
      ComboBox4.Value = ""
      ComboBox5.Value = ""
      textbox4.Value = ""
      TextBox5.Value = ""
      TextBox6.Value = ""
      End If
      End Sub


      Merci de m'aider c'est urgent et je ne comprend pas ou est mon erreur!

      cdt
      0
  4. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Voilà, j'ai fait remonter ton topic.

    ;o)
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Polux31 Messages postés 7219 Statut Membre 1 204
     
    De rien et bonne continuation.

    ;o)
    0