XL 2013 UserForm Multiple

PatLac

XLDnaute Occasionnel
Bonjour à tous,
J'ai récupéré ce code sur le forum, et je l'ai adapté à ma sauce, mais j'ai un soucis, d'ou ce post.
Je crée dans un premier temps un code article et je valide, ça fonctionne.

Le coup d'après, je souhaite entrer à nouveau le même code article, et il me le mets à la suite ... le code est ainsi fait.

Mais moi je voudrais qu'il me le remplace ...
En gros, si j'entre à nouveau des bananes ou des nouilles, il faudrait que la nouvelle saisie vienne en lieu et place de celle existante (car même code article), et surtout que les quantités s’additionnes.

Merci pour votre aide.
;)
 

Pièces jointes

  • userForm_simple.xls
    45 KB · Affichages: 7
Solution
non je t'ai dis pas par renommage d'une plage mais transformer en tableau
demo.gif

M12

XLDnaute Accro
Bonjour à tous,
J'ai récupéré ce code sur le forum, et je l'ai adapté à ma sauce, mais j'ai un soucis, d'ou ce post.
Je crée dans un premier temps un code article et je valide, ça fonctionne.

Le coup d'après, je souhaite entrer à nouveau le même code article, et il me le mets à la suite ... le code est ainsi fait.

Mais moi je voudrais qu'il me le remplace ...
En gros, si j'entre à nouveau des bananes ou des nouilles, il faudrait que la nouvelle saisie vienne en lieu et place de celle existante (car même code article), et surtout que les quantités s’additionnes.

Merci pour votre aide.
;)
Bonjour,
Teste ceci
 

Pièces jointes

  • userForm_simple.xls
    45 KB · Affichages: 8

PatLac

XLDnaute Occasionnel
Bonjour M12,
Merci pour cette réponse rapide.
Dans l'absolue cela fonctionne, mais si le code article ( le 123456 par ex.) se trouve à la ligne 18 par exemple, ou une autre ?
J'ai modifié le fichier, en sachant que dans le USF il y aura 10-12 ligne, mais jepense qu'après je pourrai adapter...ou pas.

;)
 

Pièces jointes

  • userForm_simple_V2.xls
    45.5 KB · Affichages: 4

PatLac

XLDnaute Occasionnel
Bon j'ai essayé de "bidouiller" (c'est le bon terme mais pas forcément approprié au VBA) ... sans succès.
J'ai épuré le fichier.
Pour faire court, 2 codes articles sont crées (ligne 1 et 2, Feuil2) et je voudrais que lorsque qu'en les ressaisissant les quantités s'ajoutent ...sauf que les codes articles ne seront pas forcément en ligne 1 et 2, il sera possible qu'ils se trouvent en ligne 19 ou 24 par exemple.

Ci-dessous la V3. ;)

Merci pour votre aide.👍
 

Pièces jointes

  • userForm_simple_V3.xls
    40 KB · Affichages: 5

M12

XLDnaute Accro
Bon j'ai essayé de "bidouiller" (c'est le bon terme mais pas forcément approprié au VBA) ... sans succès.
J'ai épuré le fichier.
Pour faire court, 2 codes articles sont crées (ligne 1 et 2, Feuil2) et je voudrais que lorsque qu'en les ressaisissant les quantités s'ajoutent ...sauf que les codes articles ne seront pas forcément en ligne 1 et 2, il sera possible qu'ils se trouvent en ligne 19 ou 24 par exemple.

Ci-dessous la V3. ;)

Merci pour votre aide.👍
Ce n'est pas la manière de faire
Tu fait un USF avec les textbox pour chaque colonnes à renseigner et tu places un listbox.
A l'ouverture le listbox se replit avec les données.
Pour ajouter ou modifier, tu cliques sur une des données de la listbox, les textbox se remplissent et tu modifies les textbox voulues et tu valides
 

patricktoulon

XLDnaute Barbatruc
Bonjour
j'ai repris le fichier du post #9
j'ai virer tout le code du userform
et j'ai mis le mien
j'ai transformé ta plage en tableau structuré
c'est simple et propre
une derniere chose pourquoi le fichier est en xls avec 2013

VB:
Option Explicit

Private Sub UserForm_Activate()
    reliste
    CommandButton1.Caption = "Ajouter"
End Sub

Sub reliste() 'mise a jour de la listbox dynamique et raz des textbox
Dim C
ListBox1.List = Range("Tableau1[#All]").Value
For C = 1 To 6: Me.Controls("TextBox" & C) = "": Next
End Sub

Private Sub CommandButton3_Click(): Unload Me: End Sub    'Bouton Quitter

Private Sub CommandButton1_Click()    'Bouton Modifier/Ajouter
    Dim R As Range, C&
    With ListBox1
        If .ListIndex > 0 Then
            Set R = Range("Tableau1").ListObject.ListRows(.ListIndex).Range
        Else
            Set R = Range("Tableau1").ListObject.ListRows.Add.Range
        End If
        For C = 1 To 5: R(C) = Me.Controls("TextBox" & C).Value: Next 'met a jour les 5 premieres colonnes
        R(6) = Val(R(6)) + Val(Me.Controls("TextBox" & C).Value) 'additionne
    End With
    reliste
End Sub

Private Sub CommandButton2_Click()    'Bouton Supprimer
    If ListBox1.ListIndex < 1 Then Exit Sub
    Range("Tableau1").ListObject.ListRows(ListBox1.ListIndex).Range.EntireRow.Delete
    reliste
