Besoin d'aide pour des codes

lina_bou13

XLDnaute Nouveau
Bonsoir , je reviens vers vous
mon encadreur m'a donné une application que je dois présenter au jury lors de ma soutenance, et je n'arrive pas à comprendre exactement le code :(
Est ce que quelqu'un parmi vous pourrez m'expliquer étape par étape le code? :( :(
Je suis vraiment débutante en VBA , et je galère ma soutenance est dans pas très longtemps je suis en stress total :(
 

Fichiers joints

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

@lina_bou13
Est ce que quelqu'un* parmi vous pourrez m'expliquer étape par étape le code? :( :(
Ce quelqu'un ne devrait-il pas être ton encadreur ?

J'ai ouvert ta PJ et vu le nombre de modules (3) sans compter les procédures dans les feuilles, cela fait beaucoup de codes à commenter

Sinon on peut lire dans le code VBA
'Programmé par Patrick V******x
(C'est ton encadreur ? ou un autre personne ? Si oui tu la connais? Si oui c'est elle la mieux placer pour t'aider)

Le code est déjà commenté.

Où* exactement cela coince pour toi ?
(*: citer le nom du module, citer le nom de la procédure)

[avis personnel]
Si tu débutes en VBA, il est très étonnant qu'on te donne un code de cet acabit ?!?
Petite question indiscrète: quelles études implique un soutenance avec du VBA dedans ? ;)
[*avis personnel]
 

lina_bou13

XLDnaute Nouveau
Bonjour le fil, le forum

@lina_bou13

Ce quelqu'un ne devrait-il pas être ton encadreur ?

J'ai ouvert ta PJ et vu le nombre de modules (3) sans compter les procédures dans les feuilles, cela fait beaucoup de codes à commenter

Sinon on peut lire dans le code VBA
'Programmé par Patrick V******x
(C'est ton encadreur ? ou un autre personne ? Si oui tu la connais? Si oui c'est elle la mieux placer pour t'aider)

Le code est déjà commenté.

Où* exactement cela coince pour toi ?
(*: citer le nom du module, citer le nom de la procédure)

[avis personnel]
Si tu débutes en VBA, il est très étonnant qu'on te donne un code de cet acabit ?!?
Petite question indiscrète: quelles études implique un soutenance avec du VBA dedans ? ;)
[*avis personnel]

Non ce n'est pas mon encadreur qui a fait le code malheureusement, et il nous a donné le soin à moi et ma binôme de comprendre le programme seules :/ on galère vraiment, je ne connais pas la personne :(
Je suis étudiante en génie logistique et transport et mon thème est amélioration des tournées au moyen d'excel.


Si vous pouvez j'aimerai bien comprendre au moins la partie des résultats comment qu'il arrive a calculer le z*.
Merci quand même
 

Staple1600

XLDnaute Barbatruc
Re

Comme spécifié précédemment
Où* exactement cela coince pour toi ?
(*: citer le nom du module, citer le nom de la procédure)
NB: Tu as remarqué que le Solveur d'Excel* est utilisé par le code VBA?

*: voir ici pour plus d'explications
 
Dernière édition:

lina_bou13

XLDnaute Nouveau
Oui j'avais compris quil utilisait le silver.
J'aimerai bien comprendre le module InterpreterSolution si possible
 

Staple1600

XLDnaute Barbatruc
Re,

@lina_bou13
Tu es sure?
Parce que dans ce module, il n'y a que cette procédure: Sub PresenterSolution()
Qui comme son nom l'indique ne fait que mettre en forme les données..
 

lina_bou13

XLDnaute Nouveau
Code:
Sub PresenterSolution()
Dim c As Object
Dim i As Integer, j As Integer

'Insérer le titre du tableau.
Sheets("Données").Select
Cells(BasTabD + 5, 1).Value = "Le tableau suivant décrit un plan optimal de transport."
Cells(BasTabD + 5, 1).Select
Selection.Font.Bold = True
With Selection.Font
    .Name = "Arial":        .Size = 12:                          .Strikethrough = False
    .Superscript = False:   .Subscript = False:                  .OutlineFont = False
    .Shadow = False:        .Underline = xlUnderlineStyleNone:   .ColorIndex = 3
End With

'Copier le tableau.
Range(Cells(DebTabD, 1), Cells(BasTabD + 1, DroiteTabD + 1)).Select
Selection.Copy
Cells(BasTabD + 6, 1).Select
ActiveSheet.Paste
   
If DispT > DemT Then
    'Il faut insérer une colonne pour la destination fictive.
    Range(Cells(BasTabD + 6, 1 + N), Cells(BasTabD + 6 + M + 1, 1 + N)).Select
    Selection.Cut
    Cells(BasTabD + 6, 2 + N).Select
    ActiveSheet.Paste
    Range(Cells(BasTabD + 6, 3), Cells(BasTabD + 6 + M + 1, 3)).Select
    Selection.Copy
    Cells(BasTabD + 6, 1 + N).Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Cells(BasTabD + 6, 1 + N).Value = "Disp. résiduelle"
    Cells(1, 1 + N).Select
    Selection.ColumnWidth = 14.57
    Cells(BasTabD + 6 + M + 1, 1 + N).Value = DispT - DemT
End If

If DemT > DispT Then
    'Il faut insérer une ligne pour l'origine virtuelle.
    Cells(BasTabD + 6 + M, 1).Select
    Selection.EntireRow.Insert
    Range(Cells(BasTabD + 6 + M - 2, 1), Cells(BasTabD + 6 + M - 2, 2 + N)).Select
    Selection.Copy
    Range(Cells(BasTabD + 6 + M - 1, 1), Cells(BasTabD + 6 + M - 1, 2 + N)).Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Cells(BasTabD + 6 + M, 1).Value = "Dem. non satisfaite"
    Cells(BasTabD + 6 + M, 2 + N).Value = DemT - DispT

End If

'Insérer la valeur dans le coin inférieur droit.
Cells(BasTabD + 7 + M, 2 + N).Value = Application.WorksheetFunction.Max(DemT, DispT)
Cells(BasTabD + 7 + M, 2 + N).Select
With Selection.Interior
    .ColorIndex = 37
    .Pattern = xlSolid
End With
With Selection.Borders(xlEdgeLeft)
    .LineStyle = xlContinuous
    .Weight = xlMedium
    .ColorIndex = xlAutomatic
End With

'Insérer les valeurs optimales des variables.
i = 1: j = 1
For Each c In Range("xij")
    Cells(BasTabD + 6 + j, 1 + i).Value = c.Value
    Cells(BasTabD + 6 + j, 1 + i).Select
    ActiveCell.NumberFormat = "0"                                            'Afficher avec 0 décimale.
    If i = N Then
        j = j + 1
        i = 0
    End If
    i = i + 1
Next c

'Insérer la valeur optimale z* de la fonction-objectif.
Select Case (Sheets("Données").cboMaxMin.Value)
    Case "Max"
        Cells(BasTabD + 8 + M, 1).Select
        ActiveCell.FormulaR1C1 = "Profit maximal :      z*  ="
    Case "Min"
        Cells(BasTabD + 8 + M, 1).Select
        ActiveCell.FormulaR1C1 = " Coût minimal :     z*  ="
End Select
Cells(BasTabD + 8 + M, 1).Select
Selection.Font.Bold = True
Cells(BasTabD + 8 + M, 3).Value = Range("z").Value
Range(Cells(BasTabD + 8 + M, 1), Cells(BasTabD + 8 + M, 3)).Select
Selection.RowHeight = 18
Selection.Interior.ColorIndex = xlNone
Selection.Font.Bold = True
With Selection.Font
    .Name = "Arial":    .Size = 12
End With
Cells(BasTabD + 8 + M, 3).Select
Selection.Font.ColorIndex = 3
With Selection
    .HorizontalAlignment = xlCenter
End With

Cells(BasTabD + 8 + M, 3).Select
End Sub
Re,

@lina_bou13
Tu es sure?
Parce que dans ce module, il n'y a que cette procédure: Sub PresenterSolution()
Qui comme son nom l'indique ne fait que mettre en forme les données..
 

Staple1600

XLDnaute Barbatruc
Re

???
Oui la macro, je l'ai lu (et même allégée un chouia en supprimant ici et là quelque Select)
VB:
Sub PresenterSolution()
Dim c As Object
Dim i As Integer, j As Integer
'Insérer le titre du tableau.
With Sheets("Données").Cells(BasTabD + 5, 1)
  .Value = "Le tableau suivant décrit un plan optimal de transport."
  .Font.Bold = True
  .Font.Name = "Arial"
  .Font.Size = 12
  .Font.ColorIndex = 3
End With
'Copier le tableau.
Range(Cells(DebTabD, 1), Cells(BasTabD + 1, DroiteTabD + 1)).Copy
Cells(BasTabD + 6, 1).Select
ActiveSheet.Paste
If DispT > DemT Then
'Il faut insérer une colonne pour la destination fictive.
    Range(Cells(BasTabD + 6, 1 + N), Cells(BasTabD + 6 + M + 1, 1 + N)).Cut
    Cells(BasTabD + 6, 2 + N).Select
    ActiveSheet.Paste
    Range(Cells(BasTabD + 6, 3), Cells(BasTabD + 6 + M + 1, 3)).Copy
    Cells(BasTabD + 6, 1 + N).PasteSpecial Paste:=xlPasteFormats
    Cells(BasTabD + 6, 1 + N) = "Disp. résiduelle"
    Cells(1, 1 + N).ColumnWidth = 14.57
    Cells(BasTabD + 6 + M + 1, 1 + N).Value = DispT - DemT
End If
If DemT > DispT Then
'Il faut insérer une ligne pour l'origine virtuelle.
    Cells(BasTabD + 6 + M, 1).Select
    Selection.EntireRow.Insert
    Range(Cells(BasTabD + 6 + M - 2, 1), Cells(BasTabD + 6 + M - 2, 2 + N)).Copy
    Range(Cells(BasTabD + 6 + M - 1, 1), Cells(BasTabD + 6 + M - 1, 2 + N)).PasteSpecial Paste:=xlPasteFormats
    Cells(BasTabD + 6 + M, 1).Value = "Dem. non satisfaite"
    Cells(BasTabD + 6 + M, 2 + N).Value = DemT - DispT
End If
'Insérer la valeur dans le coin inférieur droit.
Cells(BasTabD + 7 + M, 2 + N).Value = Application.WorksheetFunction.Max(DemT, DispT)
With Cells(BasTabD + 7 + M, 2 + N).Interior
    .ColorIndex = 37
    .Pattern = xlSolid
End With
With Cells(BasTabD + 7 + M, 2 + N).Borders(xlEdgeLeft)
    .LineStyle = xlContinuous
    .Weight = xlMedium
    .ColorIndex = xlAutomatic
End With
'Insérer les valeurs optimales des variables.
i = 1: j = 1
For Each c In Range("xij")
    Cells(BasTabD + 6 + j, 1 + i).Value = c.Value
    Cells(BasTabD + 6 + j, 1 + i).NumberFormat = "0" 'Afficher avec 0 décimale.
    If i = N Then
        j = j + 1
        i = 0
    End If
    i = i + 1
Next c
'Insérer la valeur optimale z* de la fonction-objectif.
Select Case (Sheets("Données").cboMaxMin.Value)
    Case "Max"
        Cells(BasTabD + 8 + M, 1) = "Profit maximal :      z*  ="
    Case "Min"
        Cells(BasTabD + 8 + M, 1) = " Coût minimal :     z*  ="
End Select
Cells(BasTabD + 8 + M, 1).Font.Bold = True
Cells(BasTabD + 8 + M, 3).Value = Range("z").Value
With Range(Cells(BasTabD + 8 + M, 1), Cells(BasTabD + 8 + M, 3))
  .RowHeight = 18
  .Interior.ColorIndex = xlNone
  .Font.Bold = True
  .Font.Name = "Arial"
  .Font.Size = 12
End With
Cells(BasTabD + 8 + M, 3).Font.ColorIndex = 3
Cells(BasTabD + 8 + M, 3).HorizontalAlignment = xlCenter
Cells(BasTabD + 8 + M, 3).Select
End Sub
Je repose ma question.
Cette macro ne fait que de la "mise en forme"
(Choix de taille de la police, de la couleur etc...)
Ce n'est pas "le coeur" du programme.
 

Dranreb

XLDnaute Barbatruc
Bonjour à tous.
À mon avis vous auriez plus de chance de comprendre ce qu'elle fait en cherchant les infos et le résultat obtenu par le solveur dans l'autre feuille
Edition: Oui, bonjour Staple1600
 

Staple1600

XLDnaute Barbatruc
Re

@lina_bou13
En complément de ce qu'a dit Dranreb, tu as vu également que les feuilles contenait du code VBA?

Et ce que j'appelle "le cœur" pourrait être cette procédure, non ?
Sub Resoudre() (Dans le module nommé: Model)
 

lina_bou13

XLDnaute Nouveau
Re,
Je n'avais pas remarqué que les pages contenaient des codes non, merci de me l'avoir dis.
Est ce que vous pourriez me l'expliquer la procédure dans ce cas? :(

PS* Désolée d'être si lourde je vous jure je suis en stresse total :(
 

Staple1600

XLDnaute Barbatruc
Re

@lina_bou13
La première chose à faire pour déstresser, c'est de parler avec ton encadreur des difficultés rencontrées en étudiant ce fichier.

Pour le reste, qu'est ce que tu ne comprends pas dans la macro Resoudre ?
(Tu as été voir le lien du message#4 qui explique ce qu'est le Solveur Excel ?)
 

lina_bou13

XLDnaute Nouveau
Ouii,
donc si je comprends bien c'est le solver qui fait le boulot ici, il n'a mis aucune formule ou méthode ?
Parce qu'à première vue , j'ai cru qu'il utilisait la méthode Stepping-Stone si vous connaissez , donc je voulais savoir comment il fait pour trouver les résultats voila.
 

Dranreb

XLDnaute Barbatruc
C'est que je ne comprend pas bien le principe. Mais j'ai vu des formules. Des SOMMEPROD notamment. Et une cellule nommée "z" dont il cherche le minimum en modifiant des valeurs dans une bande noire en bas et en respectant des valeurs dans une colonne à droite. Je dis ça de mémoire car je ne l'ai plus ré ouvert. Je l'ai ouvert plusieurs fois, puis refermé, ne comprenant pas très bien ce que signifient ces chiffres ni ce qu'on cherche.
 

lina_bou13

XLDnaute Nouveau
C'est que je ne comprend pas bien le principe. Mais j'ai vu des formules. Des SOMMEPROD notamment. Et une cellule nommée "z" dont il cherche le minimum en respectant des valeurs dans une colonne à droite. Je dis ça de mémoire car je ne l'ai plus ré ouvert. Je l'ai ouvert plusieurs fois, puis refermé, ne comprenant pas très bien ce que signifient ces chiffres ni ce qu'on cherche.
Il cherche à minimiser les coûts de transport ou maximiser le profit d'une entreprise. Le z* est le résultat de la minimisation ou la maximisation qu'il fait.
 

Staple1600

XLDnaute Barbatruc
Re, Bonsoir Dranreb

@lina_bou13
Tout ce qui concerne le Solveur est ici, non ?
VB:
Sub Resoudre()
Dim symbole As Integer, i As Integer, j As Integer
Dim c As Object

Sheets("Modèle").Select
'ajout staple
'appelle VersionSolveur pour savoir lequel charger selon version Excel
Call VersionSolveur

'Spécifier les contraintes technologiques.
Application.ReferenceStyle = xlR1C1
ActiveWorkbook.Names.Add Name:="MD", RefersToR1C1:= _
     "=R" & DebTabM & "C" & NbVar + 4 & ":R" & DebTabM + M + N - 1 & "C" & NbVar + 4
Application.Run SolverName & "SolverAdd", _
     "R" & DebTabM & "C" & NbVar + 2 & ":R" & DebTabM + M + N - 1 & "C" & NbVar + 2, 2, "MD"

'Spécifier les options du solveur.
'ajout staple
' il faut décortiquer les parametres de cette ligne de syntaxe
'Application.Run SolverName & "SolverOptions" ....
If OfficeVersion <= 12 Then
     Application.Run SolverName & "SolverOptions", 10000, 10000, 0.000001, True, False, 1, 1, 1, 0, _
                           False, 0.0001, True
ElseIf OfficeVersion >= 14 Then
     Application.Run SolverName & "SolverOptions", 10000, 10000, 0.000001, True, False, 1, 1, 1, 0, _
                           False, 0.0001, True, 500, 0, True, False, 0.6, 10000, 1000, False, 3600
Else
     MsgBox " Version d'Excel non supportée par ce gabarit."
End If
Application.Run SolverName & "SolverSolve", False, False

Application.ReferenceStyle = xlA1
Call PresenterSolution
End Sub
NB: Egalement voir comment est initialisé le solveur dans la macro VersionSolveur

Ce lien devrait éclairer ta lanterne ;)
https://www.solver.com/excel-solver-solverok-function
 

Dranreb

XLDnaute Barbatruc
Bonjour
Il cherche à minimiser les coûts de transport ou maximiser le profit d'une entreprise. Le z* est le résultat de la minimisation ou la maximisation qu'il fait.
Ça j'avais compris, je ne suis pas idiot. Mais pour y arriver concrètement, il faudra ensuite pratiquer une série de chiffres produits, comme ce minimum, sur fond noir, qu'on cherchait aussi, et même principalement. Ce sont ceux là dont j'ignore ce qu'ils signifient.
 
Dernière édition:

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas