XL 2016 Userform ajustement de nombre

plaiiz

XLDnaute Nouveau
Bonjour je recrée une discussion , car je n'est pas était très claire dans ce que je rechercher faire hier .
J'aimerai pouvoir modifier les proportions de la recette en ajustent le nombre de couvert par exemple cette recette et pour 12 personne , j'aimerai que si je met en ajustement 6personnes les proportions soit ajuster pour 6 . J'ai chercher sur le net et sur le site mais je n'est rien trouver de concret.
Cordialement
1619766301299.png
 

Pièces jointes

  • test.xlsm
    620.4 KB · Affichages: 13

Lolote83

XLDnaute Accro
Bonjour PLAIIZ,
Une simple règle de 3 au final.
En plaçant ce code cela devrait correspondre à ta demande
VB:
Private Sub TextBox23_Change()
    If TextBox23 = "" Then
        With ThisWorkbook.Sheets("Feuil1")
            no_Ligne = ComboBox2.ListIndex + 2
            For i = 1 To 22
                Me.Controls("TextBox" & i).Value = .Cells(no_Ligne, i + 1).Value
            Next
        End With
    Else
        TextBox11 = TextBox11 * TextBox23 / TextBox21
        TextBox12 = TextBox12 * TextBox23 / TextBox21
        TextBox13 = TextBox13 * TextBox23 / TextBox21
        TextBox14 = TextBox14 * TextBox23 / TextBox21
        'etc
        'etc
        'etc
        TextBox19 = TextBox19 * TextBox23 / TextBox21
        TextBox20 = TextBox20 * TextBox23 / TextBox21
    End If
End Sub
@+ Lolote83
 

plaiiz

XLDnaute Nouveau
Bonjour PLAIIZ,
Une simple règle de 3 au final.
En plaçant ce code cela devrait correspondre à ta demande
VB:
Private Sub TextBox23_Change()
    If TextBox23 = "" Then
        With ThisWorkbook.Sheets("Feuil1")
            no_Ligne = ComboBox2.ListIndex + 2
            For i = 1 To 22
                Me.Controls("TextBox" & i).Value = .Cells(no_Ligne, i + 1).Value
            Next
        End With
    Else
        TextBox11 = TextBox11 * TextBox23 / TextBox21
        TextBox12 = TextBox12 * TextBox23 / TextBox21
        TextBox13 = TextBox13 * TextBox23 / TextBox21
        TextBox14 = TextBox14 * TextBox23 / TextBox21
        'etc
        'etc
        'etc
        TextBox19 = TextBox19 * TextBox23 / TextBox21
        TextBox20 = TextBox20 * TextBox23 / TextBox21
    End If
End Sub
@+ Lolote83
Salut Lolote super merci j'ai compris comment marché ton code , par contre j'ai deux problème avec , si je prend exemple du screen du dessus lorsque j'ajuste a 11 couvert par ex il me marque 19,09 au lieux de m'affiché 229,16.
Mon second problème et que lorsque je n'est pas rempli toute les lignes d'ingrédients il m'affiche un message d'erreur vue que la ligne et vide , comment faire ?
 

Lolote83

XLDnaute Accro
Bonjour à tous,
Si tu n'arrive pas à importer le formulaire que nous a transmis Fanch55 (que je salue au passage), voici donc a nouveau le fichier avec son formulaire.
Voir Formulaire FicheTechnique2. Ton ancien a été renommé en FicheTechnique2_Old
OUPS. Pas raffraichi assez tot.
@+ Lolote83
 

Pièces jointes

  • Copie de PLAIZZ - test.xlsm
    714 KB · Affichages: 5

fanch55

XLDnaute Accro
il met met permission refuser pourquoi ?
La combobox ne doit pas avoir de rowsource renseignée .
Ci dessous le code corrigé pour forcer cela ( entre autre )
VB:
Dim Feuille As Worksheet
Dim Ligne   As Long
Dim I       As Integer

Private Sub UserForm_Initialize()
    Set Feuille = ThisWorkbook.Sheets("Feuil1")
    
  ' Chargement des intitulés dans la combobox2
    Ligne = Feuille.Cells(Feuille.Rows.Count, "A").End(xlUp).Row
    ComboBox2.RowSource = vbNullString
    ComboBox2.List = Feuille.Range("A2:A" & Ligne).Value
    
End Sub

Private Sub ComboBox2_Change()
  ' On va provoquer un calcul si ajustement > 0
    TextBox23_Change
End Sub

Private Sub CommandButton1_Click()
    If ComboBox2.Value = vbNullString Then
        MsgBox "Veuillez renseigner le champs intitulé de la recette "
    Else
        Dim Ligne As Integer
        If MsgBox("confirmez-vous l'ajout des données?", vbYesNo, "confirmation") = vbYes Then
            Feuille.Activate
            Ligne = Feuille.Cells(Feuille.Rows.Count, "A").End(xlUp).Row + 1
            Feuille.Cells(Ligne, 1) = ComboBox2.Value
            For I = 1 To 22
                Feuille.Cells(Ligne, I + 1) = Me.Controls("TextBox" & I).Value
            Next
            Unload Me
        End If
    End If
End Sub

Private Sub CommandButton2_Click()
    Unload Me
End Sub

Private Sub Charger()
    If Not ComboBox2.Value = vbNullString Then
        ' On charge toutes les cellules de la ligne
        ' correspondante à l'intitulé
        ' dans les textboxs séquentiels
        Ligne = ComboBox2.ListIndex + 2
        For I = 1 To 22
            Me.Controls("TextBox" & I) = Feuille.Cells(Ligne, I + 1)
        Next
        TextBox21_Change
    End If
End Sub

Private Sub CommandButton3_Click()
    Charger
End Sub

Private Sub TextBox21_Change()
  ' La quantité de référence sera toujours égale à 1 au minimum
    If Val(TextBox21) < 1 Then TextBox21 = 1
End Sub

Private Sub TextBox23_Change()
    Charger
    If Val(TextBox23) > 0 Then
        For I = 11 To 20
            With Me.Controls("TextBox" & I)
                If Val(.Value) > 0 Then .Value = Application.WorksheetFunction.RoundUp(.Value * TextBox23 / TextBox21, 0)
            End With
        Next
    End If
End Sub
 
Haut Bas