Aide pour un calendrier de prêt

pa226

XLDnaute Nouveau
Bonjour je travaille sur un fichier de prêt d'outils. j'aimerais votre opinion sur comment aborder mon problème.
Voila; dans mon tableur, j'ai une liste d'outils et la quantité que j'ai. J'ai ensuite un autre tableau contenant la date de sortie de l'outil, la date de retour et l'outil en prêt. J'aimerais être capable de détecter les conflits de prêt.

Est-ce que je commence par trouver les outils en double dans le tableau de prêt et ensuite pour chaque doublon je compare les dates pour détecter les conflits ou est-ce que je commence par trouver les dates conflictuelle pour ensuite vérifier si pour chaque date conflictuelle il s'agit d'un outil en double?

En VBA, est-il possible de définir un range entre 2 dates?

Si la question vous semble confuse, c'est normal car je le suis!
 

Fichiers joints

tatiak

XLDnaute Barbatruc
Bonjour Pa226,

Pour un besoin quasi-similaire, je peux proposer ce fichier joint.
Ici il s'agit de location de vélo, mais on peut remplacer les réf des vélo par des réf de matériel quelconque.

Dans ce fichier quand on essaye d'attribuer une référence sur un créneau déjà pris, il y a un message d'alerte qui signale son indisponibilité.

Ca pourrait peut être répondre au besoin?
Pierre
 

Fichiers joints

pa226

XLDnaute Nouveau
Bonjour Pa226,

Pour un besoin quasi-similaire, je peux proposer ce fichier joint.
Ici il s'agit de location de vélo, mais on peut remplacer les réf des vélo par des réf de matériel quelconque.

Dans ce fichier quand on essaye d'attribuer une référence sur un créneau déjà pris, il y a un message d'alerte qui signale son indisponibilité.

Ca pourrait peut être répondre au besoin?
Pierre
Merci pour votre réponse, oui ça ressemble à ce que je cherche et vous y avez mis beaucoup de travail! Veuillez m'excuser mais je suis débutant en vba. C'est la mécanique du code qui m'intéresse surtout. J'aimerais comprendre comment la feuille de travail sait si le vélo est disponible ou non pour une date donnée, comment sont stocker les données de disponibilité et comment elles sont extraite.

Merci
 

tatiak

XLDnaute Barbatruc
La question est intéressante.

La méthode que j'utilise pour ce type de besoin passe par une variable tableau (au sens programmation)
cf par exemple => https://silkyroad.developpez.com/vba/tableaux/

Dans cet exemple pour les locations de vélo, les infos "location" sont externalisées dans un simple fichier texte.
L'idée principale est d'obtenir un fichier Excel "léger" et qui le reste dans le temps.
Un autre avantage est de pouvoir upgrader le fichier "appli" (si nécessaire) sans toucher aux données.

Pour revenir au sujet :
A l'ouverture du fichier, on lit les données et on les place dans un tableau (à 2 dimensions) nommé ici "TLoc"
A chaque nouvel enregistrement, on ajoute les nouvelles données à ce tableau.
Pour vérifier une dispo, il suffit alors de boucler sur l'ensemble des données existantes pour vérifier si une réf est occupée dans le créneau horaire indiqué => cf "Function Dispo-Ok"

Voici le code commenté de cette fonction :
VB:
' *****        CODE PierreP56 : http://tatiak.canalblog.com/        *****
Function Dispo_Ok() As Boolean
Dim Dt1 As Single, Dt2 As Single, Dloc1 As Single, Dloc2 As Single
Dim ref As String, i As Long

    Dispo_Ok = True ' à priori la réf est dispo
    With Usf_Fiche
        'calcul de la date+heure de départ et de retour au format 'single'
        Dt1 = CSng(CDate(.TextBox4.Value))
        Dt2 = CSng(CDate(.TextBox5.Value))
        If Not .TextBox6.Value = "" Then Dt1 = Dt1 + CSng(CDate(.TextBox6.Value))
        If Not .TextBox7.Value = "" Then Dt2 = Dt2 + CSng(CDate(.TextBox7.Value))
        If Dt1 = Dt2 Then Dt2 = Dt2 + 1
    
        ref = .TextBox2.Value   ' réf du vélo
        For i = 2 To UBound(TLoc, 1)    ' boucle sur l'ensemble des réservations existantes
            'calcul de la date+heure de départ et de retour au format 'single' des réservations existantes
            Dloc1 = CSng(CDate(TLoc(i, 4)))
            Dloc2 = CSng(CDate(TLoc(i, 5)))
            If Not TLoc(i, 6) = "" Then Dloc1 = Dloc1 + CSng(CDate(TLoc(i, 6)))
            If Not TLoc(i, 7) = "" Then Dloc2 = Dloc2 + CSng(CDate(TLoc(i, 7)))
            If Dloc1 = Dloc2 Then Dloc2 = Dloc2 + 1
        
            ' vérification si la nouvelle réservation est "compatible" avec celles existantes
            If ref = TLoc(i, 2) And Not .TextBox1.Value = TLoc(i, 1) Then
                If Not (Dloc2 <= Dt1 Or Dloc1 >= Dt2) Then Dispo_Ok = False
                ' Dispo_Ok = False => si même réf et superposition des dates+heures
            End If
        Next i
        .Label_dispo.Visible = Not Dispo_Ok
    End With
End Function
De cette façon, le tout est dynamique (fondamentalement, il n'y a pas de statut "occupé" ou "libre" puisque ça dépend du créneau date-horaire)


Pour des données se trouvant sur une feuille du classeur, il suffirait d'alimenter le tableau TLoc par un code genre :
VB:
    With Sheets("Feuil1")
        lg = .Cells(Rows.Count, 1).End(xlUp).Row
        cl = .Cells(1, Columns.Count).End(xlToLeft).Column
        TLoc = .Range(.Cells(1, 1), .Cells(lg, cl)).Value
    End With
Dans ce fichier le code est ouvert, on peut donc fouiller dedans sans soucis.

Bon week-end
Pierre
 

pa226

XLDnaute Nouveau
Merci beaucoup Pierre, c'est très généreux de votre part. Je vais prendre le temps de digérer le code et bidouiller quelque chose pour mon projet!
 

Discussions similaires


Haut Bas