Programmation Macros

Fermé
Sassou - 14 déc. 2010 à 18:38
 Patrice67 - 20 déc. 2010 à 15:33
Bonjour,

Je viens de découvrir aujourd'hui l'existence des Macros excel. Dans le cadre de mon travail je dois calculer des scénarios de prix en fonction de devis.

Jusque là, rien de très compliqué. Cependant, les devis sont à entrées multiples et le scénario aussi.
ex : le prix d'une impression dépend de la quantité imprimée, du nombre de pages, du niveau de qualité souhaité. Le prix total se compose d'un calcul de prix fixe, d'un prix variable et d'un autre prix fixe en fonction d'éditions supplémentaires.

Dans le scénario que je possède, j'ai toutes ces informations.
Ex: qualité d'impression: Standard; Volume: 10000 ; Nombre de pages: 234 ...

Le but de la manoeuvre est d'arriver à automatiser les calculs de couts même si le scénario et la grille tarifaire varient.

Après une journée de recherche et de découverte d'excel et de ses nmbreuses fonctions, je suis arrivée à la conclusion que la meilleure manière de procéder serait de programmer une macro, cependant, je n'y connais rien.

Mes questions sont les suivantes :
-Selon-vous les macros sont-ils la meilleure méthode pour résoudre mon problème ?
- Sinon quelle est-elle ?
- Est-il possible pour une ULTRA débutante de réussir ce challenge ?
- Si oui, quels sont les meilleurs moyens d'y arriver ? (conseils...)

Merci d'avance pour vos réponses,

Sassou

A voir également:

7 réponses

Bonjour Sassou,

Effectivement on peut passer par une macro, mais je pense que des formules conditionnelles devraient résoudre le problème. Pour cela il est nécessaire de connaître l'ensemble des conditions (fourchettes) et les décliner.
ex: Qualité standard pour un volume de 1 à 10000 avec 1 page à x pages = tant, si éditions supplémentaires = tant
etc.

Cordialement

Patrice67
1
Bonjour

Est ce que il existe certaines constantes dans les prix (réduction de x% pour telle quantité, réduction de x% pour des commandes complémentaires, etc.) ou y a-t-il vraiement un prix bien défini pour chaque produit, quantité, pages et réduction du prix pour des commandes complémentaires.

En ce qui concerne les instructions que tu peux utiliser pour une macro, je te propose une petite partie de la macro.
Mais sans données complémentaires (constantes pourcentage) elle deviendra rapidement tentaculaire.

Exemple sur la feuil1
Ligne 1 titre
A1 produit,A2 qualité,A3, quantité, A4 pages,A5 commandes complémentaires
Ligne 2 données
A2 produit1, A2 Brouillon,A3 5000, A4 200, A5 0 (pas de commande) 1 (commande sup)

MACRO

Sub prixProduits()
Dim produit As String
Dim qualité As String
Dim quantité As Integer
Dim pages As Integer
Dim EditionSup As Integer

produit = UCase(Cells(2, 1))
qualité = UCase(Cells(2, 2))
quantité = Cells(2, 3)
pages = Cells(2, 4)
EditionSup = Cells(2, 5)
Select Case produit
Case "PRODUIT1"
Select Case qualité
Case "BROUILLON"
Select Case quantité
Case 0 To 5000
Select Case pages
Case 0 To 200
If EditionSup <> 1 Then
prix = 180: Cells(2, 6) = prix
Else
prix = 200: Cells(2, 6) = prix
End If
Case 201 To 500
If EditionSup <> 1 Then
prix = 250: Cells(2, 6) = prix
Else
prix = 280: Cells(2, 6) = prix
End If


Case 501 To 1000


End Select

Case 5001 To 10000
End Select



Case "Standard"
Case "Supérieur"

End Select

Case "PRODUIT2"
End Select


End Sub
1
Re bonjour Patrice,

Malheureusement, il n'existe aucune constante de baisse de prix... c'est là toute la difficulté et l'ampleur du travail. D'autant que les prix vont varier par la suite en fonctions des fournisseurs, et les réductions par la même occasion.

En fait il faudrait que je programme une macro qui puisse repérer les différentes caractéristiques de mes produits (Qualité, Volume, nombre de pages...) et qui réussisse à extraire les bons prix de la grille tarifaire, puis une fois que ces prix sont sorti, il faudrait qu'elle les intègre dans une formule standard de calcul de prix...

Donc je pense que ce que tu m'a donné comme code est proche de ce que je recherche, même si je n'y comprends pas grand chose j'ai cru comprendre qu'il fallait que j'utilise les structures décisionnelles donc If Then Else et ElseIf Then et Select Case.

Cependant je pensais qu'il fallait plutot commencer par les If Then Else en les imbriquants (ex : Si dans mon scénario la qualité est 1, et Si le volume est < 10000, et Si le nombre de pages est de 128, alors je choisi Ce prix fixe, ce prix variable et ce prix de version supplémentaire.
Je calcul le prix total : Je prends le prix fixe, je multiple le prix variable par le volume, je multiplie le prix de la version sup par le nombre de version sup)

