Microsoft 365 Macro "évolutif"

xedex

XLDnaute Nouveau
Bonsoir à toutes et à tous,
Je poste pour la première fois sur ce forum en espérant une aide d'expert car je n'ai pas trouvé réponse ailleurs ou je n'ai pas su comment trouver réponse à ma problématique.

Contexte : j'ai créé un outil me permettant selon une quantité de production journalière de pâtisseries, de calculer automatiquement des recettes ainsi que les quantités nécessaires en matières premières pour une journée, la semaine, la quinzaine et le mois. Cela grâce à 4 macros avec plus de 30 entrées pour chacun, pour le calcul des matières premières. Vous trouverez ci-joint un extrait très réduit contenant les macros et quelques recettes mais sans la liste des matières premières car ce n'est pas nécessaire pour l'extrait.

Problématique : Lorsque je veux rajouter un nouveau produit à base de pâte à choux ou de pâte sucrée dans la feuille "quantités", et bien, les macros ne prennent pas en compte la nouvelle ligne et je dois alors modifier tous les macros. Ce qui est très fastidieux, surtout si je fois rajouter une dizaine de nouveaux produits pour la gamme de noel, par exemple.

Les macros en question modifient la colonne "nombre de jours" en 1;7;15 et 30. Est-ce que c'était la bonne façon de faire ?

Solution : il y aurait-il un code VBA permettant aux modules macro de réajuster les entrées de façon à prendre en compte les nouvelles, sans devoir tout refaire ? Une formule dynamique ?

J'espère avoir bien expliqué :)
Dans l'attente de votre retour, je vous remercie de prendre le temps de me donner un coup de main !

Cordialement,
Tiago
 

Pièces jointes

  • Maitrise Production3.xlsm
    35.2 KB · Affichages: 14
C

Compte Supprimé 979

Guest
Bonjour xedex

La 1ère chose à dire est que le code qui se trouve dans ton fichier et bien... pique les yeux :eek:
Tous ces select :eek:

Tu sais que tu peux remplacer
VB:
    Sheets("QuantitŽs").Select
    Range("G2:G4").Select
    ActiveCell.FormulaR1C1 = "3"
    Range("G5:G7").Select
    ActiveCell.FormulaR1C1 = "3"
    Range("G8:G9").Select
    ActiveCell.FormulaR1C1 = "3"
    Range("G10:G11").Select
    ActiveCell.FormulaR1C1 = "3"
    Range("G12:G13").Select
    ActiveCell.FormulaR1C1 = "3"
Simplement par ça
Code:
With Sheets("Quantités")
    .Range("G2:G13").value = 3
end With

Ensuite, je ne vois pas de code qui calcul les quantité !?

Je ne comprends absolument pas ton principe de fonctionnement...

@+
 

xedex

XLDnaute Nouveau
Bonjour Bruno,
Merci beaucoup pour ton aide rapide ! En effet, la première chose que j'avais essayé, en tant que gros débutant en macro c'était ça :

Sheets("QuantitŽs").Select
Range("G2:G59").Select
ActiveCell.FormulaR1C1 = "3"


Mais ça ne fonctionnait pas alors je me suis compliqué la vie :) Je ne connaissais pas du tout la formule "With / End With"

Si simple ^^
C'est top !
 

patricktoulon

XLDnaute Barbatruc
Bonjour
remplace tes 4 module par un seul avec ceci
VB:
Sub annulermacro()
'
' annulermacro Macro
'
' Touche de raccourci du clavier: Ctrl+Shift+A

    [Quantités!G2:54] = 3
 
    Call calculA
End Sub
Sub macro7jours()
'
' macro7jours Macro
'
' Touche de raccourci du clavier: Ctrl+Shift+H
'
   [Quantités!G2:54] = 7
 
    Call calculB
End Sub

Sub macro15jours()
'
' macro15jours Macro
'
' Touche de raccourci du clavier: Ctrl+Shift+Q
'
    [Quantités!G2:54] = 15
   
    Call calculC
End Sub

Sub macro30jours()
'
' macro30jours Macro
'
' Touche de raccourci du clavier: Ctrl+Shift+M
'
     [Quantités!G2:54] = 30


    Call calculD
End Sub

par contre tes sub calcul(A B C D ) , elle ne sont pas dans ton fichier comment veux tu que l'on t'aide i tu donne pas les macros qui vont avec ?????
et je soupçonné que tes macro calcul peuvent certainement se transformer en une avec l'argument numérique qui change
 
C

Compte Supprimé 979

Guest
Bonjour le fil

@soan, Patrick, J'aimerai vous rappeler le problème initial et la demande
Problématique : Lorsque je veux rajouter un nouveau produit à base de pâte à choux ou de pâte sucrée dans la feuille "quantités", et bien, les macros ne prennent pas en compte la nouvelle ligne et je dois alors modifier tous les macros. Ce qui est très fastidieux, surtout si je fois rajouter une dizaine de nouveaux produits pour la gamme de noel, par exemple.

Donc vouloir figer la plage comme vous le faite, n'est pas la bonne idée :confused: et bien plus complexe, je pense...

@xedex, voici mon fichier avec quelques annotations pour comprendre le code ;)

@+
 

Pièces jointes

  • Xedex_Maitrise Production3.xlsm
    25.4 KB · Affichages: 8
Dernière modification par un modérateur:

soan

XLDnaute Barbatruc
Inactif
Bonjour @BrunoM45, le fil,

Dans ce cas, utiliser plutôt ce code VBA :
VB:
Option Explicit

Sub Essai()
  Dim dlg&: Application.ScreenUpdating = 0
  With Worksheets("Quantités")
    dlg = .Cells(Rows.Count, "G").End(xlUp).Row
    If dlg > 1 Then .Range("G2:G" & dlg) = 3
  End With
End Sub
soan
 
Dernière édition:

xedex

XLDnaute Nouveau
Merci à tous de m'avoir aidé :)
La solution de Bruno a bien marché et c'était si simple ! Et dire que j'avais fouillé tout internet à la recherche d'une réponse à la "mauvaise question" ^^
Je prends en compte l'astuce de Patrick de réunir les subs "macro(...)jours". Pour ce qui est des macros calcul (a,b,c,d,e), ils étaient bien présents dans le fichier.
Penses-tu que je pense les réunir dans un seul module également ?
Voici un exemple :

Sub calculE()
'
'calculE Macro
'
'
Sheets("Calcul Recettes").Select
Range("A1").Select
ActiveCell.FormulaR1C1 = "Quantités Journalières"
End Sub


Il n'y aura pas de "conflits" ?

À propos de la feuille listant toutes les matières premières, je n'ai pas trouvé nécessaire de la rajouter à l'extrait car ma question ne concernait pas la somme de toutes les matières premières selon les recettes mais uniquement sur la façon de faciliter la prise en compte pour les macros des nouvelles lignes rajoutées sur la feuilles "quantités" :)
 

Discussions similaires

Réponses
6
Affichages
217

Membres actuellement en ligne

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 848
dernier inscrit
Djigbenou