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.