Mise a jours controls en changeant la valeur Combo

Laisse moi rire

XLDnaute Occasionnel
Salut a toutes et tous

Je vous met le code car sinon cela ne passe pas en fichier joint, et même en supprimant tout pour y laisser le stricte nécessaire cela fait 55 Mo, je suis vraiment désolé.

Dans un module :

Option Explicit
Public TypeDeSoiree As Byte


Dans l'userform :

Option Explicit

Dim Plage, PlagePrix As Range
Dim A, B, C, D As Long
Dim WSDonnees, WSDonneesPrix As Worksheet
Dim PlageTypeDeSoirée As String
Dim L As Integer 'Déclaration de variable 'L' pour connaitre la Ligne Numéro

Private Sub cbxAccompteEuros_Change()

On Error Resume Next

If cbxAccompteEuros.Text = '' Then
txtAccompteFrancs = ''
End If
If cbxAccompteEuros = '' Then
lblAccompteFrancs.ForeColor = &H80000008
lblAccompteEuros.ForeColor = &H80000008
Else
lblAccompteFrancs.ForeColor = &HFF0000
lblAccompteEuros.ForeColor = &HFF0000
End If
If cbxAccompteEuros <> '' Then
txtSoldeEuros.Value = CDbl(txtPrixEuros) - CDbl(cbxAccompteEuros)
Else
txtSoldeEuros.Value = CDbl(txtPrixEuros)
End If

If cbxAccompteEuros <> '' Then
txtAccompteFrancs = CDbl(cbxAccompteEuros) * 6.55957
txtSoldeFrancs.Value = CDbl(txtPrixFrancs) - CDbl(txtAccompteFrancs)
Else
txtSoldeFrancs.Value = CDbl(txtPrixFrancs)
End If


lblAccompteEuros.Visible = True
txtAccompteFrancs.Visible = True
End Sub

Private Sub cbxReduction_Change()
On Error Resume Next
If cbxReduction = '' Then
txtMontantRemiseEuros = ''
txtMontantRemiseFrancs = ''
lblMontantRemiseEuros.Visible = False
lblMontantRemiseFrancs.Visible = False
txtMontantRemiseEuros.Visible = False
txtMontantRemiseFrancs.Visible = False
Else
lblMontantRemiseEuros.Visible = True
lblMontantRemiseFrancs.Visible = True
txtMontantRemiseEuros.Visible = True
txtMontantRemiseFrancs.Visible = True
End If
txtMontantRemiseEuros = CDbl(txtPrixEuros) * CDbl(cbxReduction) / 100
txtMontantRemiseFrancs = CDbl(txtMontantRemiseEuros) * 6.55957

If cbxReduction <> '' Then
txtSoldeEuros = CDbl(txtPrixEuros) - CDbl(cbxAccompteEuros) - CDbl(txtMontantRemiseEuros)
Else
txtSoldeEuros.Value = CDbl(txtPrixEuros) - CDbl(cbxAccompteEuros)
End If
If cbxReduction <> '' Then
txtSoldeFrancs = CDbl(txtPrixFrancs) - CDbl(txtAccompteFrancs) - CDbl(txtMontantRemiseFrancs)
Else
txtSoldeFrancs.Value = CDbl(txtPrixFrancs) - CDbl(cbxAccompteEuros)
End If
If cbxAccompteEuros <> '' Then
txtSoldeEuros = CDbl(txtPrixEuros) - CDbl(cbxAccompteEuros) - CDbl(txtMontantRemiseEuros)
Else
txtSoldeEuros.Value = CDbl(txtPrixEuros) - CDbl(txtMontantRemiseEuros)
End If

If cbxAccompteEuros <> '' Then
txtSoldeFrancs = CDbl(txtPrixFrancs) - CDbl(txtAccompteFrancs) - CDbl(txtMontantRemiseFrancs)
Else
txtSoldeFrancs.Value = CDbl(txtPrixFrancs) - CDbl(txtMontantRemiseFrancs)
End If

'txtSoldeEuros = CDbl(txtPrixEuros) - CDbl(cbxAccompteEuros) - CDbl(txtMontantRemiseEuros)
'txtSoldeFrancs = CDbl(txtPrixFrancs) - CDbl(txtAccompteFrancs) - CDbl(txtMontantRemiseFrancs)

End Sub


