Mise en forme d'un calcul de stock à commander

Bonjour tout le monde,

J’aimerai à partir d’une feuille de calcul de stock à commander toute simple, avoir une fenêtre qui s’ouvre (plutôt qu’un classeur excel), pour faire ce calcul et afficher la date à laquelle la commande doit être passée.

Cette fenêtre doit être composée de 2 onglets distincts A1 et A2, pour faire un calcul qui reste le même sur chacun des onglets.

Pouvez-vous m’apporter votre aide s’il vous plaît ? Un grand merci d’avance. :grinning:
Je vous ai joint une image de la fenêtre que je souhaiterai obtenir renseignée avec tous les éléments et la même image vierge d’éléments.

Je vous joins aussi l’excel avec le petit calcul. Les cases vertes ne doivent pas être modifiables (calcul) et les cases jaunes correspondent aux éléments modifiables sur la fenêtre.

En espérant avoir été assez clair dans mes explications. Bonne soirée à tous.

Stock.xlsx (10,3 Ko)

Bonsoir,
Une petite solution sans formulaire, mais avec une liste déroulante.
Stock.xlsx (19,9 Ko)

Bonne soirée

Merci, pour la réponse, je vais regarder ça. :smiley:

Re-Bonjour à tous,

Comme je souhaitais une interface graphique, j’ai créé une userform.
La partie « calcul de dates » fonctionne bien.
La partie « quantité à commander » pour le produit 1 fonctionne bien et le résultat s’affiche automatiquement comme je le désirais.

Par contre, dès qu’on passe au produit 2, la « quantité à commander » ne s’affiche pas automatiquement lorsque je renseigne le « volume stock sur atelier » et quand je veux changer le « stock nécessaire » pour le produit 2, ça bug.

Pouvez-vous m’aider s’il vous plaît ? Je pense que je ne « code » pas dans les règles de l’Art d’où le bug.
Le même calcul est à faire pour les produits 3 et 4 mais pour l’instant j’ai arrêté à cause du bug « produit 2 ».

Et si vous avez aussi une idée pour passer de l’onglet A1 à B1, je suis preneur ? Je n’ai pas encore regarder comment faire, mais j’aimerai créer une zone transparent sur laquelle on clique pour ne pas gâcher l’aspect visuel plutôt qu’un gros bouton. :stuck_out_tongue:

Et in fine, j’aimerai aussi que la fenêtre se lance au démarrage de l’Excel comme actuellement mais sans le classeur. Là encore, je n’ai pas regardé comment faire.

Désolé si je vous en demande beaucoup et je vous remercie mille fois par avance pour votre aide. :+1:

Stock - Produit.xlsm (215,5 Ko)

Salut
Le PB vient du nom du Userforme inscrit dans les propriétés listé dans le petit tableau du texbox concerné
Si dans le premier il est bien intitulé (name) Volume1 pour le second il y a un souci on trouve (name) Voulme2 et non Volume2
Ton souci vient de là
Corriges et cela devrait le faire
Pour passer d’un onglet à l’autre peut être en fin de procédure du premier ou du second ou des 2 faire la proposition dans un message box pour activer l’autre ou pas et réaliser un 2° userforme à l’identique
Je ne pense pas qu’un userforme soit pilotable autrement que par les outils qui lui sont dédiés
A ta disposition pour d’autres précisions ou besoin

Bien vu, j’ai écrit « voulme » à la place de volume, même chose pour 3 et 4, quelle andouille je fais. :grinning:

Sinon pour n’ouvrir que la Useforme sans le classeur, j’ai mis ce code :

Private Sub Workbook_Open()
Application.Visible = False
UserForm1.Show
End Sub

Sur tes conseils, je vais regarder pour les onglets.

Sinon, est-ce que je pouvais faire plus simple au niveau du code ou est-ce que ça respecte à peu près « les règles de l’art » ? :thinking:

Merci en tout cas.

Ton code me semble bien structuré et assez simple
Je ne connais sa finalité c’est peut être plutôt dans son approche que l’on aurait peut être pu simplifier
Mais je n’ai pas assez d’éléments pour étayer ce constat
C’est aux utilisateurs de se prononcer pas à moi
A ta disposition si besoin

Pour créer 2 feuilles distinctes A1 et B1, j’ai utilisé dans ma userforme l’outil multipages, tout fonctionne très bien. Sauf pour la date, parce que je me retrouve avec un Nom Ambigu : MajDate lors de la compilation.

Sub MaJdate()
If IsDate(DateAPM.Value) Then
Date1.Value = CDate(DateAPM.Value) - Val(120)
Date2.Value = CDate(DateAPM.Value) - Val(30)
Date3.Value = CDate(DateAPM.Value) - Val(30)
Date4.Value = CDate(DateAPM.Value) - Val(30)
Else
Date1.Value = «  »
Date2.Value = «  »
Date3.Value = «  »
Date4.Value = «  »
End If
End Sub

