cacul TextBox / ComboBox

filierfilier

XLDnaute Junior
bonjour,
Je souhaite faire un cacul avec la valeur changeante inscrite dans un TextBox (Nombre_convive) pour effectuer une division sur les 8 Combobox (Quantités).

Voir Code
VB:
Private Sub UserForm_Initialize()
Me.Nature.Controls(0) = "Entrée"
Me.Nature.Controls(1) = "Plat"
Me.Nature.Controls(2) = "Légume"
Me.Nature.Controls(3) = "Fromage-Salade"
Me.Nature.Controls(4) = "Dessert"
Me.Nature.Controls(5) = "Dejeuner-Gouter"
Me.Nature.Controls(6) = "Extra"
For I = 1 To 8
Me("Ingredient_" & I).RowSource = "nomproduits"
Me("Quantite_" & I).RowSource = "poidsproduits"
Next I
End Sub
Private Sub B_valider_Click()
Dim I As Integer, DLig As Long
For I = 1 To 8
'--- Contrôles ingredient et quantite
   If Me.Nom_de_la_recette = "" Then
      MsgBox "Saisir un nom de recette !"
      Me.Nom_de_la_recette.SetFocus
      Exit Sub
   End If
      If Me.Nombre_convive = "" Then
      MsgBox "vous devez saisir un nombre de convive !"
      Me.Nombre_convive.SetFocus
      Exit Sub
   End If
   
Next I
'--- Positionnement dans la base
With Sheets("Recettes")
.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Select
'--- Transfert Formulaire dans BD
ActiveCell.Offset(0, 1).Value = Me.Nom_de_la_recette
For I = 2 To 16 Step 2
ActiveCell.Offset(0, I).Value = Me("Ingredient_" & I / 2)
ActiveCell.Offset(0, 1 + I).Value = Me("Quantite_" & I / 2)
Next I
' Choix de la recette
For I = 1 To 7
If Me("OptionButton" & I) = True Then
ActiveCell.Value = Me("OptionButton" & I).Caption
' Inscrire le nom de la recette dans la listes des plats
' En partant du principe que les OptionButton sont dans le mêmes sens que sur la feuille : Liste des plats
With Sheets("Liste des Plats")
' Trouver la dernière ligne de la colonne concernée
DLig = .Cells(Rows.Count, I).End(xlUp).Row + 1
.Cells(DLig, I).Value = Me.Nom_de_la_recette

End With
' Sortir de la boucle
Exit For
End If
Next I
End With
   '--
   nettoie
End Sub
Sub nettoie()
  Me.Nom_de_la_recette = ""
  Me.Quantite_1 = ""
  Me.Quantite_2 = ""
  Me.Quantite_3 = ""
  Me.Quantite_4 = ""
  Me.Quantite_5 = ""
  Me.Quantite_6 = ""
  Me.Quantite_7 = ""
  Me.Quantite_8 = ""
  Me.Ingredient_1 = ""
  Me.Ingredient_2 = ""
  Me.Ingredient_3 = ""
  Me.Ingredient_4 = ""
  Me.Ingredient_5 = ""
  Me.Ingredient_6 = ""
  Me.Ingredient_7 = ""
  Me.Ingredient_8 = ""
  For Each c In Me.Nature.Controls
    c.Value = False
  Next c
Range("A2").Select
Application.ScreenUpdating = True
MsgBox "Votre recette est bien notée, " & Chr(13) & " vous pourrez la modifier si besoin plus tard ! " & Chr(13) & " " & Chr(13) & " Cliquez OK pour fermer le formulaire "
 Unload Me
End Sub
Private Sub B_annuler_Click()
  Unload Me
End Sub
Function OuiNon(valeur)
  OuiNon = IIf(valeur, "Oui", "Non")
End Function

Merci si ...
 

13GIBE59

XLDnaute Accro
Re : cacul TextBox / ComboBox

Bonjour filierfilier. :)

Je t'avoue ne pas avoir compris ta demande, qui doit être pourtant simple.
Pour te faire patienter, quelques lignes pour raccourcir ta sub nettoie():

