Erreur dans UserForm / textbox

Résolu
seblap47 Messages postés 2 Statut Membre -  
 Maurice -
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

  1. Maurice
     
    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
    0
  2. seblap47 Messages postés 2 Statut Membre
     
    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
    0
  3. Maurice
     
    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
    0
  4. Maurice
     
    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
    0