et on recommence (copier coller le code ) en modifiant juste le nombre de page (Si dans mon scénario la qualité est 1, et Si le volume est < 10000, et Si le nombre de pages est de 132, alors je choisi Ce prix fixe, ce prix variable et ce prix de version supplémentaire.)
etc... jusqu'à faire toutes les pages puis je copie colle le code en modifiant le volume, je remet toutes les pages (128, 132... ) pr ce meme volume, puis quand j'ai fait tous les volumes, je refais tout et je change la qualité.....

Mais c'est vrai que le code va être extêmement long, en revanche, si au départ il est bien fait, il ne s'agira plus que de faire du copier coller en modifiant quelques paramateres .....

Je suis désolée si ce n'est pas tout à fait clair, en réalité j'ai l'idée dans ma tête et je suis convaincue que c'est faisable mais je ne connais tellement rien au language VBE et aux propriétés excates de ses fonctions que du coup ça me parait assez insurmontable.

Si tu as du mal a te représenter les docs, je t'enverrais un fichier avec scénario et grille tarifaire type.

Sinon je suis sur une autre solution a court terme mais qui ne me permettra pas de changer mon scénario sans tout refaire ...

Merci encore Patrice,

Sassou
0
Bonjour sassou

J'ai travaillé ton fichier avec une macro voir fichier

http://www.cijoint.fr/cjlink.php?file=cj201012/cijZyzm8Gu.xlsm

Je n'ai traité que la partie fixe. Je n'ai pas voulu développer la partie variable si le résultat ne correspondrait pas à ce que tu attends.