Code:
Dim c As Control
  For Each c In Me.Controls
     Select Case TypeName(c)
        Case "TextBox"
          c.Value = ""
        Case "CheckBox"
          c.Value = False
        Case "ListBox", "ComboBox"
          c.ListIndex = -1
     End Select
  Next c

Si ça te convient, bien entendu.

A te lire.
Cordialement.
 

filierfilier

XLDnaute Junior
Re : cacul TextBox / ComboBox

Merci pour cette information, je vais tester. Je vous fournis quelques explications sur ma demande :
J'ai fait un formulaire pour enregistrer des recettes dans une base. La création se fait bien mais je pensai ajouter un comboBox avec une RowListe (Nombre_convive) qui me permettrai de noter n'importe qu'elle recette quelque qu'en soit le nombre.

Exemple j'ai une recette pour 4 personnes, je veux avec ce combobox mettre le résultat dans ma feuille pour une personne. Ce qui revient à diviser toutes mes quantités notées par ce Combobox. Si dans le nombre convive j'ai 4 et dans la quantité j'ai 400 , je veux diviser le 4/400 = ce qui devrai insérer dans ma feuille 100 (Fonction utile par la suite pour la création de commandes et menus).
VB:
Private Sub UserForm_Initialize()
Me.Nature.Controls(0) = "Entrée"
Me.Nature.Controls(1) = "Plat"
Me.Nature.Controls(2) = "Légume"
Me.Nature.Controls(3) = "Fromage-Salade"
Me.Nature.Controls(4) = "Dessert"
Me.Nature.Controls(5) = "Dejeuner-Gouter"
Me.Nature.Controls(6) = "Extra"
Me.Nombre_convive.RowSource = "Nombre_convive"
For I = 1 To 8
Me("Ingredient_" & I).RowSource = "nomproduits"
Me("Quantite_" & I).RowSource = "poidsproduits"
Next I
End Sub
Private Sub B_valider_Click()
Dim I As Integer, DLig As Long
For I = 1 To 8
'--- Contrôles ingredient et quantite
   If Me.Nom_de_la_recette = "" Then
      MsgBox "Saisir un nom de recette !"
      Me.Nom_de_la_recette.SetFocus
      Exit Sub
   End If
      If Me.Nombre_convive = "" Then
      MsgBox "vous devez saisir un nombre de convive !"
      Me.Nombre_convive.SetFocus
      Exit Sub
   End If
   
Next I
'--- Positionnement dans la base
With Sheets("Recettes")
.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Select
'--- Transfert Formulaire dans BD
ActiveCell.Offset(0, 1).Value = Me.Nom_de_la_recette
For I = 2 To 16 Step 2
ActiveCell.Offset(0, I).Value = Me("Ingredient_" & I / 2)

'Je voudrai effectuer une division des valeurs Me.Quantité (soit 8 valeurs) 
'soit directement dans chaque valeurs Combobox Me.quantité
'ou dans un TextBox supplémentaire afferant à chaque Quantités
'Ce qui voudrai donner de
'Diviser Me.Quantité (qui indique la quantité pour chaque produits) 
'par Me.Nombre_convive (qui indique le nombre de convives par recette)

ActiveCell.Offset(0, 1 + I).Value = Me("Quantite_" & I / 2)
Next I
' Choix de la recette
For I = 1 To 7
If Me("OptionButton" & I) = True Then
ActiveCell.Value = Me("OptionButton" & I).Caption
' Inscrire le nom de la recette dans la listes des plats
' En partant du principe que les OptionButton sont dans le mêmes sens que sur la feuille : Liste des plats
With Sheets("Liste des Plats")
' Trouver la dernière ligne de la colonne concernée
DLig = .Cells(Rows.Count, I).End(xlUp).Row + 1
.Cells(DLig, I).Value = Me.Nom_de_la_recette

End With
' Sortir de la boucle
Exit For
End If
Next I
End With
   '--
   nettoie
End Sub
 
Dernière édition:

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 520
dernier inscrit
Azise