Private Sub cbxTypeDeSoiree_Change()
Set WSDonneesPrix = Sheets('Prix')
Set PlagePrix = WSDonneesPrix.Range('B4:B' & WSDonneesPrix.Range('D65535').End(xlUp).Row)
On Error Resume Next
D = PlagePrix.Find(What:=cbxTypeDeSoiree, LookAt:=xlWhole).Row
With WSDonneesPrix
txtPrixEuros = .Range('C' & D)
End With
If cbxTypeDeSoiree = '' Then
cbxAccompteEuros = ''
cbxReduction = ''
txtPrixFrancs = ''
txtPrixEuros = ''
txtAccompteFrancs = ''
txtSoldeFrancs = ''
txtSoldeEuros = ''
cbxAccompteEuros.Enabled = False
cbxReduction.Enabled = False
Else
cbxAccompteEuros.Enabled = True
cbxReduction.Enabled = True

End If

lblPrixFrancs.Visible = True
txtPrixFrancs.Visible = True
End Sub


Private Sub cmdQuitter_Click()
Unload Me
End Sub

Private Sub txtAccompteFrancs_Change()
On Error Resume Next
txtAccompteFrancs = Format(txtAccompteFrancs, '##,##0.00')
End Sub

Private Sub txtMontantRemiseEuros_Change()
txtMontantRemiseEuros = Format(txtMontantRemiseEuros, '##,##0.00')
End Sub

Private Sub txtMontantRemiseFrancs_Change()
txtMontantRemiseFrancs = Format(txtMontantRemiseFrancs, '##,##0.00')
End Sub

Private Sub txtPortableDeLaMariee_Change()
PhoneFormat txtPortableDeLaMariee
End Sub

Private Sub txtPortableDuMarie_Change()
PhoneFormat txtPortableDuMarie
End Sub

Private Sub txtPrixFrancs_Change()
txtPrixFrancs = Format(txtPrixFrancs, '##,##0.00')
End Sub

Private Sub txtDateDeLaPrestation_Change()
txtDateDeLaPrestation = Application.Proper(Format(Calendar1.Value, 'dddd d mmmm yyyy'))
End Sub

Private Sub txtDateDeLaPrestation_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Calendar1.Visible = True
End Sub

Private Sub txtSoldeFrancs_Change()

txtSoldeFrancs = Format(txtSoldeFrancs, '##,##0.00')

If txtSoldeFrancs > 0 Then
lblSoldeFrancs.ForeColor = &HFF&
lblSoldeEuros.ForeColor = &HFF&
Else
lblSoldeFrancs.ForeColor = &H80000008
lblSoldeEuros.ForeColor = &H80000008
End If

End Sub

Private Sub txtAccompteEuros_Change()

On Error Resume Next
txtAccompteEuros = Format(txtAccompteEuros, '##,##0.00')
txtSoldeEuros = CDbl(txtPrixEuros) - CDbl(txtAccompteEuros)
End Sub
Private Sub txtPrixEuros_Change()

On Error Resume Next

If txtPrixEuros <> '' Then
txtPrixFrancs = CDbl(txtPrixEuros) * 6.55957
If cbxAccompteEuros <> '' Then
txtSoldeEuros.Value = CDbl(txtPrixEuros) - CDbl(cbxAccompteEuros)
Else
txtSoldeEuros.Value = CDbl(txtPrixEuros)
End If
If cbxReduction <> '' Then
txtSoldeFrancs.Value = CDbl(txtPrixFrancs) - CDbl(txtAccompteFrancs) - CDbl(txtMontantRemiseEuros)
Else
txtSoldeFrancs.Value = CDbl(txtPrixFrancs)
End If
Else
txtPrixEuros = ''
If cbxAccompteEuros <> '' Then
txtSoldeEuros.Value = -CDbl(cbxAccompteEuros)
Else
txtSoldeEuros.Value = ''
End If
If cbxAccompteEuros <> '' Then
txtSoldeFrancs.Value = -CDbl(txtAccompteFrancs)
Else
txtSoldeFrancs.Value = ''
End If


End If

txtPrixEuros = Format(txtSoldeEuros, '##,##0.00')

lblAccompteFrancs.Visible = True
cbxAccompteEuros.Visible = True
lblSoldeFrancs.Visible = True
txtSoldeFrancs.Visible = True
lblPrixEuros.Visible = True
txtPrixEuros.Visible = True
lblSoldeEuros.Visible = True
txtSoldeEuros.Visible = True