Et

Sub MaJdate()
If IsDate(DateAPM1.Value) Then
Date11.Value = CDate(DateAPM1.Value) - Val(120)
Date21.Value = CDate(DateAPM1.Value) - Val(30)
Date31.Value = CDate(DateAPM1.Value) - Val(30)
Date41.Value = CDate(DateAPM1.Value) - Val(30)
Else
Date11.Value = «  »
Date21.Value = «  »
Date31.Value = «  »
Date41.Value = «  »
End If
End Sub

Comment je peux faire, j’ai bêtement essayé d’ajouter un chiffre non utilisé (Sub MaJdate55() et IsDate55 ) pour pouvoir compiler et lancer ma userforme. En faisant ça, la date fonctionne bien sur l’onglet A1 mais évidemment pas sur l’onglet B1, quand je rentre la date, le calcul ne se fait pas avec les 4 autres dates.

Salut
Normalement le nom de la Sub se créé automatiquement avec un nom directement lié au nom de la Textbox attribué dans les propriété (name)
Tu ne peux de toi même choisir le nom dans l’éditeur
Je suppose que les noms des Texbox des 2 userform sont différents
Tu dois faire en sorte de n’avoir que des noms de Textbox unique que tu définis dans le tableau des propriétés du userforme pour chaque élément
Les sub créées ne pourront pas dans cette dynamique avoir des noms ambigus dans ce principe d’unicité des noms de Texbox
Vérifies

Merci, le problème est réglé, je n’avais pas mis le nom de la textbox dans : NOM_MaJdate() pour chaque onglet. Merci.

Une dernière petite question. Quand je lance le fichier excel, seule ma userform se lance. Je voudrais fermer le fichier temporaire Excel quand je ferme ma userform en cliquant sur la croix rouge de la fenêtre. Est-ce possible ? Ou faut-il créer un bouton pour ça ?

A ma connaissance non il faudrait passer par un bouton à inclure dans le userforme dans lequel on inclurait une commande de fermeture
As tu utilisé un message box pour passer d’un userforme à l’autre
Si oui on peut en profiter pour y inclure cette fermeture automatique
Il faut simplement se préoccuper de l’enregistrement à effectuer ou non au moment de cette opération
A étudier donc

Ok.

Je n’ai qu’une seule useform dans laquelle j’ai utilisé l’outil multipage pour avoir 2 fenêtres distinctes. Avec un bouton tu mets quel code pour fermer et enregistrer les données ?

Si tu ne souhaites enregistrer les dernières modifications :

ThisWorkbook.Close SaveChanges = False

sinon avec enregistrement :

ThisWorkbook.Close SaveChanges = True

Parfait, encore merci, je vais tester ça. :+1: :smiley:

Bonjour quand je mets le code « ThisWorkbook.Close SaveChanges = True », ma useform s’ouvre automatiquement, par contre je n’ai plus le petit fichier temporaire qui reste ouvert après la fermeture de la Useform.

Du coup quand la Useform est ouverte ou avant son ouverture, sur quel bouton clavier je dois appuyer pour accéder à mon code VBA ?

Dans un classeur Excel, c’est facile, c’est ALT+F11 mais dans mon cas je ne trouve pas. J’ai essayé des choses comme maintenir SHIFT appuyé à l’ouverture de l’excel mais ça fonctionne pas.

« Du coup quand la Useform est ouverte ou avant son ouverture, sur quel bouton clavier je dois appuyer pour accéder à mon code VBA ? »
Je t’ai proposé de mettre cette ligne de code dans le VBA d’un bouton du userform qu’il faut rajouter en le prénomant par exemple « Fermeture »

Ci-joint ton fichier adapté ainsi
J’ai mis un bouton fermeture
Cliques dessus et dis moi

https://cjoint.com/c/JDckiVsXvbC

Je l’ai fait, alors la fenêtre se ferme bien mais les données ne sont pas sauvegardées dans les textbox. Idem dans ton fichier.

Pourquoi veux tu sauvegardées les données dans les textbox ?
Un userform n’est pas une archive donc normal qu’il redémarre à 0 à sa réouverture
Si tu souhaites conserver ce qu’il a produit il faut ramener ses données dans un onglet approprié ce qui peut être inclus dans le fonctionnement du bouton « Fermeture »
On peux aussi à sa réouverture remettre en place ces données sur la base de l’archivage réalisé dans l’onglet mais le userforme seul ne peux les récupérer automatiquement

Ok, la sauvegarde n’est pas une obligation absolue.
Pour faire ça, j’imagine que tu utilises la fonction Range() ?