Fractionner une date selon des périodes saisies

Bonjour à tous,

J'aimerais, dans un tableau saisir des dates limites de début et de fin d'une période donnée, pour chaque agent.

Une fois, une nouvelle date saisie en dessous, une analyse se fait :

1) Si la date entrée est commune dans la partie inferieure de la date limite, alors cette borne inférieure sera adaptée :

Ex :

Date limite : 01/08/2013 – 31/08/2013

Date saisie : 13/08/2013 – 12/08/20103

Date limite adaptée : 13/08/2013 – 31/08/2013

2) Si la date entrée est commune dans la partie supérieure de la date limite, alors cette borne supérieure sera adaptée :

Ex :

Date limite : 01/08/2013 – 31/08/2013

Date saisie : 12/08/2013 – 11/09/20103

Date limite adaptée : 01/08/2013 – 11/08/2013

2) 3) Si la date entrée est comprise dans la date limite, alors cette date fractionner :

Ex :

Date limite : 01/08/2013 – 31/08/2013

Date saisie : 13/08/2013 – 22/08/20103

Date limite adaptée : 01/08/2013 – 12/08/2013

Date ajoutée dans une nouvelle ligne : 23/08/2013 – 31/08/2013

Je sais que cette explication n’est pas encore satisfaisante, mais je suis prés à répondre à d’éventuelles questions.

Merci d’avance.

Bonjour,

Un début :

Sub FractionDate()
    Dim Col As Integer, Lig As Long
    Dim Rng As Range, Cel As Range, C As Range

    Col = Cells(2, 1).End(xlToRight).Column
    Lig = Cells(2, 1).End(xlDown).Row

    '-- Tri selon les noms + date de début
    Range(Cells(2, 1), Cells(Lig, Col)).Sort Key1:=Range("A2"), Key2:=Range("C2")

    '----------
    '-- Traitement pour chaque nom dans le tableau
    For Each Cel In Range("A2:A" & Lig)
        [A1].AutoFilter Field:=1, Criteria1:=Cel
        [A1].AutoFilter Field:=3, Criteria1:=Month(Cel.Offset(, 2)) = [mois]
        [A1].AutoFilter Field:=4, Criteria1:=Month(Cel.Offset(, 3)) = [mois]

        Set Rng = Range("_FilterDataBase").Offset(1, 0).Resize(Range("_FilterDataBase"). _
                                                               Rows.Count - 1).SpecialCells(xlCellTypeVisible)
        [A1].AutoFilter

        '-- Fractionnement de la premiere date saisie dans le mois en cours
        '-- selon les dates sasies en dessous

        'For Each c In Intersect([A:A], Rng)
        '--test des dates en colonne C et D
        '-- ????
        'Next C

    Next Cel
End Sub

Les critères du filtre sont :

  • Le nom
  • le mois en colonne C est égal au mois en cours ( Ici 8 )
  • le mois en colonne D est égal au mois en cours ( Ici 8 )

Mais le filtre ne fonctionne pas pour le moment !

Bonjour

Comme je n'ai pas compris tous les cas

Pour commencer

Bonjour Banzai64,

Je vais faire des tests.

Merci.

Bonjour,

Le test suivant en PJ, n'a pas fonctionné.

Bonsoir

A vérifier

Bonsoir Banzai64,

Ca avance bien.

Un nouveau test en PJ avec quelques remarques.

Bonjour

Une suite

Bonjour,

Avec ce nouvel test, la macro mis beaucoup de temps à s’exécuter, en plus le tableau résultant est plus long que prévu

Bonjour

A vérifier

Re,

J'ai ajouté un test de mois pour la colonne D.

Le traitement sera appliqué sur une ligne si au moins une des deux dates est égal au mois en cours.

Mais une ligne de superflu dans le tableau résultant est désigné par une flèche dans la feuille.

Aussi, la ligne du 17/07/2013 au 31/07/2013 est en jaune (Les dates de ce mois ne seront pas traitées).

Bonjour

Cela devient trop complexe et je m'y perd dans ces dates

apt a écrit :

Aussi, la ligne du 17/07/2013 au 31/07/2013 est en jaune (Les dates de ce mois ne seront pas traitées).

Pourquoi elle vient de la ligne du 17/07/2013 au 25/08/2013 ---> Ligne modifiée

A tester

Bonsoir Banzai64,

Banzai64 a écrit :

Cela devient trop complexe et je m'y perd dans ces dates

J 'essaye de tester déférentes possibilités

Banzai64 a écrit :

elle vient de la ligne du 17/07/2013 au 25/08/2013 ---> Ligne modifiée

Erreur de frappe

A tester

Du premierça fonctionne, merci.

mais je vais continuer les tests

Bonsoir à tous,

Je sais que ca devient un peu embarrassant avec ces déférentes variantes, mais me voila encore avec un nouveau test

Comme les périodes ne sont connues au préalable et leurs saisie se fait au fur et à mesure que la modification se présente, par ce nouveau test le code ne prend pas en charge tout ajout à des dates de périodes déjà traitées !!!

Merci d‘avance.

Bonjour

Désolé mais je ne vais pas plus loin

Déjà c'est complexe (pour moi) à souhait et je me demande à quoi cela sert (ça enlève une partie de l'intérêt à chercher une solution)

Peut être aussi la façon dont j'ai commencé à traiter ce problème m'empêche de voir une solution peut être plus simple

Un conseil si tu veux, tu clos ce post et tu en ouvres un autre avec ce problème

Les commentaires devraient aider à la compréhension du code

Bonjour Banzai64,

Dessolé pour ce casse tête

Bon, j'ai corrigé le problème de mon dernier post.

Il était dans la comparaison des noms :

Un, avec majuscule (SSS) et la dernière ligne avec un nom en minuscule (sss)

Merci pour tout Banzai64.

Rechercher des sujets similaires à "fractionner date periodes saisies"