End Sub
Private Sub txtSoldeEuros_Change()
On Error Resume Next
txtSoldeEuros = Format(txtSoldeEuros, '##,##0.00')
End Sub
Private Sub txtNomDuMarie_Change()
txtNomDuMarie.Value = UCase(txtNomDuMarie.Value)
End Sub
Private Sub txtPrenomDuMarie_Change()
txtPrenomDuMarie = Application.Proper(txtPrenomDuMarie)
End Sub
Private Sub txtNomDeLaMariee_Change()
txtNomDeLaMariee.Value = UCase(txtNomDeLaMariee.Value)
End Sub
Private Sub txtPrenomDeLaMariee_Change()
txtPrenomDeLaMariee = Application.Proper(txtPrenomDeLaMariee)
End Sub

Private Sub UserForm_Initialize()
Dim Ctrl As Control
'Ici je vide les Controls
For Each Ctrl In Me.Controls
If TypeOf Ctrl Is MSForms.TextBox Or TypeOf Ctrl Is MSForms.ComboBox Then
Ctrl = ''
End If
Next Ctrl

cbxAccompteEuros.Enabled = False
cbxReduction.Enabled = False
lblMontantRemiseEuros.Visible = False
lblMontantRemiseFrancs.Visible = False
txtMontantRemiseEuros.Visible = False
txtMontantRemiseFrancs.Visible = False

' Choix des Organisateurs, Nom des salles, Traiteurs, Type de soirée
Set WSDonneesPrix = Worksheets('Prix')
With WSDonneesPrix
PlageTypeDeSoirée = .Range('B4:B' & .Range('B2000').End(xlUp).Row).Address
End With
cbxTypeDeSoiree.RowSource = 'Prix!' & PlageTypeDeSoirée

' Choix de l'accompt
cbxAccompteEuros.AddItem '100,00'
cbxAccompteEuros.AddItem '200,00'
cbxAccompteEuros.AddItem '300,00'

'Réduction
cbxReduction.AddItem '10'
cbxReduction.AddItem '15'
cbxReduction.AddItem '20'

End Sub

Donc j'ai deux petits soucie :

Le premier :

Si je choisi un type de soirée et que je met sois un accompte, soit une réduction ou même les deux et que je veuille modifier le type de soirée les calculs me donnent des valeur qui n'on rien a voir.

Y'a t'il moyen d'y remedier ?

Le deuxième :

Cela est pour la valeur de l'accomte.

Pour le moment je passe par un ComboBox.Additem, mais cela serait il possible de faire en sorte que l'accompte ne dépasse pas la valeur du prix de départ.

Je vous remercie d'avance et m'excuse encore pour ne pas avoir mis de fichier joint, j'ai pourtant tout essayé,

Merci, G'Claire
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour G'Claire, bonjour le forum,

Pfff... pour vérifier tes soucis il faut se taper un UserForm, renommer les éléments comme toi sans savoir si c'est une combobox, une listbox... Pas glop pas glop...
Tu aurais pu faire un fichier exemple basé sur ton fichier avec l'UserForm déjà fait et quelques données d'exemple. Glop, glop... Là tout deviendrait limpide, lumineux. J'ai été clair G'Claire ?
 

Laisse moi rire

XLDnaute Occasionnel
Robert, le forum

Je suis désolé, mais j'avais tout tenté pour alléger le classeur, en supprimant tout ce qui était inutil, et pourtant le poids compressé était encore a 55 Mo.

Alors j'ai recréer le classeur, et la surprise il fait moins, je n'y comprends rien, mais cela passe.

Donc le voici, merci et encore 1000 excuses, G'Cliare [file name=ClasseurXLD.zip size=15580]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/ClasseurXLD.zip[/file]
 

Pièces jointes

  • ClasseurXLD.zip
    15.2 KB · Affichages: 15

Laisse moi rire

XLDnaute Occasionnel
Bonsoir le forum

J'ai oublié les explixations.

Donc :

1) Je choisi un type de soirée
2) Le prix s'affiche tout seul
3) S'il y a un accompte, je le choisie ou l'entre directement
4) S'il réduction possible, je la choisie ou le rentre.

Jusque la ca va, les problème :

1) Si je me suis trompé de type de soirée et que les deux ComboBox sont remplient (Même un des deux d'ailleurs), le recalcule ne se fait plus, et cela inscrit n'importe quoi.

2) Est il possible dans le ComboBox accompte que le choix ne soit pas suppérieur au prix de base.

Car pour le moment j'ai utilisé ComboBox.additem.

Merci, G'Claire
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonsoir G'Claire,

