Décomposition d'une Largeur total en Lames
Bonjour,
Pouvez-vous m’aider à créer un programme excel pour obtenir la décomposition d’une « Largeur C.Batt » en lames selon certaines règles ?
Information code :
Le programme Excel doit :
- Les valeurs de « Largeur C.Batt » sont dans la colonne C et commencent à la cellule C7 de la feuille "12 vtx". (La « Largeur C.Batt » est et seras toujours un multiples de 5)
- Les valeurs de Lame 1 sont dans la colonne F et commencent à la cellule F7 de la feuille "12 vtx".
- Les valeurs de Lame 2 sont dans la colonne G et commencent à la cellule G7 de la feuille "12 vtx".
- Les valeurs de Lame 3 sont dans la colonne H et commencent à la cellule H7 de la feuille "12 vtx".
- Les valeurs de Lame 4 sont dans la colonne I et commencent à la cellule I7 de la feuille "12 vtx".
- Les valeurs de Lame 5 sont dans la colonne J et commencent à la cellule J7 de la feuille "12 vtx".
- Les valeurs de Lame 6 sont dans la colonne K et commencent à la cellule K7 de la feuille "12 vtx".
Pour les lignes « Largeur C.Batt », la colonne C permettras de calculer les valeurs de F, G, H, I, J, K de la même ligne, exemple :
La valeur « Largeur C.Batt » dans la cellule C7 permettras d’obtenir les valeurs des lames F7, G7, H7, I7, J7, K7.
Le programme doit effectuer ces calculs sur toutes les lignes ou une « Largeur C.Batt » est rentrés
Règle 1 :
La somme des valeurs des lames (Lame 1, Lame 2, Lame 3, Lame 4, Lame 5, Lame 6) doit égaler la valeur d'entrée « Largeur C.Batt » (« Largeur C.Batt » = Lame 1 + Lame 2 + Lame 3 + Lame 4 + Lame 5 + Lame 6).
Règle 2 :
Les longueurs des lames calculer (valeurs des lames) doivent être des entiers multiples de 5 (exemple 5,10,15,20,25,30…), supérieures à 0, et ne peuvent pas être négatives.
Règle 3 :
Les lames doivent avoir des longueurs presque identiques, avec des intervalles entre chaque paire de lames minimes (l'écart entre la lame 1 et la 2 doit être minime ; l'écart entre la lame 2 et la 3 doit être minime ; l'écart entre la lame 3 et la 4 doit être minime ; l'écart entre la lame 4 et la 5 doit être minime ; l'écart entre la lame 5 et la 6 doit être minime).
Règle 4 :
Les écarts entre les lames 2/3 ;3/4 ;4/5 ;5/6 doivent être similaire seul l’écart des lames 1/2 peut être différent si cela est nécessaire. Néanmoins il faut favoriser des écarts similaires entres chaque lame.
Règle 5 :
- L'intervalle doit être d'au moins 15 (pour les lames 2/3 ;3/4 ;4/5 ;5/6) et peut varier en fonction de la valeur de « Largeur C.Batt » donnée, mais cet intervalle doit être un multiple de 5.
- L'intervalle doit être d'au moins 10 (pour les lame 1/2) et peut varier en fonction de la valeur de « Largeur C.Batt » donnée, mais cet intervalle doit être un multiple de 5.
Exemple pour une « Largeur C.Batt » de 695 (aide à la compréhension à ne pas intégrer dans le programme comme source) :
Lames 1 = 150 ; Lames 2 = 140 ; Lames 3 = 125 ; Lames 4 = 110 ; Lames 5 = 95 ; Lames 6 = 75
Ecart lames 2/3 ;3/4 ;4/5 ;5/6 = 20
Ecart lames 1/2 = 10
Exemple pour une « Largeur C.Batt » de 700 (aide à la compréhension à ne pas intégrer dans le programme comme source) :
Lames 1 = 150 ; Lames 2 = 140 ; Lames 3 = 125 ; Lames 4 = 110 ; Lames 5 = 95 ; Lames 6 = 80
Ecart lames 2/3 ;3/4 ;4/5 ;5/6 = 15
Ecart lames 1/2 = 10
Règle 5 :
La structure des lames est la suivante :
- La lame 1 doit être la plus grande de toutes les lames et ne peut pas avoir une valeur nulle ou négative.
- La lame 1 doit être plus grande que la lame 2, qui elle-même ne peut pas avoir une valeur nulle ou négative.
- La lame 2 doit être plus grande que la lame 3, qui ne peut pas avoir une valeur nulle ou négative non plus.
- La lame 3 doit être plus grande que la lame 4, sans aucune de ces lames pouvant avoir une valeur nulle ou négative.
- La lame 4 doit être plus grande que la lame 5, qui elle-même ne peut pas avoir une valeur nulle ou négative.
- La lame 5 doit être plus grande que la lame 6, et aucune de ces lames ne peut avoir une valeur nulle ou négative.
Règle 6 :
La longueur de la lame 6 ne doit pas être inférieure à 75. La lame 6 doit être optimisée de manière à ce que les intervalles entre chaque lame se rapprochent le plus possible de 15.
Voici l'un des programmes VBA que j'ai réalisés. Cependant, il ne fonctionne pas comme prévu, et je n'arrive pas à obtenir les résultats que je recherche. Pourriez-vous m'aider ? Je suis un peu bloqué sur la manière de résoudre ce problème.
Il est peut être plus intéressant de repartir de 0 car il mes programme créer ne sont pas forcément bien fait.
Sub CalculerLames()
Dim ws As Worksheet
Dim i As Long
Dim LargeurCBatt As Double
Dim Lame1 As Double, Lame2 As Double, Lame3 As Double, Lame4 As Double, Lame5 As Double, Lame6 As Double
Dim MinDiff As Double
Dim Interval As Double
' Spécifiez la feuille de calcul "12 vtx"
Set ws = ThisWorkbook.Sheets("12 vtx")
' Commencez à partir de la ligne 7 pour les LargeurCBatt
For i = 7 To ws.Cells(Rows.Count, "B").End(xlUp).Row
LargeurCBatt = ws.Cells(i, "B").Value
' Vérification de la règle 3
If LargeurCBatt >= 80 Then
' Vérification de la règle 4
If LargeurCBatt Mod 5 = 0 And LFR > 0 Then
' Initialisation de l'intervalle
Interval = 15
Do
' Calcul des lames
Lame6 = 80
Lame5 = Lame6 + Interval
Lame4 = Lame5 + Interval
Lame3 = Lame4 + Interval
Lame2 = Lame3 + Interval
Lame1 = LargeurCBatt - (Lame2 + Lame3 + Lame4 + Lame5 + Lame6)
' Vérification de la règle 5
If Lame1 > Lame2 And Lame2 > Lame3 And Lame3 > Lame4 And Lame4 > Lame5 And Lame5 > Lame6 Then
' Vérification de la règle 6
MinDiff = Application.WorksheetFunction.Min(Lame1 - Lame2, Lame2 - Lame3, Lame3 - Lame4, Lame4 - Lame5, Lame5 - Lame6)
' Assure l'intervalle entre chaque lame est de 15
If Interval >= 15 And MinDiff <= 1 Then
' Assure que l'intervalle est un multiple de 5
If Interval Mod 5 = 0 Then
' Écrire les valeurs des lames dans la feuille
ws.Cells(i, "D").Value = Lame1
ws.Cells(i, "E").Value = Lame2
ws.Cells(i, "F").Value = Lame3
ws.Cells(i, "G").Value = Lame4
ws.Cells(i, "H").Value = Lame5
ws.Cells(i, "I").Value = Lame6
End If
End If
End If
' Augmenter l'intervalle si les règles ne sont pas satisfaites
Interval = Interval + 5
Loop
End If
End If
Next i
End SubLe deuxième essaie :Sub RemplirLames()
Dim ws As Worksheet
Dim ligne As Integer
Dim LargeurCBatt As Double
Dim lame1 As Double
Dim lame2 As Double
Dim lame3 As Double
Dim lame4 As Double
Dim lame5 As Double
Dim lame6 As Double
Dim y As Double
' Référence à la feuille "12 vtx"
Set ws = ThisWorkbook.Sheets("12 vtx")
' Parcours des lignes 7 à 10 de la colonne B
For ligne = 7 To 10
' Lire la valeur de LargeurCBatt depuis la colonne B
LargeurCBatt = ws.Cells(ligne, 2).Value
' Initialiser les valeurs des lames à 0
lame1 = 0
lame2 = 0
lame3 = 0
lame4 = 0
lame5 = 0
lame6 = 0
' Calcul de lame1 en fonction de LargeurCBatt
lame1 = LargeurCBatt
' Calcul de l'intervalle y
y = 15 ' Valeur initiale de l'intervalle
' Calcul de lame2
Do
lame2 = lame1 - y
y = y + 5
Loop Until (lame1 - lame2) Mod 6 = 0 And (lame1 - lame2) Mod 5 = 0
' Calcul des autres lames en fonction de l'intervalle y
lame3 = lame2 - y
lame4 = lame3 - y
lame5 = lame4 - y
lame6 = lame5 - y
' Ajustement de lame6 si elle est inférieure à 80
If lame6 < 80 Then
lame6 = 80
End If
' Écrire les valeurs calculées dans les colonnes D à I
ws.Cells(ligne, 4).Value = lame1
ws.Cells(ligne, 5).Value = lame2
ws.Cells(ligne, 6).Value = lame3
ws.Cells(ligne, 7).Value = lame4
ws.Cells(ligne, 8).Value = lame5
ws.Cells(ligne, 9).Value = lame6
Next ligne
End Sub