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 Sub
Le 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
6abaque.xlsm (23.04 Ko)
Rechercher des sujets similaires à "decomposition largeur total lames"