End Sub

Private Sub ListBox1_Change()
    Dim I&
    With ListBox1
        CommandButton1.Caption = Array("Modifier", "Ajouter")(Abs(.ListIndex < 1))
        For I = 0 To .ColumnCount - 2
            If .ListIndex > 0 Then
                Me.Controls("TextBox" & I + 1) = .List(.ListIndex, I)
            Else
                Me.Controls("TextBox" & I + 1) = ""
            End If
        Next
    End With
End Sub
je met quand même le fichier joint
 

Pièces jointes

  • userForm_simple.xls
    45.5 KB · Affichages: 6

M12

XLDnaute Accro
Bonjour
j'ai repris le fichier du post #9
j'ai virer tout le code du userform
et j'ai mis le mien
j'ai transformé ta plage en tableau structuré
c'est simple et propre
une derniere chose pourquoi le fichier est en xls avec 2013

VB:
Option Explicit

Private Sub UserForm_Activate()
    reliste
    CommandButton1.Caption = "Ajouter"
End Sub

Sub reliste() 'mise a jour de la listbox dynamique et raz des textbox
Dim C
ListBox1.List = Range("Tableau1[#All]").Value
For C = 1 To 6: Me.Controls("TextBox" & C) = "": Next
End Sub

Private Sub CommandButton3_Click(): Unload Me: End Sub    'Bouton Quitter

Private Sub CommandButton1_Click()    'Bouton Modifier/Ajouter
    Dim R As Range, C&
    With ListBox1
        If .ListIndex > 0 Then
            Set R = Range("Tableau1").ListObject.ListRows(.ListIndex).Range
        Else
            Set R = Range("Tableau1").ListObject.ListRows.Add.Range
        End If
        For C = 1 To 5: R(C) = Me.Controls("TextBox" & C).Value: Next 'met a jour les 5 premieres colonnes
        R(6) = Val(R(6)) + Val(Me.Controls("TextBox" & C).Value) 'additionne
    End With
    reliste
End Sub

Private Sub CommandButton2_Click()    'Bouton Supprimer
    If ListBox1.ListIndex < 1 Then Exit Sub
    Range("Tableau1").ListObject.ListRows(ListBox1.ListIndex).Range.EntireRow.Delete
    reliste
End Sub

Private Sub ListBox1_Change()
    Dim I&
    With ListBox1
        CommandButton1.Caption = Array("Modifier", "Ajouter")(Abs(.ListIndex < 1))
        For I = 0 To .ColumnCount - 2
            If .ListIndex > 0 Then
                Me.Controls("TextBox" & I + 1) = .List(.ListIndex, I)
            Else
                Me.Controls("TextBox" & I + 1) = ""
            End If
        Next
    End With
End Sub
je met quand même le fichier joint
Bonjour,

Si je l'ai placé en XLS car le fichier d'origine du demandeur est en XLS, ne sachant pas quelle version il possède, dans le doute !
 

PatLac

XLDnaute Occasionnel
C'est nickel, c'est même mieux que le code initial (sans vouloir froisser la personne qui à créer ce code car celui-ci fonctionne également très bien).
Il faudra juste que je travaille avec une autre logique car là si j'ajoute la même référence une nouvelle fois, celle-ci s'ajoute à la suite et ne vient pas remplacer l'existante.
Mais c'est pas très grave, je vais juste m'adapter.

Donc dans ce cas de figure, Est-il possible d'ajouter un bouton "chercher" qui cherchera le code article existant en mettant la ligne en surbrillance, et il me suffira juste de modifier les quantités de ce dernier, et ce sera TOP!

Merci encore.

PS: L'histoire du XLS au lieu du XLM c'est a cause du code initial qui est telquel ... j'ai rien changé.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re avec mon modèle tu peux ajouter une ligne ou la modifier
quand tu sélectionne rien ou la ligne d’entête tu est en mode ajouter automatiquement si tu sélectionne une ligne dans la listbox tu es en mode modifier et ça modifiera la ligne en question
c'est tout totomatic

maintenant si tu tape dans le textbox sans passer par la listbox une ref ou un produit là oui ca va t'ajouter
je peux régler le probleme tres facilement
 

patricktoulon

XLDnaute Barbatruc
re
rajoute ça dans le module du userform
tu ne pourra pas taper un e ef ou une description sans que la listbox se selectionne et donc le userform sera en mode modifier
VB:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Dim t, I&: t = ListBox1.List
    If TextBox1 = "" Then Exit Sub
    For I = LBound(t) To UBound(t)
        If Val(TextBox1.Value) = Val(ListBox1.List(I, 0)) Then
            TextBox1.Enabled = False
            ListBox1.ListIndex = I
            TextBox1.Enabled = True
            Exit Sub
        End If
    Next
End Sub


Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Dim t, I&: t = ListBox1.List
    If TextBox2 = "" Then Exit Sub
    For I = LBound(t) To UBound(t)
        If UCase(TextBox2.Value) = UCase(ListBox1.List(I, 1)) Then
            TextBox2.Enabled = False
            ListBox1.ListIndex = I
            TextBox2.Enabled = True
            Exit Sub
        End If
    Next
End Sub
 

Discussions similaires

Réponses
3
Affichages
291
Réponses
4
Affichages
322

Statistiques des forums

Discussions
312 224
Messages
2 086 410
Membres
103 201
dernier inscrit
centrale vet