Extraction de données pour une meilleure visibilité

0

Bonjour !

J'avais déjà demandé de l'aide pour un tableau de gestion de logements en location saisonnière, et l'aide reçue avait été fort utile. je cherche à continuer à faire évoluer mon tableau pour gagner encore plus de temps.

Je gère donc près d'une vingtaine de logements en location de vacances. j'ai un classeur excel avec une feuille par mois où je note en ligne pour chaque logement les départs, les arrivées, le ménage et d'autres choses qui ne me seront pas utiles dans le propos ici.

J'ai donc en colonne les dates du mois et en ligne j'ai le nom de chaque logement et pour chaque logement j'ai des lignes en dessous qui précisent le type d'intervention à faire.

Sur la ligne où se trouve le nom du logement : je mets la lettre A au jour de l'arrivée (cellule qui croise le nom du logement et la date), puis je mets un D le jour du départ (le A et le D pour un même logement peuvent ne pas être sur la même feuille pour les séjours à cheval sur 2 mois). Il peut y avoir le même jour pour un logement un départ de voyageurs et une arrivée d'autres voyageurs, je mets alors D/A ce qui veut dire Départ/Arrivée. Toutes les cellules entre un A et un D sont remplies d'une couleur pour que je sache que le logement est occupé.

Sous la ligne avec le nom du logement, j'ai une ligne Ménage. Le jour du ménage du logement, je remplis la cellule d'une couleur différente en fonction de quelle femme de ménage il s'agit.

Avec une vingtaine de logements à gérer je n'y vois plus clair dans le tableau et chaque jour je vérifie ce que j'ai à faire mais la lecture en colonne est compliquée. Aussi je voudrais pouvoir extraire de mon tableau global, une sorte de calendrier avec un filtre de date à date qui me liste par jour les Départs, Arrivées et Ménage du jour avec le nom des logements.

Voici mon tableau https://www.cjoint.com/c/NAikc2raFfv

j'ai mis une seule feuille qui correspond à Janvier 2024 + une feuille Synthèse de ce que j'aimerais obtenir comme extraction. Il faudrait que chacune de mes feuilles mensuelles puissent alimenter ce tableau

Merci par avance pour votre aide !!!

bonne journée

