Bonjour à tous,
voilà j'ai une fonction dans un USF visant à sommeproder un numéro de chambre (chambre_recherchée as string dimé en Option explicit) avec 2 colonnes d'un tableau dans une feuille annexe désignée à l'enregistrement de reservations.
Cette chambre_recherchée est sélectionnée à l'aide d'un Combobox avec mes 5 chambres en list elles même pompée sur une autre feuille annexe.
Ce Combo alimente une textboxChambre servant à diffuser d'autres renseignement de l'USF.
Après saisi dans l'USF une date d'arrivée (textbox1), un nombre de nuitée (textbox2), une date de départ se calcule en textbox3.value = Format(CDate(TextBox1.Value) + CLng(TextBox2.Value), "dd/mm/yyyy")
A la sélection de la chambre en combobox2 une textbox Dispo doit me retourner si elle est vacante sur la période saise.
le "mise a jour" = false me permet d'eviter les erreurs durant la saisie de date dans textbox1 (date d'arrivée)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Function Conflit() Dim Formule As String, Résultat As Long If Mise_à_Jour = False Then '=SOMMEPROD((201=RESA_CHAMBRE)*(FK$1>=RESA_ARRIVEE)*(FK$1<RESA_DEPART)) Formule = "=SUMPRODUCT((""" & chambre_recherchée & """=RESA[nmr chambre])*(" & Format(TextBox1.Value, "00000") & ">=RESA[date arrivee])*( " & Format(TextBox1.Value, "00000") & "<RESA[date depart]))" Résultat = Evaluate(Formule) Formule = "=SUMPRODUCT((""" & chambre_recherchée & """=RESA[nmr chambre])*(" & Format(TextBox3.Value, "00000") & ">RESA[date arrivee])*(" & Format(TextBox3.Value, "00000") & "<=RESA[date depart))" Résultat = Résultat + Evaluate(Formule) Formule = "=SUMPRODUCT((""" & chambre_recherchée & """=RESA[nmr chambre])*(" & Format(TextBox1.Value, "00000") & ">=RESA[date arrivee])*(" & Format(TextBox3.Value, "00000") & "<=RESA[date depart))" Résultat = Résultat + Evaluate(Formule) Formule = "=SUMPRODUCT((""" & chambre_recherchée & """=RESA[nmr chambre])*(" & Format(TextBox1.Value, "00000") & "<=RESA[date arrivee])*(" & Format(TextBox3.Value, "00000") & ">=RESA[date depart))" Résultat = Résultat + Evaluate(Formule) Conflit = Résultat End If End Function
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 Private Sub ComboBox2_Change() Dim t As Long, D As Long, a As Long On Error Resume Next TextBoxchambre = ComboBox2.Value If Mise_à_Jour = False Then If TextBox2.Value <> "" And TextBox1 <> "" Then If Conflit = 0 Then Me.Dispo.Value = "Réservation possible." Me.Dispo.BackColor = RGB(0, 255, 0) Else Me.Dispo.Value = "Réservation impossible, conflit sur la période." Me.Dispo.BackColor = RGB(255, 0, 0) End If Else Me.Dispo.Value = "" End If a = ComboBox2.ListIndex + 2 t = Sheets("hotel").Range("C" & a).Value D = Sheets("hotel").Range("D1").Value TextBox5 = Sheets("hotel").Range("C" & a) & "" If TextBox4.Value = "" Then TextBox4.Value = 0 End If If TextBox4.Value <> "" Then If TextBox5.Value <> "" Then If TextBox2.Value <> "" Then TextBox6.Value = (TextBox2.Value * t) + (TextBox4.Value * D) & "" End If End If End If End If Mise_à_Jour = True End Sub
2 problèmes me rendent fous:
tantôt une erreur d'incompatibilité de type de variable survient a la ligne Résultat = Résultat + Evaluate(Formule) de ma fonction
Tantôt la textbox me retournant la disponibilité m'affiche la disponibilité en permanence.
En gros MAYDAY mdr.... merci a vous si vous vous sentez a m'aider à franchir la montagne.
Partager