Microsoft 365 Code pour mise a jour

Marvin57

XLDnaute Occasionnel
Bonjour tout le monde,

dans mon fichier ci-joint il y a deux onglets ;

1) STOCK

2) ENTREE STOCK


Mon souhait :

lors d'une ENTREE STOCK, la désignation, l'unité ou le PUHT d'un article, peuvent changer ou pas, par rapport au STOCK existant.

La seule chose qui ne changera jamais lors d'une ENTREE STOCK, c'est l'ID de l'article existant.

Lors du click sur le bouton VALIDER ET MISE A JOUR STOCK de l'onglet ENTREE STOCK, , il exécute le code que j'ai mis en place dans le module1. Alors après des essais il a l'air de fonctionner. Mais j'aimerai bien avoir l'avis d'un expert dans ce domaine afin d'être sûr avant de le placer dans mon fichier réel.

Je vous remercie d'avance.

Marvin57
 

Pièces jointes

  • Marvin code pour modification.xlsm
    22.7 KB · Affichages: 13

Phil69970

XLDnaute Barbatruc
Bonjour @Marvin57

Perso je ferais comme ceci

VB:
Sub MajStock()

Dim i%, j%, Dls%, Dld%
Dim Ws As Worksheet, Wd As Worksheet
Set Ws = Sheets("ENTREE STOCK")
Set Wd = Sheets("STOCK")
Dls = Ws.Range("B" & Rows.Count).End(xlUp).Row
Dld = Wd.Range("A" & Rows.Count).End(xlUp).Row

For i = 8 To Dls
    For j = 2 To Dld
        If Wd.Cells(j, "A").Value = Ws.Cells(i, "I").Value Then
            Wd.Cells(j, "C").Value = (Ws.Cells(i, "B").Value)
            Wd.Cells(j, "D").Value = (Ws.Cells(i, "D").Value)
            Wd.Cells(j, "G").Value = (Ws.Cells(i, "E").Value)
            Wd.Cells(j, "F").Value = Wd.Cells(j, "F").Value + (Ws.Cells(i, "C").Value * 1)
            If Wd.Cells(j, "E").Value = "" Then Wd.Cells(j, "E").Value = (Ws.Cells(i, "C").Value * 1)
        End If
    
    Next j
Next i

End Sub

Pourquoi ? tout simplement car tout ceci peut être mis dans la même boucle

For i = 8 To Dls
For j = 2 To Dld
If Wd.Cells(j, "A").Value = Ws.Cells(i, "I").Value Then
Wd.Cells(j, "C").Value = (Ws.Cells(i, "B").Value)

End If
Next j
Next i

For i = 8 To Dls
For j = 2 To Dld
If Wd.Cells(j, "A").Value = Ws.Cells(i, "I").Value Then
Wd.Cells(j, "D").Value = (Ws.Cells(i, "D").Value)

End If
Next j
Next i

For i = 8 To Dls
For j = 2 To Dld
If Wd.Cells(j, "A").Value = Ws.Cells(i, "I").Value Then
Wd.Cells(j, "G").Value = (Ws.Cells(i, "E").Value)

End If
Next j
Next i
Si tu regarde bien toutes les parties colorées sont identiques donc pas besoin de 3 boucles 1 seule suffit

Et idem pour le reste de ton code
 

fanfan38

XLDnaute Barbatruc
Bonjour
Pourquoi créer des tableaux structurés et ne pas les utiliser?
tu fais plusieurs fois la même boucle pour modifier le stock... pourquoi?
J'ai modifié... (tu verras c'est beaucoup plus simple et pour un même résultat)

A+ François
Bonjour Phil69970 ,( j'avais pas rafraichi...)
 

Pièces jointes

  • Marvin code pour modification.xlsm
    22.5 KB · Affichages: 4

Marvin57

XLDnaute Occasionnel
Bonjour @Marvin57

Perso je ferais comme ceci

VB:
Sub MajStock()

Dim i%, j%, Dls%, Dld%
Dim Ws As Worksheet, Wd As Worksheet
Set Ws = Sheets("ENTREE STOCK")
Set Wd = Sheets("STOCK")
Dls = Ws.Range("B" & Rows.Count).End(xlUp).Row
Dld = Wd.Range("A" & Rows.Count).End(xlUp).Row

For i = 8 To Dls
    For j = 2 To Dld
        If Wd.Cells(j, "A").Value = Ws.Cells(i, "I").Value Then
            Wd.Cells(j, "C").Value = (Ws.Cells(i, "B").Value)
            Wd.Cells(j, "D").Value = (Ws.Cells(i, "D").Value)
            Wd.Cells(j, "G").Value = (Ws.Cells(i, "E").Value)
            Wd.Cells(j, "F").Value = Wd.Cells(j, "F").Value + (Ws.Cells(i, "C").Value * 1)
            If Wd.Cells(j, "E").Value = "" Then Wd.Cells(j, "E").Value = (Ws.Cells(i, "C").Value * 1)
        End If
   
    Next j
Next i

End Sub

Pourquoi ? tout simplement car tout ceci peut être mis dans la même boucle


Si tu regarde bien toutes les parties colorées sont identiques donc pas besoin de 3 boucles 1 seule suffit

Et idem pour le reste de ton code
Bonjour Phil69970,

Merci à vous pour votre aide sur ce sujet. 👍
Cela fonctionne bien. Je vais faire plusieurs tests ce soir et je reviendrai vous informer.

Marvin57
 

Marvin57

XLDnaute Occasionnel
Bonjour
Pourquoi créer des tableaux structurés et ne pas les utiliser?
tu fais plusieurs fois la même boucle pour modifier le stock... pourquoi?
J'ai modifié... (tu verras c'est beaucoup plus simple et pour un même résultat)

