Erreur dans UserForm / textbox

Résolu
Bonjour,

Avant d'expliquer mon problème je vous explique comme utiliser le fichier.

Colonne A : code barre (GENCODE)
Colonne B : références
Colonne C : quantité

Un "CommandButton" Inventaire

Premièrement, ce qu'il se passe :

1/ je clique sur inventaire
2/ je saisi un GENCODE (100005 pour l'exemple) dans la Textbox
3/ je clique sur modifier
4/ je vois la valeur "12" apparaître dans la Texbox "Quantité" (pas normal vu que la quantité en rapport avec le GENCODE "10005" est 121
5/ je modifie la quantité "12" par "7" par exemple
6/ je clique sur valider
7/ je vois bien "7" dans la colonne C

En résumé le code lit la colonne B et modifie C alors qu'il devrait lire C et modifier C

Deuxièmement

1/ je clique sur inventaire
2/ je NE saisi PAS de GENCODE et/ou QUANTITE
3/ je clique sur valider
7/ j'ai une erreur

Comment faire en sorte que je retourne dans la boucle à la place d'avoir cette erreur ?

Ce code est un code que j'ai trouvé sur un forum et que j'ai modifié.

Merci à tous pour votre aide.

Cordialement

Sébastien

Lien du fichier :
https://www.developpez.net/forums/attachments/p171735d1426418126/logiciels/microsoft-office/excel/macros-vba-excel/erreur-userform-textbox/stock.xls/

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour
    Ci-dessous La procédure

    Pour transmettre un fichier, il faut passer par un site de pièce jointe tel que cjoint.com

    Va sur ce site : http://cjoint.com
    Clic sur parcourir,
    Cherche ton fichier,
    clic sur ouvrir,
    Clic sur "Créer le lien cjoint",
    Copier le lien,
    Revenir ici le coller dans une réponse
    A+
    Maurice
    1. merci pour la procédure.

      Pour info voilà le code qui fonctionne :

      Private li As Integer 'déclare la variable li (LIgne)
      Private modif As Boolean 'déclare la variable modif
      Private ajout As Boolean 'déclare la variable ajout

      Private Sub TextBox2_Change()

      End Sub

      Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
      modif = False 'initialise la variable modif
      ajout = False 'initialise la variable ajout

      End Sub

      Private Sub TextBox1_AfterUpdate()
      Dim pl As Range 'déclare la variable pl (PLage)
      Dim x As Byte 'déclare la variable x (incrément)

      If Me.TextBox1.Value = "" Then Exit Sub 'sort de la procédure si la TextBox1 est vide

      'définit la plage pl (cellules éditées de la colonne A)
      Set pl = Range(Cells(2, 1), Cells(Application.Rows.Count, 1).End(xlUp))
      On Error Resume Next 'gestion des erreurs, en cas d'erreur passe à la ligne suivante
      li = pl.Find(Me.TextBox1.Value, , xlValues, xlWhole).Row 'définit la ligne li (si aucune occurrence trouvée, génère une erreur)
      If Err > 0 Then 'condition : si une erreur a été générée
      If ajout = True Then 'condition : si la variable ajout est "Vrai"
      Exit Sub 'sort de la procédure
      End If
      'sélectionne le texte de la TextBox1
      Me.TextBox1.SelStart = 0 'début de la sélection
      Me.TextBox1.SelLength = Len(Me.TextBox1.Value) 'longueur de la selection
      MsgBox "Gencode invalide"
      Exit Sub 'sort de la procédure
      End If 'fin de la condition
      '======================
      'ici
      TextBox2.Text = Cells(li, 3)
      '======================
      Me.TextBox2.SetFocus 'place le curseur dans la TextBox2 (Quantité)
      Me.TextBox2.SelStart = 0 'début de la sélection
      Me.TextBox2.SelLength = Len(Me.TextBox2.Value) 'longueur de la sélection
      End Sub

      Private Sub CommandButton1_Click() 'bouton "Valider"
      Dim x As Byte 'déclare la variable x

      If modif = True Or ajout = True Then
      For x = 1 To 2 'boucle sur les 2 textboxes

      Me.Controls("TextBox" & x).Value = Cells(li, x).Value
      Next 'prochaine Textbox de la boucle
      Else
      '=========================================================
      'ici
      On Error Resume Next
      Cells(li, 3).Value = CInt(Me.TextBox2.Value) 'répercute la quantité dans la cellule
      If Err.Number Then
      On Error GoTo 0
      Exit Sub
      End If
      On Error GoTo 0
      '========================================================

      End If
      Unload Me 'vide et ferme l'UserForm1
      UserForm1.Show 'affiche l'Userform1
      End Sub

      Private Sub CommandButton2_Click() 'bouton "Modifier"
      modif = True 'définit la variable modif

      End Sub

      Private Sub CommandButton4_Click() 'bouton "Sortir"
      Unload Me 'vide et ferme l'UserForm1
      End Sub
      1. bonjour
        tu pense que je vais refaire ton fichier
        car la je ne voie que du code
        je ne peux rien faire avec ca
        A+
        Maurice
        1. Bonsoir

          en plus simple
          Private Sub TextBox1_AfterUpdate()
             For Li = 2 To Range("A" & Rows.Count).End(xlUp).Row
                If TextBox1.Value = Range("A" & Li).Text Then
                   TextBox2.Text = Cells(Li, 3)
                   Exit Sub
                End If
             Next
             TextBox2.Value = ""
             TextBox1.Value = ""
          MsgBox "Gencode invalide"
          Li = 0
          End Sub
          
          Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
             Select Case KeyAscii
                 Case 48 To 57 'n'autorise que la rentrée de chiffre
                     KeyAscii = KeyAscii
                 Case Else
                     KeyAscii = 0
             End Select
          End Sub
          
          Private Sub CommandButton1_Click()
          If Li = 0 Then Exit Sub
             Cells(Li, 3).Value = Val(TextBox2.Value)
          End Sub
          

          A+
          Maurice