Affecter du stock en fonction du nom du vendeur

Bonjour, j'ai besoin de votre aide.

j'ai une feuille "BL Vendeurs" dans laquelle se trouve une facture contenant le nom du vendeur (cellule G2) et la liste des produits demandés (cellules B20 à B24) et leurs prix (cellules G20 à G24). ce que je souhaite c'est de pouvoir (

En cliquant sur le bouton VALIDER de la feuille "BL Vendeurs") remplir la feuille "stock vendeurs" à partir des informations de la feuille "BL Vendeurs". trouver le vendeur de la feuille "BL Vendeurs" (cellule G2) dans la feuille "stock vendeurs" (en entête de colonne) puis rechercher le produit correspondant et y ajouter la quantité du produit. j'explique mieux par l'exemple. sur la feuille "BL Vendeur" le nom du vendeur est : "YAO OLIVIER", l'application doit donc rechercher "YAO OLIVIER" dans la feuille "Stock vendeurs" parmi les noms des vendeurs et s'il le trouve, l’application recherche les produits commandées par ce vendeur qui se trouvent sur la facture parmi les produits dans la feuille "stock vendeurs" puis ajoute les différentes quantités. pour l'exemple la feuille 'stock vendeur' devrait être remplie comme sur la feuille "Stock Vendeur remplie". les boutons "retour" sous chaque colonne devrait permettre de mettre à jour la feuille "produit" par ajout des quantités de chaque produits de chaque colonne appartenant à un vendeur de la feuille "stock vendeurs" dans la colonne E de la feuille "produit". lorsqu'on clique sur le bouton retour d'un vendeur, il recherche les produits de la colonne de ce vendeur qui correspondent à chaque produits de la feuille 'produit' puis ajoute les différentes quantités de ces produits à la feuille "produit " puis met le stock de la colonne de ce vendeur à zero. lorsqu'on clique sur le bouton retour, après la mise à jour du stock de la feuille produit, le stock de ce vendeur passe à zero, toutes les quantités de produit de ce vendeur sont ajoutées au stock de la feuille produit et le stock du vendeur passe à zero. j'espère que je me suis fais comprendre merci pour votre aide.

LE MOT DE PASSE EST: R2017

Bonjour Vanin,

Pas certain d'avoir tout compris du fonctionnement de ton application mais j'ai essayé de respecter ce que tu demandes à savoir :

