Gestion de stock: sortie stock VBA (Fonction Range.ClearContents)

Bonjour à toute la communauté VBA,

Me voila lancé sur une petite application de stock et novice en VBA je bloque sur un point précis.

Contexte: Création d'un mur de tri pour regrouper plusieurs colis à différents moments d'une même commande.

Ex: si vous commandez un smartphone et sa coque auprès du même fournisseur, la préparation de commande ne se fera pas forcément en même temps mais les2 colis(Smartphone et coque) se rejoindrons un emplacement fixe (Entrée) pour ensuite sortir ces colis du stock

Pour commencer voici le process: 3 boutons: ENTREE, SORTIE, CONSULTATION

Le bouton ENTREE fonctionne bien avec mes 2 Userforms et incrémentation dans la feuille BASE

Je souhaite maintenant réaliser la même chose mais en sortant le stock automatiquement des emplacements.

Le stock se trouve sur la feuille base, je souhaite que si l'on scanne le code barre du bon de préparation (USERFORM "VALIDER-SORTIE") qui est déjà en stock avec peux être 2, 3 ,4 ou plusieurs lignes s'effacent automatiquement de la feuille "BASE" en mettant également un message d'alerte du style" attention, vous aller sortir le BP N°...... de l'emplacement n°.....

J'ai essayé avec la fonction Range.ClearContents mais comme je vous l'ai dit je ne suis qu'un bébé en VBA et j'ai des messages d'erreurs... Je me tire les cheveux depuis 3 jours ...

Je joins mon fichier en espérant avoir été assez clair dans mes explications...

Par avance, merci de votre aide sur ce sujet

266mur-de-tri-sortie.zip (42.13 Ko)

Bonjour,

Voici une vague proposition, compte tenu de ma compréhension du problème, reposant sur des suppositions :

1 - la macro se déclenche au changement de valeur d'une cellule (contenant le code barre), N1 dans le code (choix arbitraire à modifier),
2 - la macro inspecte toutes les cellules d'une colonne (plage) et efface tout le contenu de la ligne,
3 - la colonne à inspecter fait partie d'un tableau qui commence en ligne 1.

'CODE A COPIER DANS LE MODULE DE LA FEUILLE BASE
Private sub worksheet_change(byval target as range) 'MACRO CHGT DE VALEUR
if not intersect(target, range("N1")) is nothing then 'si N1 change de valeur
    if not target.value = "" then 'si N1, la cible, est non vide
        call EffacerSorties(target.value) 'execution macro EffacerSorties en fonction du code barre saisi
    end if
end if
end sub

'CODE A COPIER DANS UN MODULE NORMAL
Sub EffacerSorties(codebarre) 'EXECUTEE LORS DU CHGT DE VALEUR (NE PEUT S'EXECUTER SEULE)

dim plage as range, base as range, rsorties as range

if not msgbox("Voulez-vous sortir ce produit ? Attention, cette opération est irréversible !", _
    vbyesno + vbcritical, "Demande de confirmation") = vbyes then Exit sub 'msg confirmation

set plage = Sheets("Base").range("A1:A100") '<<<<< A MODIFIER, ADAPTER (colonne recherche code barre)
set base = plage.currentregion 'tableau contenant plage

for each cell in plage 'pour chaque cellule de plage
    if cell.value = codebarre then 'si la cellule = code barre (saisi en N1 donc)
        if rsorties is nothing then set rsorties = base.rows(cell.row) 'si zone correspondance vide, initialisation
        set rsorties = union(rsorties, base.rows(cell.row)) 'sinon, zone correspondance = zone corresp précédente + ligne en cours
    end if
next cell

if not rsorties is nothing then rsorties.clearcontents 'si rsorties non vide, contenu effacé

end sub

Cdlt,

Bonjour 3GB,

Désolé pour la réponse tardive

Merci de ton aide,

Je ne comprends pas ou mettre ces 2 codes: dans mes modules ou dans mes feuilles?

'"CODE A COPIER DANS LE MODULE DE LA FEUILLE BASE"

"'CODE A COPIER DANS UN MODULE NORMAL"

Mon bouton validation se trouve dans la feuille" valider_sortie"avec USERFORM et en Private Sub Validation_Click()

Par avance, merci de m'éclaircir stp, et désolé de mon niveau de compréhension qui est très scolaire...

Cdt,

Bonjour Cédric,

Honnêtement, voyant que tu n'avais pas de réponse, j'ai essayé t'apporter quelques éléments mais je n'ai pas regardé ton fichier.

Ce que j'ai compris, c'est qu'un procédure était déclenchée à partir de ton userform ou d'un scan de code barre (connait pas le fonctionnement malheureusement) et que cette procédure servait à changer la valeur de ?N1? (en fait, c'est moi qui ai choisi N1 au hasard n'ayant pas plus d'info) censée contenir le code barre du produit à sortir.

Je suis donc parti de cette supposition pour dire que dès que N1 (produit en attente) change de valeur, c'est que le produit est sorti du stock donc on lance la macro effacer les lignes...

Il faut donc mettre le code EffacerSorties dans un module normal de la collection Modules tandis que le code private sub worksheet change est à mettre dans le module de la feuille en question (Base a priori), sur laquelle est détecté l'évènement de changement de valeur (en N1 en l'occurrence).

Regarde la fenêtre des projets (en général à gauche de l'éditeur). Elle contient tous les modules de feuille d'abord (où apparaissent les noms de feuilles justement). Si tu double-clic sur l'une d'elle, la fenêtre de code propre à cette feuille s'ouvrira.

Pour le code, je ne garantis rien car je suis peut-être totalement à côté de la plaque et de ta demande.

Cdlt,

Rechercher des sujets similaires à "gestion stock sortie vba fonction range clearcontents"