Désolé pour le retard mais je n'ai pas eu le temps de m'y mettre avant...
J'ai pas mal remanié tes codes mais je pense que ça devrait te convenir. Vérifie les calculs quand même car j'ai pas beaucoup fait tourner... Le seul truc qui me gêne c'est que comme la Combo des accomptes et tributaire du prix de la soirée, quand on change de type de soirée et qu'il y avait déjà un accompte, celui-ci est réinitalisé (vide). Mais j'ai eu beau essayer des tas de combines, avec ma méthode je n'y suis pas arrivé. Si c'était pour moi, je préfèrerais mettre un message avisant que l'accompte est trop élévé (ce qui arrrivera très rarement) que d'avoir à retaper l'accompte chaque fois que je change de type de soirée. Tu me diras ce que tu en penses...
[file name=ClasseurXLD_20051029005336.zip size=20636]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/ClasseurXLD_20051029005336.zip[/file]
 

Pièces jointes

  • ClasseurXLD_20051029005336.zip
    20.2 KB · Affichages: 24

Laisse moi rire

XLDnaute Occasionnel
Robert, le forum

Merci

Pour le moment, j'ai fait quelques essais fort conluant.

Je vais bien regarder.


Ta possibilité de message me parait être une bonne solution, ou je vais peu être simplifier et mettre a la place d'une ComboBox un TextBox, ou je saisirais directement le montant et là plus de blem.

Merci encore, G'Claire
 

Laisse moi rire

XLDnaute Occasionnel
Re

Donc, j'ai préférer mettre un TextBox pour l'accompte, mais je rencontre un petit souci bizard:

Voila ce que j'ai fait pour faire le test, afin d'éviter lors de la saisie de ne pas dépasser la valeur du prix de départ.

If txtAccompteEuros.Value > txtPrixEuros.Value Then
MsgBox 'Votre accompte est superieur au prix définie, veuiller revoir votre saisie', vbExclamation, 'ERREUR DE SAISIE'
txtAccompteEuros.SetFocus
Else
If txtAccompteEuros.Tag = '' Then
txtAccompteEuros.Tag = 0
txtAccompteFrancs.Tag = 0
Else
txtAccompteEuros.Tag = txtAccompteEuros.Value
txtAccompteFrancs.Tag = CDbl(txtAccompteEuros.Tag) * 6.55957
End If
End If

Mais si par exemple le prix de départ et de 381,12 € :

1) Je saisie : 382 , c'est ok, j'ai bien l'alerte.
2) Je saisie : 381,13, c'est ok, j'ai bien l'alerte.
5) Je saisie : 3810, c'est ok, j'ai bien l'alerte.
4) Si je saisie : 3800 à 3899, c'est plus ok, plus de message d'alerte

C'est bizard, que ne va t'il pas ?

Merci, G'Claire
 

Laisse moi rire

XLDnaute Occasionnel
Le forum

Je m'aperçois, que cela est plus compliqué, car :

si par exemple la valeur est de 381,12 €, je ne peu taper en premier chiffre que des valeurs inferieur ou égales a 3

Si la valeur est de 500 €, je ne pourrais taper en premier chiffre que des valeurs inferieurs ou égales a 5.

Je ne comprends pas pourquoi.

Merci, G'Claire
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Jacques,

J'ai adapté et je te propose une solution dans la pièce jointe. Le problème venait du fait que l'on faisait référence à la propriété Value alors qu'il fallait utiliser la propriété Tag. J 'ai rajouté un bout de code qui remplace le point par la virgule ce qui permet d'utiliser le point du pavé numérique comme séparatuer décimal. J'ai rangé aussi l'ordre des tabulations dans l'UserForm pour que ceux qui ont horreur de la souris (comme moi) puissent passer d'un champ à l'autre par la touche de tabulation TAB. J'ai fait un peu tourner et visiblement les calculs sont Ok mais vérifie quand même.
[file name=ClasseurXLD2.zip size=20806]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/ClasseurXLD2.zip[/file]
 

Pièces jointes

  • ClasseurXLD2.zip
    20.3 KB · Affichages: 19

Robert

XLDnaute Barbatruc
Repose en paix
Bonsoir Jacques, bonsoir le forum,

Pour ce qui est de l'ordre de Tabulation, dans l'userform entier il était fait, et/ou il se met directement sur le control au passage de la souris.

Je ne sais pas si c'est une question que tu poses ou une affirmation. Comme le doute m'habite j'y réponds : L'ordre des tabulations n'a justement rien à voir avec la souris. Il permet d'indiquer l'ordre des champs à atteindre à l'aide de la touche de tabulation Tab.
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 827
Messages
2 092 557
Membres
105 451
dernier inscrit
mariane_lp