Laurène


    laurene.cal Posté le 8 janvier, 11:05
    par laurene.cal
    Répondre
    0

    Bonjour Laurène,

    tu as bien écrit ton énoncé, et tu as été très claire.  :)

    tu as demandé beaucoup de choses, et en plus c'est plutôt compliqué !  ;)

    tu as mis une seule feuille mensuelle ; mais vu ce que tu as écrit, tu aurais
    dû mettre au moins 3 feuilles mensuelles pour que ton fichier soit plus
    représentatif de ton cas réel.

    c'est pour ça que j'ai ajouté quelques feuilles mensuelles.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    j'ai fait ton exo en entier ; ça a été très long à faire.

    comme il y aura beaucoup de choses, je vais répondre en plusieurs posts,
    avec pour chaque post une référence de ce style : "réf. P01" ; tu pourras
    écrire par exemple : "Pour P01 :" et mettre à la suite ce qui concerne P01.

    rhodo

    rhodo Posté le 10 janvier, 12:08
    par rhodo
    0

    @Laurène ; réf. P01

    ton fichier en retour : https://www.cjoint.com/c/NAkmhZfH2R0

    -----------------------------------------------------------------------------------------------

    à l'ouverture du fichier, tu es sur la feuille "synthèse".

    il y a 4 cellules jaunes ; dans ce post, on va s'occuper seulement des
    2 premières ; donc ne saisis rien en C5 et C7 : laisse-les vides.

    les 2 premières cellules jaunes C2 et C3 sont pour la Période.

    C2 est pour la date de début de période "Du :".

    C3 est pour la date de fin de période "Au :".

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    la date début est obligatoire ; la date fin est facultative, car si tu
    ne mets rien, ça mettra la date de fin de mois qui correspond à
    la date début ; exemple :

    saisis 5/2 en C205/02/24 ; laisse vide la cellule C3, et fais
    Ctrl e ➯ ça a mis 29/02/24 en C3 (oui, 2024 est bissextile) ;
    et dessous, tu as les résultats pour la période.

    ça va du Lundi 5 au Mercredi 28 car y'a rien eu le 29.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    si tu saisis 2 dates :

    a) elles doivent être de la même année ; il ne peut pas y avoir de
    période à cheval sur 2 années ; donc même si tu aurais voulu
    par exemple « du 15/12/23 au 08/01/24 », désolé : tu devras
    t'en passer (c'était déjà suffisamment bien assez compliqué
    avec une seule année)
    ; mais voici un palliatif :

    * pour le classeur de l'année 2023 : du 15/12/23 au 31/12/23.
    * puis pour le classeur de 2024 : du 01/01/24 au 08/01/24.

    b) la période peut être à cheval sur plusieurs mois.  :)

    c) si tu as saisis une date fin qui est antérieure à la date début,
    elles seront automatiquement inversées (suite à Ctrl e).

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    note que si la feuille d'un mois n'existe pas, y'a pas de plantage ;
    et ça même si le mois de la feuille inexistante est inclus dans
    une période plus grande que le seul mois de la feuille.

    comme y'a que les feuilles "Janv 2024" à "Juin 2024", si tu saisis
    du 01/07/24 au 31/12/24, y'aura évidemment aucun résultat ; et
    si tu saisis du 01/01/24 au 31/12/24, y'aura les mêmes résultats
    que si tu avais saisi du 01/01/24 au 30/06/24.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    quand y'a d'anciens résultats, tu n'as pas besoin de les effacer,
    car c'est fait automatiquement par la macro (c'est pour éviter
    des interférences entre les anciens résultats et les nouveaux)
    .

    -----------------------------------------------------------------------------------------------

    je te laisse faire plusieurs essais pour les périodes de ton choix,
    et vérifie bien attentivement tous les résultats.

    rhodo

    rhodo Posté le 10 janvier, 13:11
    par rhodo
    0

    @Laurène ; réf. P02

    ---------------------------------------------------------------------------------------------------

    voyons maintenant les 2 cellules jaunes C5 et C7.

    * en C5 : c'est une liste de 4 items : A ; D ; D/A ; Ménage.

    * en C7 : tu peux saisir par exemple "Logement 11".

    que tu aies saisi une seule donnée en C5 ou C7, OU que tu aies saisi
    une donnée en C5 ET en C7, les résultats en tiendront compte ; mais
    n'oublie pas de saisir une période (comme indiqué en P01).

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    * si C5 est vide, ça équivaut à : « quelle que soit l'activité » ; donc
    c'est pour toutes les activités.

    * si C7 est vide, ça équivaut à : « quel que soit le logement » ;
    donc c'est pour tous les logements.

    si tu veux de nouveau des résultats pour toutes les activités et pour
    tous les logements : n'oublie pas d'effacer C5 et C7 avant de faire
    Ctrl e (e est pour écriture des données).

    ---------------------------------------------------------------------------------------------------

    ce sont les 4 cellules jaunes C2, C3, C5, C7 qui jouent le rôle d'un
    filtre ; ceci avant de faire Ctrl e ; je n'ai pas voulu faire d'affichage
    automatique des résultats après changement d'une cellule jaune
    car c'est mieux que tu saisisses d'abord tous les critères voulus,
    même si ça peut être seulement la date début de période.

    ---------------------------------------------------------------------------------------------------

    dans ton fichier initial, sur ta feuille "synthèse", extrait du texte de B5 :
    « possibilité de trier en affichage : les D/A d'abord, les D ensuite, les
    A ensuite ».

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    fais Ctrl b ➯ en F5 : « Avec tri des activités » ; ça ne fait rien sur
    le moment, mais lors de ton prochain Ctrl e, tu auras les résultats
    avec les activités triées (c'est pour chaque jour séparément, pas
    pour toute la période)
    .

    c'est dans l'ordre que tu as indiqué, les lignes « Ménage » étant
    en dernier.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    fais Ctrl b ➯ en F5 : ça efface le texte « Avec tri des activités » ;
    ça ne fait rien sur le moment, mais lors de ton prochain Ctrl e :
    résultats avec des activités non triés ; car c'est dans l'ordre de
    lecture
    d'une colonne de jour (de haut en bas).

    ---------------------------------------------------------------------------------------------------

    la colonne E est masquée ; affiche-la, et tu verras ces 2 choses :

    * en E5 : c'est 1 pour « Avec tri des activités » ; sinon, c'est 0 ;
    l'utilisateur n'a rien à saisir en E5 ; car c'est Ctrl b qui fait ce
    qu'il faut : inversion de 0 en 1, et vice-versa ; évidemment,
    la formule de F5 utilise E5 : =SI(E5=1;"Avec tri des activités";"")
    b est pour bascule (= l'inversion 0 en 1, ou 1 en 0).

    * en C9 : "C" ; c'est l'initiale de Code ; et ce code est nécessaire
    pour pouvoir faire le tri des activités ; tu peux voir les codes si
    tu as fais Ctrl e (ces codes sont écrits même si y'a 0 en E5).

    ---------------------------------------------------------------------------------------------------

    à propos du code VBA :

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    attention : pour Module3, lis attentivement tous les commentaires.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    attention : ta sub Evenement() était placée au départ dans le module
    de la feuille "Employée" ; ce n'est pas la bonne place, car elle doit
    être dans un module standard ; je l'ai donc déplacée dans Module2
    (elle est sous ma sub "Bascule").

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    lis ensuite Module1 (112 lignes) ; j'ai mis plusieurs indications utiles
    dans le post P04 du 11 janvier 01:24 ; bonne lecture !  :)

    mais n'oublie pas de lire aussi le post P03 situé ci-dessous.  ;)

    rhodo

    rhodo Posté le 10 janvier, 14:05
    par rhodo
    0

    @Laurène ; réf. P03

    ce post concerne les feuilles mensuelles "Janv 2024" à "Juin 2024".

    ---------------------------------------------------------------------------------------------------

    je n'ai pas voulu perdre de temps à inventer de nouvelles données :
    elles ont toutes les mêmes données, mais bien sûr :

    a) il y a 3 feuilles de 31 jours : "Janv 2024" ; "Mars 2024" ; "Mai 2024".

    b) il y a 2 feuilles de 30 jours : "Avr 2024" ; "Juin 2024".

    c) il y a 1 feuille de 29 jours : "Févr 2024" (oui, 2024 est bissextile).

    donc c'est normal que sur les feuilles de moins de 31 jours, il n'y a
    pas les données des colonnes finales.

    ---------------------------------------------------------------------------------------------------

    a) en A2, j'ai mis : "3 codes ; puis prénoms des femmes de ménage :" ;
    mais si tu préfères, tu peux mettre simplement : "3 codes :".

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    b) pour l'emplacement des prénoms des femmes de ménage : note
    que des colonnes P à AD, il y a 5 cases de 3 cellules fusionnées.

    ça tombe bien qu'il y aie seulement 5 femmes de ménage, car à
    droite, tu ne peux plus ajouter de case de 3 cellules ; sinon, sur
    la feuille de février (29 jours ou 28 jours), y'aurait plus la place ;
    à moins de faire déborder sur le côté droit.

    c'est seulement sur une feuille de 31 jours où y'a la place pour un
    6ème prénom (sans déborder à droite) : case en AE2:AG2 ; mais
    ça déborderait sur une feuille de 30 jours (ou moins).

    ---------------------------------------------------------------------------------------------------

    prenons pour exemple la 1ère feuille mensuelle.

    a) en A4, il y a le mois : "Janvier".

    b) le nom défini AnnéeCalendrier24 fait référence à : =2024 ;
    en B4 : =AnnéeCalendrier242024.

    c) pour a) et b) : ne change rien, car mon code VBA s'en sert.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    d) de C6 à AG6 : nombres 1 à 31 ; en C6 : j'ai laissé ton long texte
    sur fond jaune de la validation de données (message de saisie) :

    « Les jours du mois dans cette ligne sont générés automatiquement.
    Entrez l’absence et le motif d’absence d’un employé dans chaque
    colonne pour chaque jour du mois. Un champ vide indique qu’il n’y
    a pas eu d’absence »

    moi, à ta place : je supprimerais ce message de saisie, et sans faire
    de génération automatique, je laisserai comme c'est actuellement :
    de 1 à 31 pour les feuilles de mois de 31 jours ; de 1 à 30 pour les
    feuilles de mois de 30 jours ; pour la feuille de février : de 1 à 29,
    et suppression de la colonne du 29 pour chaque année qui est
    non bissextile ; c'est juste une suggestion, fais comme tu veux.  ;)

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    e) en C5 : =TEXTE(JOURSEM(DATE($B4;1;C6);1);"jjj")

    cette formule a été étirée à droite jusqu'en dernière colonne,
    ici AG5 ; sur les autres feuilles : la formule est aussi avec $B4
    et C6, mais bien sûr, le 2ème argument n° du mois a dû être
    adapté : 2 pour février ; 3 pour mars ; ... ; 6 pour juin.

    rhodo

    rhodo Posté le 11 janvier, 01:12
    par rhodo
    0

    @Laurène ; réf. P04

    pour Module1, voici quelques indications :

    ------------------------------------------------------------------------------------------------------------------------

    la 1ère sub que tu vois est la sub Job() ; elle est privée car elle ne doit pas être appelée
    par l'utilisateur ; elle est appelée uniquement par la 2ème sub ÉcritDonnées() (qui est
    située en dessous)
    .

    ------------------------------------------------------------------------------------------------------------------------

    comme Ctrl e lance l'exécution de la sub ÉcritDonnées(), commençons par celle-ci.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    * AC est pour l'ACtivité (en cellule C5) ; LG est pour le LoGement (en cellule C7).

    * fP est le flag Période, qui permettra de savoir si une écriture d'un résultat a eu lieu
    dans la Période ; car si y'a eu aucune écriture, il ne faudra pas tracer la bordure bas
    du tableau (entre autres) ; flag = drapeau.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    * D1 est pour la 1ère Date : celle de début période (en cellule C2).

    D2 est pour la 2ème Date : celle de fin période (en cellule C3).

    * MIP : Mois Initial de la Période ; MFP : Mois Final de la Période.

    JIP : Jour Initial de la Période ; JFP : Jour Final de la Période.

    * An : Année de la période.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    voici un exemple concret ; si la période est : « du 05/02/24 au 12/05/24 », alors :

    D1 = 05/02/2024 ; D2 = 12/05/2024 ; MIP = 2 (février) ; MFP = 5 (mai) ;
    JIP = 5 ; JFP = 12 ; An = 2024.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    MT : Mois Traité ; c'est le compteur de la boucle For .. Next :

    For MT = MIP To MFP: Job MT: Next MT

    on appelle la sub Job() pour chaque mois de la période ➯ pour notre exemple
    concret ci-dessus, on appelle Job() pour un MT de 2 à 5 ; ainsi, c'est la sub Job()
    qui va faire le travail réel de filtrage, cela pour chaque feuille concernée de la
    période : les feuilles de février à mai ; et c'est dans la sub Job() que ça fera
    la correspondance entre MT et le nom de la feuille mensuelle :

    * 2 (pour février) ➯ feuille "Févr 2024"

    3 (pour mars) ➯ feuille "Mars 2024"

    4 (pour avril) ➯ feuille "Avr 2024"

    5 (pour mai) ➯ feuille "Mai 2024"

    dans Job(), il y a aussi ce qu'il faut pour éviter un plantage au cas où la feuille
    d'un mois donné n'existe pas ; même le mois est inclus dans la période et ne
    fait pas partie des 2 bornes (mois de début période et mois de fin période).

    pour notre exemple concret, si la feuille "Avr 2024" n'existe pas : y'aura pas de
    plantage, et ça retournera des résultats pour les 3 autres feuilles (si toutefois
    y'a des résultats trouvés dessus)
    .

    ------------------------------------------------------------------------------------------------------------------------

    maintenant tu peux lire la sub Job().  :)

    fM est le flag Mois, qui permettra de savoir si une écriture d'un résultat
    a eu lieu dans le Mois.

    fJ est le flag Jour, qui permettra de savoir si une écriture d'un résultat
    a eu lieu dans le Jour.

    * For c = a To b : pour les colonnes a à b d'une feuille mensuelle.

    * For p1 = 7 To d : pour les lignes 7 à d d'une feuille mensuelle.

    * p2 est la ligne qui est juste sous la ligne p1 (celle du ménage).

    ------------------------------------------------------------------------------------------------------------------------

    je ne détaille pas : c'est juste quelques indications de base, en plus des commentaires
    qui sont déjà présents dans le code VBA ; en étudiant attentivement tout le code VBA,
    j'espère que tu arriveras à tout comprendre ; bonne chance !  :)

    rhodo

    rhodo Posté le 11 janvier, 01:24
    par rhodo
    0

    Bonjour Laurène,

    je te laisse lire mes 5 posts précédents, du 10 janvier 12:08
    au 11 janvier 01:24 ; à te lire pour avoir ton avis.  :)

    si tu as des questions, n'hésite pas à demander.  ;)

    rhodo

    rhodo Posté le 11 janvier, 09:24
    par rhodo
    0

    Bonjour Rhodo

    toutes mes plus sincères excuses de mon délai de réponse !! je n'ai pas reçu de notifications comme quoi j'avais eu une réponse, je suis revenue dessus par hasard avec l'agréable surprise de voir que tu m'as répondu. je vais maintenant prendre le temps de regarder tout cela et je te remercie infiniment de tout le temps passé là dessus MERCI

    laurene.cal Posté le 22 janvier, 21:03
    par laurene.cal
    0

    Bonjour Laurène,

    je suis ravi que tu sois de retour !  :)  je croyais que ce sujet ne t'intéressait plus.  ;)

    prends tout ton temps pour tout regarder ; si ta réponse viendra demain,
    après-demain, ou un peu plus tard : pas de souci.  :)

    rhodo

    rhodo Posté le 23 janvier, 11:54
    par rhodo
    0

    Laurène a de nouveau disparu de la circulation.  :(

    elle s'est évaporée dans la Nature ; j'espère qu'elle
    n'a pas péri en mer, corps et biens !  ;(

    bon, je vais quand même attendre son retour du
    circuit Sail GP (c'est le Grand Prix de la voile
    d'Abou Dhabi)
    .

    rhodo

    rhodo Posté le 31 janvier, 18:20
    par rhodo

    Si vous n'êtes pas inscrit sur le site, vous pouvez poster librement (en tant qu'invité).
    Pour cela, indiquez un pseudonyme (nom d'utilisateur) et une adresse email :