1 un VBA qui effectue à la demande (bouton TFT QUANTITE dans l'onglet BL Vendeurs) le transfert des quantités de l'onglet BL Vendeurs en fonction du nom du vendeur dans l'onglet Stock Vendeurs

2 un deuxième VBA qui transfert à la demande (bouton retour dans l'onglet Stock vendeur) et effectue une RAZ de l'onglet Stock Vendeur

Les boutons retour sont des boutons Active X càd avec programme personnalisé ce qui permet de distinguer les colonnes et de faire appel à un seul programme de retour qui fera la distinction en fonction du numéro de la colonne enregistré dans une variable Public (càd qui peut se conserver d'un VBA à un autre)

Examine tout cela et pose les questions nécessaires.

A bientôt

Chris

Merci beaucoup CHRIS1945, c'est exactement ce que je voulais ca marche parfaitement merci pour votre aide

Merci encore pour votre aide, Mais j'ai un souci, le fichier que j'ai joint à ma demande est une copie du fichier excel originale. alors j'ai crée un module M01_TFT_BL sur l'original ou j'ai copié tout le code du module M01_TFT_BL mais lorsque j’exécute je reçois ces erreurs

erreur 1 debogage 1

lorsque je clique sur le bouton retour je reçois ces erreurs

erreur2 debogage2

pourtant les feuilles BL Vendeur et Stock Vendeurs sont exactement les mêmes que la copie que j'avais joint à ma demande. elles ont la même structure

structure du fichier original2 structure du fichier original 2

Bonsoir Vanin,

Es-tu certain que le nom du vendeur dans l'onglet BL existe dans les colonnes de l'onglet stock vendeur et si oui : est-il exactement orthographié de la même manière ?

Je n'ai pas mis de gestion d'erreur pensant que cela n'arriverais jamais.

Je peux arranger cela mais est-ce possible de m'envoyer le classeur actif pour pouvoir tester efficacement ?

Enlève tout ce qui est confidentiels ou mets des données fantaisistes : ce qui m'intéresse c'est la structure du classeur.

A bientôt

Chris

Bonjour Vanin,

En complément à mon message d'hier, j'ai adapté le classeur de la manière suivante :

1 j'ai traité les erreurs possible dans la recherche du nom du Vendeur ainsi que la recherche articles

Dans les deux cas l'application s'arrête

2 Dans le cas de l'article : cela peut se produire n'importe où dans la liste et cela veut donc dire qu'une partie de la MAJ a été faite et pas la fin.

C'est gênant car cela demande une intervention manuelle dangereuse pour mettre à jour le stock

J'ai donc pensé qu'il valait mieux annuler complètement la MAJ déjà effectuée de manière à pouvoir relancer le programme entièrement après la création de l'article manquant.

3 j'ai ajouté des commentaires dans le premier VBA afin de faciliter la compréhension et la logique du VBA. Comme le deuxième est assez similaire, je n'ai pas mis les commentaires redondants.

Si l'erreur persiste : il faut m'envoyer le classeur comme indiqué dans mon précédent message.

Je te souhaite une merveilleuse année 2026 et surtout une bonne santé et plein succès avec Excel

Chris

Bonjour, et bonne année à tous, Chris1945 toutes mes excuses pour ma réponse tardive, en fait je n'étais pas disponible à cause de la fête, j'ai repris le travail ce matin. j'ai essayé d'adapter le nouveau fichier que vous avez envoyé ca fonctionne mais les messages d'erreurs s'affichent même lorsque le produit existe. je vous envoie le fichier complet afin de faire le teste vous même. merci pour votre aide.

Pour l'utilisation :

1- cliquer sur le bouton "nouveau BL" de la page "BL Vendeurs" ensuite sélectionner le vendeur puis valider

2- choisir la famille du produit ensuite le produit puis entrer la quantité et cliquer sur le bouton "ajouter". ainsi de suite jusqu’à ajouter autant de produits désirés. ensuite cliquer sur le bouton "valider". j'ai ajouter l'appel du module "Tft_BL" dans le code du bouton "Valider" ainsi en cliquant sur le bouton valider le module s’exécute

Pour l'utilisation :

1- cliquer sur le bouton "nouveau BL" de la page "BL Vendeurs" ensuite sélectionner le vendeur puis valider

2- choisir la famille du produit ensuite le produit puis entrer la quantité et cliquer sur le bouton "ajouter". ainsi de suite jusqu’à ajouter autant de produits désirés. ensuite cliquer sur le bouton "valider". j'ai ajouter l'appel du module "Tft_BL" dans le code du bouton "Valider" ainsi en cliquant sur le bouton valider le module s’exécute

Bonjour Vanin,

Effectivement je n'ai pas tester la première ligne vide du BL pour arrêter la procédure.

Je ne l'ai pas vu car, dans le classeur que tu as envoyé, il y avait des lignes vides dans l'onglet stock vendeur et donc le test trouvait une ligne vide et ne détectait pas d'erreur. Il mettait le stock à jour mais... à 0 donc tout se passait bien.

Par contre, maintenant que tu as complété l'onglet avec tous les articles, il n'y a plus de ligne "vide" donc quand l'application arrivait aux lignes vides dans le BL il cherchait dans le stock et ne trouvait pas d'où le déclenchement de l'erreur.

J'ai ajouté un test pour sortir de l'application dès que la désignation article est "vide" et ainsi c'est réglé.

J'ai jeté un oeil sur les autres procédures et, si je puis me permettre, je te conseille de mettre un peu d'ordre dans celles-ci :

1 donne un nom aux modules qui indique ce qu'ils contiennent

2 donne un nom significatif aux VBA

3 évite des fatras de lignes blanches

4 si des instructions ne servent pas --> enlève les (sauf si tu penses en avoir besoin ultérieurement

5 surtout : mets des commentaires pour expliquer ce que tu fais : tu verras quand, dans 1 an ou deux, tu voudras modifier quelque chose cela sera très utiles pour t'y retrouver et comprendre le déroulement de l'application.

Merci de me confirmer si cela fonctionne maintenant.

A bientôt

Chris

Bonjour, j'ai testé le fichier que vous avez envoyé, coté onglet BL vendeurs ça fonctionne bien à présent. le souci c'est au niveau de l'onglet STOCK VENDEUR, lorsque l'on clique sur le bouton RETOUR, l'application affiche que l'article n'existe pas dans l'onglet stock vendeur alors que l'article existe bien

Bonjour Vanin,

Alors 2 raisons à ce problème :

1 tu changes l'attribution des boutons de place : Le bouton de retour que tu as installé dans la colonne 5 est celui qui était avant dans la colonne 8 et l'application se base sur le numéro de colonne qui est attribué au bouton. D'autre part, tu as supprimé tous les autres boutons... Comment veux tu exactement gérer ces retours.

J'avais interprété que tu voulais lancer uniquement une colonne à la fois et que donc on mettait un bouton dans chaque colonne (et chaque bouton avait son numéro de colonne attitré).

As tu changé d'avis ?

2 tu as introduit un mot de passe pour pouvoir modifier l'onglet "Produits"... je suis donc bloqué car ce n'est pas le même mot de passe que pour lancer l'application et je ne peux donc pas achever les modifications.

Peux-tu éclaircir ces 2 points afin que je puisse terminer et dis moi aussi toutes les adaptations que tu effectues car cela a des répercutions sur les VBA.

A bientôt

Chris

Bjr chaque colonie vendeur a un bouton retour comme vous l'avez fait au départ. Le mot de passe de la feuille produit est lapaix

Bonjour à tous, Chris1945 merci encore pour votre aide, j'ai pu régler le problème, en fait comme je vous l'avais expliqué c'est des copies du fichier excel que je vous envoie et après j'essaie d'adapter vos corrections sur l'original. d'ailleurs l'original est volumineux, il ne peut être joint. j'ai donc eu des difficultés à adapter vos corrections à mon fichier original, c'est à dire créer les boutons retours sur la feuille "stock vendeur", placer ces boutons en haut de page afin qu'ils soient facilement accessibles vu que la liste des produits sur la feuille "stock vendeur" est longue sur le fichier original. aussi mes feuilles sont protégées j'ai donc adapté vos codes afin de les déverrouiller puis les verrouiller après traitement etc. c'est donc ces changements qui m'ont perturbés mais j'ai pu régler le problème à présent les boutons RETOUR fonctionnent bien. je joint votre code que j'ai modifié, ça, fonctionne bien mais je souhaite que vous regardez si mes modifications respectent les normes de programmation. merci encore à vous

capture d ecran 2026 01 07 143210

Ci dessous le code du module modifié

Option Explicit

Public P_COL As Integer

Sub Tft_BL()
'***********************************************************************************************************************************************
' Procédure pour transférer les QTES de l'onglet BL_Vendeurs
' vers l'onglet Stock Vendeur dans la colonne du vendeur précisé en G2
'***********************************************************************************************************************************************
Dim i As Integer
Dim V_Vendeur As String
Dim V_Article As String
Dim V_QTE As Long
Dim V_COL As Integer
Dim V_Ligne

Sheets("BL Vendeurs").Select 'Sélection onglet BL Vendeurs
V_Vendeur = [G2] 'Nom du Vendeur
Sheets("Stock Vendeur").Select 'Sélection onglet Stock Vendeur
On Error GoTo ERR 'Gestion erreur si Vendeur inexistant dans Stock Vendeur
V_COL = WorksheetFunction.Match(V_Vendeur, Range("A1:J1"), 0) 'Recherche de la Colonne du Vendeur
On Error GoTo -1 'RAZ Gestion Erreur
Range(Cells(2, V_COL), Cells(71, V_COL)).ClearContents 'RAZ des quantités dans la colonne du Vendeur
Sheets("BL Vendeurs").Select 'Sélection onglet BL Vendeurs
For i = 20 To 35 'Boucle de traitement de toutes les lignes articles
V_Article = Cells(i, 2).Value 'Affectation Nom article à la Variable V_Article
If V_Article = "" Then Exit Sub 'Sortie de l'appication si Article : "vide" donc dernier article du BL
V_QTE = Cells(i, 7).Value 'Affectation Quantité article à la Variable V_QTE
Sheets("Stock Vendeur").Select 'Sélection onglet Stock Vendeur
On Error GoTo ERR2 'Gestion erreur si Article inexistant dans Stock Vendeur
V_Ligne = WorksheetFunction.Match(V_Article, Range("B1:B71"), 0) 'Recherche de la Ligne de l'Article
On Error GoTo -1 'RAZ Gestion Erreur
Cells(V_Ligne, V_COL).Value = V_QTE 'Insertion QTE dans l'onglet Stock Vendeur
Sheets("BL Vendeurs").Select 'Sélection onglet BL Vendeurs
Next i
Exit Sub 'Sortie de l'Application
ERR: 'Traitement Erreur Nom Vzndeur
MsgBox "Le vendeur " & V_Vendeur & " n'a pas été créé dans l'onglet Stock Vendeur !"
On Error GoTo -1
Exit Sub
ERR2: 'Traitement Erreur Article
MsgBox "L'article " & V_Article & " n'existe pas dans l'onglet Stock Vendeur '"
On Error GoTo -1
End Sub

Sub Retour()
'**************************************************************************************************************************
' Procédure de transfert du Stock Vendeurs vers Produits avec RAZ du stock vendeur
'**************************************************************************************************************************
Dim i As Integer
Dim j As Integer
Dim V_Vendeur As String
Dim V_Article As String
Dim V_QTE As Long
Dim V_Ligne

Sheets("Stock Vendeur").Select
For i = 2 To 60
V_Article = Cells(i, 2).Value
If V_Article = "" Then Exit Sub
If Left(V_Article, 5) <> "-----" Then 'test pour les lignes contenant -----
V_QTE = Cells(i, P_COL).Value



Sheets("Produits").Select


Sheets("Produits").Unprotect Password:="lapaix"


On Error GoTo ERR
V_Ligne = WorksheetFunction.Match(V_Article, Range("B1:B60"), 0)
On Error GoTo -1
Cells(V_Ligne, 5).Value = Cells(V_Ligne, 5).Value + V_QTE
End If



Sheets("Produits").Protect Password:="lapaix"


Sheets("Stock Vendeur").Select

Next i
Range(Cells(2, P_COL), Cells(60, P_COL)).ClearContents 'RAZ colonne Vendeur

Exit Sub

ERR:
MsgBox "Attention : l'article " & V_Article & " n'existe pas !" & vbNewLine & "Il faut le créer dans l'onglet Produits !"
MsgBox "Nous allons réinitialiser l'onglet Produits à sa valeur initiale et vous pourrez recommencer la MAJ"
On Error GoTo -1
Sheets("Stock Vendeur").Select
For j = 2 To i - 1 'Boucle pour réinitialiser l'onglet Produits
V_Article = Cells(j, 2).Value
If V_Article = "" Then Exit Sub
If Left(V_Article, 5) <> "-----" Then
V_QTE = Cells(j, P_COL).Value

Sheets("Produits").Select
Sheets("Produits").Unprotect Password:="lapaix"

V_Ligne = WorksheetFunction.Match(V_Article, Range("B1:B60"), 0)
Cells(V_Ligne, 5).Value = Cells(V_Ligne, 5).Value - V_QTE
End If


Sheets("Produits").Protect Password:="lapaix"


Sheets("Stock Vendeur").Select
Next j
End Sub

Merci aussi pour vos conseils, vous avez entièrement raison, je vais mettre de l'ordre dans mes codes

Bonjour à tous, Chris1945 merci encore pour votre aide, j'ai pu régler le problème, en fait comme je vous l'avais expliqué c'est des copies du fichier excel que je vous envoie et après j'essaie d'adapter vos corrections sur l'original. d'ailleurs l'original est volumineux, il ne peut être joint. j'ai donc eu des difficultés à adapter vos corrections à mon fichier original, c'est à dire créer les boutons retours sur la feuille "stock vendeur", placer ces boutons en haut de page afin qu'ils soient facilement accessibles vu que la liste des produits sur la feuille "stock vendeur" est longue sur le fichier original. aussi mes feuilles sont protégées j'ai donc adapté vos codes afin de les déverrouiller puis les verrouiller après traitement etc. c'est donc ces changements qui m'ont perturbés mais j'ai pu régler le problème à présent les boutons RETOUR fonctionnent bien. je joint votre code que j'ai modifié, ça, fonctionne bien mais je souhaite que vous regardez si mes modifications respectent les normes de programmation. merci encore à vous

capture d ecran 2026 01 07 143210

Ci dessous le code du module modifié

Option Explicit

Public P_COL As Integer

Sub Tft_BL()
'***********************************************************************************************************************************************
' Procédure pour transférer les QTES de l'onglet BL_Vendeurs
' vers l'onglet Stock Vendeur dans la colonne du vendeur précisé en G2
'***********************************************************************************************************************************************
Dim i As Integer
Dim V_Vendeur As String
Dim V_Article As String
Dim V_QTE As Long
Dim V_COL As Integer
Dim V_Ligne

Sheets("BL Vendeurs").Select 'Sélection onglet BL Vendeurs
V_Vendeur = [G2] 'Nom du Vendeur
Sheets("Stock Vendeur").Select 'Sélection onglet Stock Vendeur
On Error GoTo ERR 'Gestion erreur si Vendeur inexistant dans Stock Vendeur
V_COL = WorksheetFunction.Match(V_Vendeur, Range("A1:J1"), 0) 'Recherche de la Colonne du Vendeur
On Error GoTo -1 'RAZ Gestion Erreur
Range(Cells(2, V_COL), Cells(71, V_COL)).ClearContents 'RAZ des quantités dans la colonne du Vendeur
Sheets("BL Vendeurs").Select 'Sélection onglet BL Vendeurs
For i = 20 To 35 'Boucle de traitement de toutes les lignes articles
V_Article = Cells(i, 2).Value 'Affectation Nom article à la Variable V_Article
If V_Article = "" Then Exit Sub 'Sortie de l'appication si Article : "vide" donc dernier article du BL
V_QTE = Cells(i, 7).Value 'Affectation Quantité article à la Variable V_QTE
Sheets("Stock Vendeur").Select 'Sélection onglet Stock Vendeur
On Error GoTo ERR2 'Gestion erreur si Article inexistant dans Stock Vendeur
V_Ligne = WorksheetFunction.Match(V_Article, Range("B1:B71"), 0) 'Recherche de la Ligne de l'Article
On Error GoTo -1 'RAZ Gestion Erreur
Cells(V_Ligne, V_COL).Value = V_QTE 'Insertion QTE dans l'onglet Stock Vendeur
Sheets("BL Vendeurs").Select 'Sélection onglet BL Vendeurs
Next i
Exit Sub 'Sortie de l'Application
ERR: 'Traitement Erreur Nom Vzndeur
MsgBox "Le vendeur " & V_Vendeur & " n'a pas été créé dans l'onglet Stock Vendeur !"
On Error GoTo -1
Exit Sub
ERR2: 'Traitement Erreur Article
MsgBox "L'article " & V_Article & " n'existe pas dans l'onglet Stock Vendeur '"
On Error GoTo -1
End Sub

Sub Retour()
'**************************************************************************************************************************
' Procédure de transfert du Stock Vendeurs vers Produits avec RAZ du stock vendeur
'**************************************************************************************************************************
Dim i As Integer
Dim j As Integer
Dim V_Vendeur As String
Dim V_Article As String
Dim V_QTE As Long
Dim V_Ligne

Sheets("Stock Vendeur").Select
For i = 2 To 60
V_Article = Cells(i, 2).Value
If V_Article = "" Then Exit Sub
If Left(V_Article, 5) <> "-----" Then 'test pour les lignes contenant -----
V_QTE = Cells(i, P_COL).Value



Sheets("Produits").Select


Sheets("Produits").Unprotect Password:="lapaix"


On Error GoTo ERR
V_Ligne = WorksheetFunction.Match(V_Article, Range("B1:B60"), 0)
On Error GoTo -1
Cells(V_Ligne, 5).Value = Cells(V_Ligne, 5).Value + V_QTE
End If



Sheets("Produits").Protect Password:="lapaix"


Sheets("Stock Vendeur").Select

Next i
Range(Cells(2, P_COL), Cells(60, P_COL)).ClearContents 'RAZ colonne Vendeur

Exit Sub

ERR:
MsgBox "Attention : l'article " & V_Article & " n'existe pas !" & vbNewLine & "Il faut le créer dans l'onglet Produits !"
MsgBox "Nous allons réinitialiser l'onglet Produits à sa valeur initiale et vous pourrez recommencer la MAJ"
On Error GoTo -1
Sheets("Stock Vendeur").Select
For j = 2 To i - 1 'Boucle pour réinitialiser l'onglet Produits
V_Article = Cells(j, 2).Value
If V_Article = "" Then Exit Sub
If Left(V_Article, 5) <> "-----" Then
V_QTE = Cells(j, P_COL).Value

Sheets("Produits").Select
Sheets("Produits").Unprotect Password:="lapaix"

V_Ligne = WorksheetFunction.Match(V_Article, Range("B1:B60"), 0)
Cells(V_Ligne, 5).Value = Cells(V_Ligne, 5).Value - V_QTE
End If


Sheets("Produits").Protect Password:="lapaix"


Sheets("Stock Vendeur").Select
Next j
End Sub

Merci aussi pour vos conseils, vous avez entièrement raison, je vais mettre de l'ordre dans mes codes

Bonjour Vanin,

Désolé du temps mit à te répondre mais j'ai eu un petit problème de santé qui est réparé maintenant.

Alors pour ce qui est de tes adaptations :

C'est exactement ce que j'allais te proposer sauf pour une petite amélioration concernant l'enlèvement de la protection et la protection : il n'est pas nécessaire de le faire à chaque ligne, on peut très bien déprotéger avant la boucle et protéger après la boucle : cela fera gagner du temps de déroulement de la boucle. Si tu n'as pas trop de lignes se sera insignifiant mais en cas de nombreuses lignes cela peut être significatif.

D'autre part, j'ai aussi un peu améliorer les boutons retours à savoir dans les propriétés j'ai adapté le "Caption" en mettant le nom de la colonne de la manière suivante : "Retour Col01" ; "Retour Col02" etc...

De cette façon je charge la variable publique en prenant les 2 derniers caractères de "Caption" et il y a un lien entre le nom du bouton et le lancement des procédures des boutons retour.

Ce n'est pas obligatoire mais c'est un plus pour la clarté des VBA.

A toi de voir si tu veux adapter ton application. Je te joins mon classeur test pour que tu voies les adaptations que je te propose.

Il faut que tu adaptes pour chaque boutons :

1 dans Propriétés du bouton de la colonne : Mettre le nom sous la forme "Retour Col01" etc... dans Caption.

2 dans le code du bouton mettre à jour l'instruction de chargement de la variable

Je te souhaite plein succès avec ton application et encore une super année 2026

Chris

Bonjour à tous, bonjour Chris1945 merci pour ton aide je vais tenir compte de tes mises à jour pour améliorer mon fichier. bon rétablissement à toi et bonne année également

Rechercher des sujets similaires à "affecter stock fonction nom vendeur"