Gestion d'inventaire/stock - Créer une fenêtre d'ajout/retrait
Bonjour à toutes et tous,
Je vais essayer d'être le plus clair possible car je n'ai pas de notion de programmation en VBA
Je voudrais créer un fichier Excel me permettant de gérer un inventaire ou stock d'objet. Pour le moment je recense tous les objets (nombre fini) dans une feuille à part. Chaque objet est dans une colonne et chaque colonne a pour première ligne le nom d'une catégorie.
La feuille de l'inventaire en elle même afficherait : catégorie et nom de l'objet (récupérer dans la 2e feuille), quantité et image (récupérée via URL? stockée en local? à ajouter dans la 2e feuille?).
Sur cette même page je voudrait afficher une pop-up via un bouton, ou alors prévoir un espace dédié. A cette endroit on pourra sélectionné un objet. La bonne méthode : le sélectionner dans une liste? commencer à l'écrire avec une recherche prédictive dans l'ensemble de la 2e feuille? Je ne sais pas ce qu'il est possible de faire. Mais il y aura plusieurs centaines d'objets donc l'affichage d'une liste semble difficilement gérable.
Une fois l'objet sélectionné on indiquera une quantité et enfin une action : ajouter ou retirer. Sachant qu'en fonction de ça :
- si l'objet n'est pas présent dans la la liste de l'inventaire, ajouter une quantité fera apparaitre l'objet dans l'inventaire en indiquant la quantité
- si l'objet n'est pas présent dans la la liste de l'inventaire, retirer une quantité ne fera rien
- si l'objet est présent dans la la liste de l'inventaire, ajouter une quantité fera augmenté la quantité présente de l'objet sans ajouter de ligne
- si l'objet est présent dans la la liste de l'inventaire, retirer une quantité mettre à jour la quantité déjà présente ou supprimera l'objet de l'inventaire si la quantité tombe à 0 ou négative
Les modifications ne se feront que par le biais de cet encart/pop-up, le reste de la page ne sera en fait qu'un tableau qui recensera tous les objets présents au fur et à mesure des ajouts/retraits.
J'espère que tout ça est assez clair. En espérant que vos connaissances en programmation me seront utile.
Je vous remercie
Bonjour,
Demande assez complexe, un petit fichier aurait été le bien venu
A+
Est ce qu'avec cet exemple c'est plus parlant?
Bien!
Je crois comprendre
La feuille 1 n'est ni plus ni moins qu'une base de données
dans la feuille 2 tu désires traiter ton action : choisir un objet et une quantité pour pouvoir ensuite Ajouter ou Retirer en respectant les condiitions suivantes
si l'objet n'est pas présent dans la la liste de l'inventaire, ajouter une quantité fera apparaitre l'objet dans l'inventaire en indiquant la quantité
si l'objet n'est pas présent dans la la liste de l'inventaire, retirer une quantité ne fera rien
si l'objet est présent dans la la liste de l'inventaire, ajouter une quantité fera augmenté la quantité présente de l'objet sans ajouter de ligne
si l'objet est présent dans la la liste de l'inventaire, retirer une quantité mettre à jour la quantité déjà présente ou supprimera l'objet de l'inventaire si la quantité tombe à 0 ou négative
Il te faut pour cela créer un Formulaire contenant des listBox (Famille, Objet et Quantité) afin de pouvoir les analyser et traiter ton inventaire en foncton de l'action que tu choisiras
Ne disposant pas de temps actuellement je reviendrai vers toi plus tard si tu ne reçois aucune aide sur le Forum
J'ai trouvé quelques minutes sur mon temps pour pouvoir te proposer ce fichier qui répond je crois à tes questions en ce qui concerne le bouton "Ajouter"
Pour faire fonctionner le code du dois aller chercher la macro "formulaire"
Effectivement l'action semble parfaitement faire son job.
2 questions subsidiaires :
- Peut on rendre une uniquement le bouton qui ouvre la fenêtre cliquable? Dans l'idée il faudrait que seule la macro que tu as créer puisse modifier ou ajouter des lignes. Cela reviens donc à rendre toute la feuille Excel non modifiable.
- Peut on améliorer la recherche des objets? Sachant qu'il y aura possible ment des dizaines voir centaines d'objet par famille, cela risque d'être compliqué en l'état.
Bonjour,
Peut on rendre une uniquement le bouton qui ouvre la fenêtre cliquable? Dans l'idée il faudrait que seule la macro que tu as créer puisse modifier ou ajouter des lignes. Cela reviens donc à rendre toute la feuille Excel non modifiable.
si je comprends bien tu veux protéger ta feuille afin qu'on ne puisse pas entrer ou modifier une valeur par erreur.
oui c'est réalisable : Revision --> Protéger --> Protéger la feuille --> Mot de passe
Mais quand tu utiliseras la macro il faudra au préalable déprotéger la feuille
Worksheets("Feuil1").Unprotect "MotDePasse"et la reprotéger en fin de travail
Worksheets("Feuil1").Protect "MotDePasse"Peut on améliorer la recherche des objets? Sachant qu'il y aura possible ment des dizaines voir centaines d'objet par famille, cela risque d'être compliqué en l'état.
Que veux tu dire ?
Sur le formulaire que tu as fait on peut scrool pour trouver les objets ce qui est très bien avec peu de lignes. Mais comme la BDD que je suis en train de créer comprend parfois des centaines de lignes par famille je pense que ce mode d'affichage et de sélection va être assez vite ingérable.
Du coup je voulais savoir si on pouvait trouver un autre moyen de sélectionner les familles et/ou objets?
Je pensais bêtement à un champs de type texte dans lequel on viens taper le début du nom de l'objet et le formulaire affiche les possibilités. Si ce n'est pas possible peut on trouver un autre moyen pour rendre la recherche et la sélection plus facile?
oui bien sûr,
Je comprends très bien que ça devient fastidieux si tu disposes de plusieurs centaines d'objets. Scroller pour obtenir par exemple le 879 ème ça devient épouvantable
Je peux te proposer une solution qui consisterait à taper ta recherche lettre par lettre. Prenons un exemple : tu recherches "Tartempion"
En tapant "T" tu auras tous les objets commençant par "T"
En tapant "TA" tu auras tous les objets commençant par "TA"
Etc....
Donc tu faciltes la recherche
Mais , attention, dans ta base de données tu dois évidemment inscrire les 879 objets
Pour ce faire, dans ton Userform tu dois créer un TextBox dans laquel tu inscriras le "T" ensuite le "TA" etc... Tu construis un ListBox dans lequel apparaîtront les objets commençant par "T", ensuite par "TA" etc....
Voici le code
For ligne = 2 To derligne 'derligne est le numéro de la cellule qui contient le dernier objet
If Sheets("Base de Données").Cells(ligne, 2).Value Like Tbox_famille & "*" Then
ListBox_famille.AddItem Sheets("Base de Données).Cells(ligne, 2).Value
End If
Next ligneCells(ligne, 2) si les objets sont en colonne 2
ListBox_Famille est la listBox dans laquelle apparaotront pas à pas les objets
Tbox_famille est le TextBox dans lequel tu tapes les letres "R", "TA", etc...
Désolé mais sans abuser de ton temps est ce que tu aurais le code complet du formulaire? Parce que je dois surement mal positionné le code que tu m'a donné ça ne fonctionne pas.
Autre chose tu précises que "Cells(ligne, 2) si les objets sont en colonne 2", est ce que cela pose soucis si j'ai X colonnes avec plusieurs lignes par colonne comme je l'ai fait dans l'exemple de la feuille 1?
Bonjour,
Voici le fichier qui fonctionne comme je te l'ai expliqué : en tapant une lettre à la fois dans les textbox tu "tries" les données qui apparaissent dans les listbox
Quant à la disposition des données en colonne ou non je dois voir de plus près, jusqu'à présent je mets toujours mes données en colonne
A+
Alors 2 remarques :
La recherche semble bien fonctionner puisque si on tape les premières lettres d'un nom dans la colonne 1 ça s'affiche. Par contre il faut respecter obligatoirement la case sinon il ne trouve pas. Mais même en sélectionnant "Famille" et "Objet" le script bug.
Ensuite, il fait une recherche sur la première colonne puis sur les cellule de la colonne 2 visiblement. Est ce qu'il serait possible de faire la recherche de "Famille" sur toutes les cellules de la ligne 1 et ensuite dans la colonne correspond à la ligne sélectionnée?
Bonjour,
En effet il y avait une faute d'orthographe dans ma ligne de code, j'avais écrit "Rowx" au lieu de "Rows", j'espère qu'il n'y a pas d'autres bétises
Est ce qu'il serait possible de faire la recherche de "Famille" sur toutes les cellules de la ligne 1 et ensuite dans la colonne correspond à la ligne sélectionnée?
Peux tu donner un exemple car je n'arrive pas à te suvre correctement, en effet tu veux faire une recherche de "Famille" sur toutes les cellules de la ligne 1, mais les éléments "Famille" sont en colonne et non cellule 1
et ensuite dans la colonne correspond à la ligne sélectionnée, je ne comprends pas
Je vais te montrer ce que j'ai pour que ça soit plus parlant :
Est ce que comme ça c'est possible ou bien je dois changer mon ordre de classement dans la base de données?
Autre chose je me suis aperçu que le bouton "retrait" ne retirais qu'une seule quantité sans prendre en compte ce qui était indiqué dans le champ du formulaire. Je peux même ne pas mettre de quantité il en retire une. Par contre ça efface bien la ligne si la quantité tombe à 0.
Ca m'a amené à une autre réflexion : peut on mettre un message bloquant pour obliger à choisir la famille, l'objet ET la quantité? Pour être sur que le script ne génère pas d'erreur?
bien
Premièrement
je me suis aperçu que le bouton "retrait" ne retirait qu'une seule quantité sans prendre en compte ce qui était indiqué dans le champ du formulaire
je suis fautif, car je croyais que dans ce cas tu ne devais enlever qu'une seule quantité, je corrige
Deuzièmement : je suppose que tes familles sont ici Aile et Alliage et que tu veux en fonction de la famille choisie pouvoir choisir l'objet Aile cassée ou Aile de Mosk ou et.... si tu as choisi Aile pour la famille, sinon l'objet sera Ferrite ou Aluminite ou etc...
Est ce bien cela, si oui il faudra bien réfléchir à la disposition des éléments dans la feuille de données
Je t'ai mis en exemple une Base de données qui devrait correspondre à ce que je pense
J'attends ta réponse pout y travailler et svp donnes moi quelques éléments de plus de cette feuille Base de Données
Fautif allons donc. Tu m'aide depuis le début je serais vraiment très mal placé de t'en vouloir.
Donc la c'est raccord avec ma BDD sauf que la recherche des objets se fait uniquement sur la colonne 2 (sur "Machin").
L'ajout retrait semble OK. Mais la question de la case reste : est ce possible de faire une recherche sur la famille ou l'objet sans avoir à respecter les majuscules? ou bien est ce que c'est compliqué et il vaut mieux prévoir tout en minuscule quitte à ce que ça soit moins propre?
As tu une idée pour l'insertion automatique d'une image (type icone) pour chaque objet présent dans le listing? Est ce faisable? Faut il prévoir de les stocker? ou bien via une URL?
Je te met une partie de la BDD que je créer avec plus de contenu si ça peut t'aider
Parfait
Ton morceau de base de Données m'éclaircit
En ce qui concerna la Case si tu me le permets je verrai cela plus tard, il suffira de créer un petit module pour que le nom des objets commence toujours par une majuscule
Quant aux images, pourquoi pas. Il faudra qu'on se mette d'accord sur le type d'image, sur le lieu où les stocker et comment les appeler.On verra cela également après, je vais d'abord finir l'utilisation de l'userform maintenant que je vois très bien la "construction" de te Base de Données
c'est top.
Je suis à ta disposition s'il te faut plus d'informations. En attendant je vais essayer d'améliorer l'esthétisme de la page.
Bonjour,
J'ai terminé la construction du formulaire, mais j'ai du changer mon fusil d'épaule comme tu pourras le constater car dans les listes d'objets tu en as beaucoup qui commencent par les mêmes lettres, exemple Aile, Carapace, Bourgeons etc ... De ce fait les rechercher lettre par lettre devenait fastidieux
Maintenant tu choisis ta famille comme avant et dès qu'elle est choisie tu obtiens tous les objets de cette famille, à toi ensuite de choisir l'objet et tes choix, famille et objet, sont enregistrés en bas, il te reste à choisir la quantité
Je dois pour terminer revoir l'utilisation des boutons "AJOUTER" et "RETIRER" ce que je ferai plus tard
Bonjour Jacky,
Au final c'est aussi bien. Il faudra surement adapter la taille de la fenêtre et activer le déroulement par la molette mais ça me plait bien
Avec la manipulation sur la case on devrait arriver à un résultat plutôt pas mal. Il faudra que je fasse une série de tests pour voir avec toi s'il reste des comportements bizarres.
Je t'en donne un qui m'est apparu de suite : on peut mettre une valeur négative à l'ajout d'un objet et le script fonctionne. Mais au final il ne faut pas. Il faudrait interdire les valeurs inférieure à 0, égale à 0 ou champ vide.