Développer un UserForm

Salut les Experts

s'il serait possible de m'aider à développer un user form établi par mon ami GMB.

lorsque il ya un doublon dans la colonne E (FEUILLE MAGASIN) il me provoque un problème il distingue pas les quantités colonne E

dans la feuille magasin User Form 2 (colonne E) lorsque je l'ouvre et je sélectionne la référence 10-0023C il m’affiche la mémé quantité pourtant elles sont différente!!!!

je serais reconnaissant à vous

merci infiniment

bye bye

Bonjour,

Il n'est pas nécessaire d'effectuer une recherche avec Find (surtout si il y a des doublons !), il faut utiliser directement l'index de la ListBox et effectuer le décalage nécessaire car l'index de base de la ListBox est 0 et comme tu as des entêtes de colonnes, il te faut rajouter 2 pour tomber sur la bonne ligne :

Sub FormulaireModif()

    UserForm2.Width = 740

    'CommandButton2.Visible = False
    CommandButton3.Visible = False
    CommandButton4.Visible = False
    CommandButton5.Visible = False
    TextBox6 = TextBox1

    For j = 1 To 15

        Controls("Textbox" & j + 1) = Cells(ListBox1.ListIndex + 2, j)

    Next j

    TextBox18 = 0
    TextBox19 = 0

    Call TextBox18_Change
    Call TextBox19_Change

    TextBox15.Locked = True
    TextBox16.Locked = True

End Sub

Salut Theze

si vous pouvez l'appliquer dans mon fichier please

merci beaucoup

bye

Tu ouvre le module du formulaire UserForm2 puis Ctrl+F et dans le champ tu colles ces mots "Sub FormulaireModif()" tu coches les cases "Mot entier" et "Respecter la casse" puis clic sur le bouton "Suivant" tu vas tomber sur la Sub et tu la remplaces par le code que je t'ai posté.

Salut THeze

comme ca User form il distingue mais il reste un petit problème si vous pouvez le résoudre

quand je sélectionne celui qui a la quantité 6 et je clique sur sortir il se mets dans la feuille bon de sortir

lorsque je saisir la quantité (la cellule O11 feuille bon de sortie) il me demande de retirer la quantité de la la feuille magasin je clique oui

le problème qu'il se déduit de la référence celle ki a la quantité 125 (non sélectionne )!!! au lieu de celui ki a 6.

je vous remercie beaucoup

bye bye

Bonjour,

Le problème de la recherche avec Find, si il y a des doublons, le numéro de ligne du premier trouvé sera retournée !

t = fm.Range("C:C").Find(TextBox4, lookat:=xlWhole).Row

Remplace le code du bouton "Private Sub CommandButton2_Click()" de la Form "UserForm2" par celui-ci :

Private Sub CommandButton2_Click()

    n = 0

    For I = 0 To ListBox1.ListCount - 1

        If ListBox1.Selected(I) = True Then

            lgn = IIf(fb.Range("A" & Rows.Count).End(xlUp).Row = 10, 11, fb.Range("A" & Rows.Count).End(xlUp)(3).Row)

            'c'est ici qu'il faut mémoriser la position de la séléction dans la listbox non pas faire une recherche
            'car si doublon, la ligne du premier trouvé sera retournée
            t = ListBox1.ListIndex + 2

            n = fb.Range("A" & lgn - 2) + 1
            fb.Range("A" & lgn) = n

            For j = 1 To 4

                colM = Choose(j, 1, 3, 5, 14)
                colB = Choose(j, 2, 3, 12, 17)
                fb.Cells(lgn, colB).Value = fm.Cells(t, colM).Value

            Next j

        End If

    Next I

    fb.Select
    Unload Me

End Sub

Il faudrait revoir le code dans son ensemble car il y a des choses qui finiront par poser problème tôt ou tard comme les Ranges qui ne sont pas parentés donc, si on ouvre une Form sur une feuille qui n'est pas sa cible ça devient n'importe quoi !

Salut

le problème se persiste toujours il diminue la quantité de 125 de la cellule E2

pourtant moi j'ai sélectionné la cellule E3 qui a la quantité 6 lorsque j'ai fais sortir il devrai déduire de cette quantité

et pas celle de E2 125

voila le grand problème

s'il serait possible de le régler je serai très heureux

merci infiniment

bye

Bonjour,

Le problème vient du fait que pour la récupération de la ligne ou se situe l'élément visé se fait par une recherche Find et donc, problème quand il y a doublon.

Pour régler ce problème, il te faut déclarer dans un module standard une variable publique. Comme la variable "t" est utiliser dans l'UserForm2 pour connaître la position de l'élément, il suffit de la supprimer de la Form et de la déclarer Public dans un module :

'en tête de module
Public T As Long

Et dans le module de la feuille "BON DE SORTIE", remplacer la procédure évènementielle par celle-ci :

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Count > 2 Then Exit Sub

    Application.EnableEvents = False

    Set fb = Sheets("BON DE SORTIE")
    Set fm = Sheets("MAGASIN")
    derln = Application.Max(11, fb.Range("B" & Rows.Count).End(xlUp).Row)

    If Not Intersect(Target, fb.Range("O11:O" & fb.Range("O" & derln).Row)) Is Nothing Then

        ref = Target.Offset(0, -3)

        lgn = T 'fm.Range("E:E").Find(ref, lookat:=xlWhole).Row

        rep = MsgBox("Vous allez retirer une quantité de " & Target & " à la quantité de '' " & Target.Offset(0, -12) & _
                " disponible en magasin." & Chr(13) & Chr(13) & _
                "Confirmez-vous ?", 20)

        If rep = 7 Then
            Target = ""
            GoTo fin
        End If

        fm.Range("O" & lgn) = fm.Range("O" & lgn) - Target

    End If

fin:
    Application.EnableEvents = True

End Sub

C'est juste la ligne -->"lgn = fm.Range("E:E").Find(ref, lookat:=xlWhole).Row"<-- qui est remplacée par -->"lgn = T"<--

Je pense que le code de l'ensemble du classeur devrait être repris. Le mieux serait de contacter le créateur de ce code car je dois passer un peu trop de temps à en comprendre le fonctionnement.

Rechercher des sujets similaires à "developper userform"