Principe:
J'ai mis un bouton en haut à gauche de la feuille tarifaire. Quand on clique dessus, il ouvre une fenêtre. Il faut rentrer le numéro du produit et il retourne "normalement' le prix fixe (si j'ai bien compris tes explications). Pour la faire fonctionner, il faut que la sécurité macro soit désactivée.
Si tu as besoin de plus d'explications n'hésite pas à me rappeler.

En ce qui concerne le prix variable, on peut partir du même principe.

Je n'ai pas optimisé la macro, elle peut présenter certaines lourdeurs pour les puristes, mais vu le nombre de lignes, elle est quasiement instantanée.

Pour les chiffres derrière la virgule, le logiciel arrondi les chiffres récupérés sur excel (quantité, calage1, etc) et l'arrondi peut être légérement différent du tableau des tarifs (ex : produit 1-calage 1 ==> 4278 pour 4279). On peut le modifier en connaissant la règle à appliquer.

Patrice67
1
Bonjour Patrice,

J'ai réussi à télécharger le fichier que tu as déposé sur ci-joint. En revanche je n'y trouve rien qui ressemble à un fichier excel... peut être est-ce un problème lié au fait que j'essaye de l'ouvrir de mon bureau.

J'ai 3 dossiers en zip "_xl" "rels" et "DocPros",toutes les extensions sont .vml, .xml, .rels ... je ne connais pas ce type de fichier et mon PC ne parvient pas à les ouvrir. J'obtiens une sorte de code Html où je retrouve des cellules d'excel :

- <sheetViews>
- <sheetView topLeftCell="A37" workbookViewId="0">
<selection activeCell="A62" sqref="A62:IV62" />
</sheetView>
</sheetViews>
<sheetFormatPr baseColWidth="10" defaultRowHeight="12.75" />
- <cols>
<col min="2" max="2" width="15" bestFit="1" customWidth="1" />
<col min="4" max="4" width="15.140625" bestFit="1" customWidth="1" />
<col min="5" max="6" width="14.85546875" bestFit="1" customWidth="1" />
<col min="7" max="7" width="16.7109375" bestFit="1" customWidth="1" />
<col min="8" max="8" width="19.7109375" bestFit="1" customWidth="1" />
</cols>
- <sheetData>
- <row r="1" spans="1:11">
- <c r="A1" t="s">
<v>35</v>
</c>
- <c r="B1" s="29" t="s">
<v>25</v>
</c>
- <c r="C1" s="29" t="s">
<v>26</v>
</c>
...

Voilà alors dis moi si tu sais d'où peut provenir le problème et si tu sais à quoi correspondent les fichiers que j'ai reçu.

Bonne journée, à bientôt,

Sassou
0
Bonjour Patrice,

Tout d'abord merci d'avoir répondu si rapidement à mon problème.

Dans mon message j'oubliais de précisier que j'avais déjà essayé la solution fonction conditionelles mais qu'il y avait tellement de conditions qu'au bout de 7 lignes de formules excel m'a indiqué "formule trop longue" et je n'ai pas pu continuer. C'est pourquoi j'ai pensé qu'en programmation VBA il n'y avait pas de limites et les conditions (if) sont également possible (?), cependant je ne maitrise pas du tout cet outil et son language.

De plus je ne sais pas si j'ai également évoqué que dans mon scénario un type d'impression de livret correspond à un produit et il y a 67 produits. Donc pour chaque produit, une niveau de qualité, un volume, un nombre de pages etc...

Donc il faudrait que je connaisse la traduction VBA de la fonction standard conditionelle (?) et de la fonction Recherchev.

J'avais également pensé à faire des matrices avec les groupe qui m'interessent (ex: si (niveau de qualité 1; Recherchev (matrice niveau de qualité1); Si(volume<10000;recherchev(matrice niveau qualité 1 et volume < 10000) .....) mais ca ne changera rien a la longueur de ma formule ...

Merci d'avance pour votre aide,

Sassou
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour Sassou

J'ai regardé pour la macro. Elle pourrait ressembler à celle ci-dessous. Mais il est obligatoire de connaître l'ensemble des conditions. Est ce que le prix diminue en fonction d'un pourcentage pour une certaine quantité pour un certain nombre de pages ou pour des éditions complémentaires ou tous les prix sont fixes sans une cohérence entre eux ?

Je te propose la macro ci-dessous qui pourrait être une première trame, mais sans précision sur les prix, on doit tenir compte de toutes les possibilités et la macro va comporter un nombre de lignes très important. Elle sera difficile à exploiter quand il y aura des changements de prix.
Ce n'est donc pas la meilleure solution

Sub prixProduits()
Dim produit As String
Dim qualité As String
Dim quantité As Integer
Dim pages As Integer
Dim EditionSup As Integer

produit = UCase(Cells(2, 1)) ' nom du produit en A2
qualité = UCase(Cells(2, 2)) ' Qualité en B
quantité = Cells(2, 3) 'Quantité en C2
pages = Cells(2, 4) ' Nb de pages D2
EditionSup = Cells(2, 5) ' Editios supplémentaire en D2 (indiquer 0 = pas d'édition 1 = édition)
Select Case produit 'Choix du produit
Case "PRODUIT1"
Select Case qualité 'choix de la qualité
Case "STANDARD"
Select Case quantité ' choix de la quantité fourchette
Case 0 To 5000
Select Case pages ' choix du nombre de pages fourchette
Case 0 To 200
If EditionSup <> 1 Then
prix = 180: Cells(2, 6) = prix ' prix à appliquer
Else
prix = 200: Cells(2, 6) = prix ' prix à appliquer
End If
Case 201 To 500
If EditionSup <> 1 Then
prix = 250: Cells(2, 6) = prix ' prix à appliquer
Else
prix = 280: Cells(2, 6) = prix ' prix à appliquer
End If


Case 501 To 1000

' etc
End Select

Case 5001 To 10000
' etc
End Select



Case "SUPERIEUR"
'etc
Case "EXCELLENCE"
'etc
End Select

Case "PRODUIT2"
End Select


End Sub


Cordialement Patrice67
0
Je ne bégaye pas, mais comme je ne voyais pas mon message je l'ai renvoyé.
Si tu as un exemple de grille tarifaire tu peux la déposer à http://www.cijoint.fr

Patrice67
0
Bonjour Patrice,

J'ai déposé l'exemple de grille tarifaire ainsi qu'un exemple de scénario sur ci-joint, voici le lien :

http://www.cijoint.fr/cjlink.php?file=cj201012/cijSfdFAfO.xls

Je t'ai précisé les calculs des coûts en-dessous de la grille scénario. Si tu as encore des questions n'hésite pas et si tu n'y arrive pas n'hésite pas à laisser tomber, j'utiliserai ma solution provisoire et ça sera très bien aussi.

Merci encore de ton aide,

A bientôt
0
Bonsoir Sassou

C'est bien un fichier excel 2007, il suffit de remplacer l'extension .zip par .xlsm
Je ne l'avais pas zippé et je ne sais pas pourquoi il a changé d'extension.

Si tu dezipes ça démonte le fichier Excel. Tu vois tous les fichiers qui composent le fichier final.

Si tu n'yarrives pas je le reposterai.

A+ Patrice67
0
Victoire !!! Merci pour ton aide Patrice ! J'ai effectivement réussi à ouvrir le fichier et à faire fonctionner la Macro.
Concernant le calcul du prix fixe, je trouve à peu près le même résultat (décalage d'environs 4€) mais ça doit être dû aux arrondits des volumes. De toute façon à cette échelle c'est plutôt dérisoire.

Je suis impressionnée par le travail que tu as réalisé et surtout la rapidité avec laquelle tu manipules les codes. Même si j'avais commencé la semaine dernière à étudier les macros, je n'y serais pas arrivée avant au moins 1 mois ^^...

Donc si je comrpends bien, je peux maintenant importer la macro dans le fichier d'une autre grille tarifaire ou encore modifier le scénario et j'obtiendrai toujours le resultat escompté.

Mais est-ce que le résultat donné par la macro s'inscrit dans une cellule normalement ?

Maintenant je vais regarder ta macro de plus près et essayer de comprendre comment tu l'as construit ;)

Merci encore, à bientôt
0
Ca m'a fait plaisir que ça te convenait.
Je te donne des réponses et une explication pour que tu puisses aller plus vite. Elles sont dans dans ce fichier:
http://www.cijoint.fr/cjlink.php?file=cj201012/cij7t0KCFz.doc
Cordialement
Patrice67
0