Le SUMPRODUCT qui fait tout
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:
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:
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.