A+ François
Bonjour Phil69970 ,( j'avais pas rafraichi...)
Bonjour fanfan38,

Merci également à vous pour votre aide sur ma demande.

Par contre, je viens de faire un essai et cela ne fonctionne pas.
En plus, lorsque je saisi par exemple dans le tableau de l'onglet ENTREE STOCK une désignation différente il ne me laisse pas faire !

Pourriez vous m'expliquer SVP.

Marvin57
 

Marvin57

XLDnaute Occasionnel
J'ai enlevé le message d'erreur tu peux donc saisir une autre désignation...

A+ François
Re fanfan38,

j'ai essayé votre fichier. Cela fonctionne, mais j'ai deux soucis :

1) peut-on enlever les listes déroulantes car j'en ai pas besoin, vu que parfois il y a des articles existant dans mon stock qui change de désignation. (lors d'une ENTREE STOCK, la désignation, l'unité ou le PUHT d'un article, peuvent changer ou pas, par rapport au STOCK existant)

2) admettons que le jour ou j'ai une rentrée stock et que j'ai plusieurs articles dont les désignations ont changés. Alors est-il possible de rajouter un code qui lorsque je clique sur "valider et mise a jour stock", qu'il me donne une info comme quoi il y a des articles qui ont changés de désignation ?

Merci d'avance et A +
 

Marvin57

XLDnaute Occasionnel
Bonjour @Marvin57

Perso je ferais comme ceci

VB:
Sub MajStock()

Dim i%, j%, Dls%, Dld%
Dim Ws As Worksheet, Wd As Worksheet
Set Ws = Sheets("ENTREE STOCK")
Set Wd = Sheets("STOCK")
Dls = Ws.Range("B" & Rows.Count).End(xlUp).Row
Dld = Wd.Range("A" & Rows.Count).End(xlUp).Row

For i = 8 To Dls
    For j = 2 To Dld
        If Wd.Cells(j, "A").Value = Ws.Cells(i, "I").Value Then
            Wd.Cells(j, "C").Value = (Ws.Cells(i, "B").Value)
            Wd.Cells(j, "D").Value = (Ws.Cells(i, "D").Value)
            Wd.Cells(j, "G").Value = (Ws.Cells(i, "E").Value)
            Wd.Cells(j, "F").Value = Wd.Cells(j, "F").Value + (Ws.Cells(i, "C").Value * 1)
            If Wd.Cells(j, "E").Value = "" Then Wd.Cells(j, "E").Value = (Ws.Cells(i, "C").Value * 1)
        End If
   
    Next j
Next i

End Sub

Pourquoi ? tout simplement car tout ceci peut être mis dans la même boucle


Si tu regarde bien toutes les parties colorées sont identiques donc pas besoin de 3 boucles 1 seule suffit

Et idem pour le reste de ton code
Bonsoir Phil69970,

Merci d'avoir investi du temps pour trouver ce code, qui fonctionne bien, mais je vais placé le code de fanfan38 qui me convient totalement. Désolé, je suis sûr que ce sera pour une prochaine fois.
Marvin57
 

Marvin57

XLDnaute Occasionnel
Il suffit de demander... lol

A+ François
Re fanfan38,

j'aurai une ptite demande supplémentaire si vous êtes partant.

dans votre dernier code est-il possible de rajouter le code ci-dessous qui me sert à créer un nouvel article.

VB:
Private Sub CommandButton91_Click()
 Dim j As Long, i As Integer, No_ID As String, Dl%, derligne%
 
   On Error Resume Next

   With [Tab_1]
   If .Item(1, 2) <> "" Then j = .Rows.Count + 1 Else j = 1
   No_ID = "R" & Format(j, "0000")
    .Item(j, 1) = No_ID
    .Item(j, 2) = UCase(ComboBox10)
    .Item(j, 3) = Application.Proper(TextBox1)
    .Item(j, 4) = Application.Proper(ComboBox2)
    .Item(j, 10) = CDbl(TextBox10)
    .Item(j, 5) = CDbl(TextBox3)
    .Item(j, 6) = CDbl(TextBox4)
    .Item(j, 7) = CDbl(Application.WorksheetFunction.Substitute(TextBox5.Value, ".", ","))
    .Item(j, 9) = CDate(Me.TextBox6.Value)
    .Item(j, 9).NumberFormat = "m/d/yyyy"
  
   MsgBox "Nouvel article enregistré dans le stock."
   End With
end sub

Je vous explique mon souhait ;

admettons que je fais une entrée stock d'un article qui est déjà existant en stock mais qui vient de changer de désignation, peut-on avec le code ci-joint créer une nouvelle position de stock pour cet article entrant ?

Si oui, est-il possible que une fois le stock de l'ancien article épuisé, de le supprimer du stock automatiquement ?

Alors je sais pas si cela est faisable ou si vous êtes partant pour ce changement, a vous de me dire.

Merci d'avance en tout cas.

Marvin57
 

Statistiques des forums

Discussions
312 208
Messages
2 086 257
Membres
103 167
dernier inscrit
miriame