Récupérer plusieurs dates dans une cellule

Bonjour,

A partir d'un formulaire, je peux récupérer les dates de réservation en fonction d'objets selon une catégorie. Ca c'est OK.

Dans un autre onglet j'ai la liste de mes objets uniques. Dans une colonne je souhaiterais que soit reportées toutes les dates de réservation (issues du formulaire) relatives à ces objets. J'ai un fichier qui explique tout cela. J'ai naivement pensé qu'un rechercheV pourrait faire l'affaire mais ce n'est pas possible vu qu'il y a plusieurs dates possibles pour un même objet.

Bonjour

Tu as vraiment la version 2013 datant d'il y a 12 ans ?

Si oui je te conseille d'installer l'add on PowerQuery (totalement intégré à Excel 2016 et plus)

https://www.microsoft.com/fr-fr/download/details.aspx?id=39379

En quelques clics tu obtiens cela

image

J'ai M365, donc j'ai bien powerquery.

Alors dans ma situation, je souhaiterais que la colonne liste ne soit pas réduite à ce qui a fait l'objet d'une réservation. L'onglet "categorie" doit servir à la fois à montré tous les objets et a informé de ceux qui ont fait l'objet d'une réservation.

Bonjour,

Pas très bien compris votre problème avec la solution de PQ...

Mettez à jour la version d'Excel sur votre profil SVP.

Alternative via formule :

=GROUPER.PAR(Tableau1[[#All];[Categorie]:[Liste]];Tableau1[[#All];[Concaténation]];TABLEAU.EN.TEXTE;3;0)

Je viens de mettre à jour mon profil.

@saboh12617, ça a l'air très intéressant mais excel ne comprend pas la formule. En tout cas je n'arrive pas l'appliquer.

Je viens de mettre à jour mon profil.

@saboh12617, ça a l'air très intéressant mais excel ne comprend pas la formule. En tout cas je n'arrive pas l'appliquer.

La formule renvoie simplement votre TCD, avec les lignes regroupées. Excusez moi l'erreur vient du fait que j'ai Excel en anglais et #All n'est pas bien traduit. Je crois que c'est #Tout en français. Sinon reselectionnez les plages du Tableau1 correspondantes, en prenant les en-têtes.

Désolé, je n'arrive pas appliquer la formule. J'ai bien corrigé le all en tout

voir ci-joint

Merci. C'est presque ça mais j'aimerais que tous les objets de la liste apparaissent même ceux qui n'ont pas fait l'objet d'une réservation.

Je le matérialise dans le tableau ci-joint. Notez que j'ai tenté de récupérer les valeurs de "concatenation" via un recherchex mais curieusement ça me renvoie une erreur.

Re,

On peut utiliser RECHERCHEX sur le tableau, mais il faut concaténer les 2 colonnes qui forment la clé (catégorie + liste) pour effectuer la recherche correctement. Ci-joint un exemple reprenant le tableau. On utilise PRENDRE afin de s'adapter au résultat de la formule qui peut varier en longueur.

Impeccable, bravo !

Je vais essayer de comprendre ça semaine prochaine. Merci encore!

Bonjour, je reviens sur le sujet.

Est-il possible d'adapter la formule "grouper par" en conditionnant l'affichage à la colonne "validation finale"="Validé".

Enfin dernière demande, quelle serait la formule pour mettre à jour la colonne "dispo aujourd'hui" en comparant les intervalles de date présents dans la colonne "réservation déjà enregistrée" avec "aujourd'hui". Je crains que ce ne soit pas possible du fait que les données soient stockées comme du texte.

Bonjour,

Oui c'est possible, dans la fonction grouper.par il y a une option de filtrage incluse. Pour vérifier le chevauchement sur la date d'aujourd'hui, on peut utiliser la fonction DATEVAL qui convertit un texte en date.

Donc pour le tableau on ajoute la formule suivante en colonne E :

=LET(
    _tdates1; DATEVAL(FRACTIONNER.TEXTE([@[Réservation déjà enregistrée]]; " - "; ";"));
    _tdates2; FILTRE(_tdates1; BYLIGNE(_tdates1; LAMBDA(r; ET(NON(ESTERREUR(r))))));
    SIERREUR(
        SI(OU(BYLIGNE(_tdates2; LAMBDA(r; ET(INDEX(r; 1) <= AUJOURDHUI(); INDEX(r; 2) >= AUJOURDHUI())))); "Non"; "Oui");
        "Inconnu"
    )
)

J'ai mis "Inconnu" pour les colonnes sans infos, car je trouvais bizarre de mettre non. Je vous laisse corriger dans la formule si besoin.

Pour les indications de la feuille "Form1" au niveau des créneaux je n'ai pas compris. Ça n'est peut-être pas destiné au forum ?

Ci-joint le fichier mis à jour.

Wow excellent ! Du coup j'apprends l'existence de la fonction lamba. La syntaxe est costaude quand même

Puisque vous evoquez l'onglet form1, non ce n'était pas destiné au forum mais du coup pour ma culture j'aimerai savoir si la colonne dispo aujourd'hui n'aurait pas été plus simple à calculer dans cet onglet en tenant compte des colonnes "début réservation", "Fin réservation", "Objet"? La valeur serait ainsi récupérer automatiquement dans l'onglet catégorie sans nécessité de calcul.

Ah oui dans ce cas c'est plus simple. Si l'on ne regarde que la ligne actuelle, il suffit de reprendre la logique de la formule précédente (début résa < aujourd'hui + fin résa > aujourd'hui => occupé) et le transposer sur votre tableau. Cela donne (en K1) :

=SI(
ET([@[Début réservation]]<=AUJOURDHUI();[@[Fin réservation]]>=AUJOURDHUI());
"Non";"Oui")

Oui, la fonction que j'ai écrite est assez complexe mais c'est notamment parce qu'on travaille avec du texte, et le gros de la formule c'est pour gérer les erreurs éventuelles. Le principe au fond reste celui ci-dessous

Si vous avez d'autres questions n'hésitez pas, sinon n'oubliez pas de clôturer le fil. Bonne journée.

Effectivement Ce qui donne en tenant compte de la formule précédente

=SI(SOMMEPROD((D$2:D$23=D2)*(E$2:E$23<=AUJOURDHUI())*(F$2:F$23>=AUJOURDHUI()))>0;"Non disponible";"Disponible")

Testé et fonctionnel !

Parfait, content d'avoir pu vous aider.
Au plaisir.

Maintenant que j'ai exploré de nouveaux horizons on a tendance à vouloir aller encore plus loin. Donc une dernière et je m'arrête après ça. Imaginons que ma colonne objet ne contienne pas un seul objet comme c'est le cas ici mais qu'elle en contienne plusieurs séparés par un ";". Ce cas pourrait être possible dans le cas de réponses reçues par formulaire autorisant le choix multiple.

Aujourd'hui, mes formules me permettent de traiter un objet par ligne. Comment je fais si j'ai plusieurs objets dans la même ligne. Il faudrait qu'excel puisse isoler chacun des objets de la cellule, vérifier que chacun d'eux n'a pas fait l'objet d'une réservation et indiquer sa disponibilité. Ca parait particulièrement complexe. J'imagine qu'une macro pourrait créer une ligne à chaque fois qu'il y a un objet précédé d'un ";". La macro pourrait s'exécuter à chaque ouverture du fichier.

Mais sans macro est-ce que c'est réalisable ? Vu la complexité, juste une piste de réflexion me contenterait :) . Sachant que je suis arrivé à mes fins grâce à vous, j'en suis déjà très reconnaissant. Merci

Oui je comprends

Dans ce cas vous pouvez passer par du VBA oui, mais c'est se compliquer la vie. Vous avez PowerQuery (intégré à Excel, garde le fichier en xlsx) qui est un outil très puissant pour travailler avec les tableaux. Bon malheureusement je ne suis pas Expert sur cet outil, mais d'autres contributeurs (je pense à Baroute, JFL, Chris, cousinhub et sans doutes bien d'autres que j'oublie) sauront vous aider. Dans l'état je vous propose la requete que j'ai pu créer avec mes connaissances :

let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date résa", type datetime}, {"Commune", type text}, {"Categorie", type text}, {"Objet", Int64.Type}, {"Début réservation", type datetime}, {"Fin réservation", type datetime}, {"Intervalle-date", type text}, {"Contrôle de la durée#(lf) (<40 j)", type text}, {"Contrôle des chevauchements", type text}, {"Validation finale", type text}, {"Dispo aujourd'hui", type any}}),

    Colonnes = Table.ColumnNames(#"Changed Type"),
    // Séparer la colonne "Objet" en listes
    AjoutListe = Table.AddColumn(Source, "ObjetListe", each Text.Split(Text.From([Objet]), ";")),
    // Supprimer la colonne "Objet" d'origine
    SupprimerObjet = Table.RemoveColumns(AjoutListe, {"Objet"}),
    // Développer la liste en lignes
    Expand = Table.ExpandListColumn(SupprimerObjet, "ObjetListe"),
    // Renommer la colonne développée
    Renommer = Table.RenameColumns(Expand, {{"ObjetListe", "Objet"}}),
    // Convertir en nombre si nécessaire
    Convertir = Table.TransformColumnTypes(Renommer, {{"Objet", Int64.Type}}),
    // Replacer la colonne "Objet" à sa position d'origine
    ColonnesAvantObjet = List.RemoveItems(Table.ColumnNames(Source), {"Objet"}),
    ColonnesFinales = List.InsertRange(ColonnesAvantObjet, List.PositionOf(ColonnesAvantObjet, "Categorie") + 1, {"Objet"}),
    Réorganiser = Table.SelectColumns(Convertir, ColonnesFinales),
    #"Changed Type1" = Table.TransformColumnTypes(Réorganiser,{{"Date résa", type datetime}, {"Début réservation", type date}, {"Fin réservation", type date}})
in
    #"Changed Type1"

Fonctionnement :

Dans la feuille Form1, mettez dans votre colonne "objet" des nombres concaténés avec ";". Par Exemple "1;2;3".

Dans la feuille "DegrouperObjet" du fichier ci-joint, faites clic droit sur le tableau > Actualiser.

Le tableau en question aura la colonne Objet dégroupée. Là où je bloque c'est comment implémenter cela dans votre tableau initial directement… sans écraser les formules ! Ça je ne suis pas sûr que ce soit possible, c'est pourquoi j'ai laissé l'output sur une autre feuille.

Après pour info, je pense que l'ensemble de vos formules pourraient être calculées dans PowerQuery sans difficulté, mais bon à ce compte-là, autant faire un nouveau fil avec "PowerQuery" ou "PQ" dans le titre et demander comment dégrouper votre colonne Objet et calculer le résultat des formules dans PQ.

La formule est flippante .

Bon effectivement j'avais pas misé sur powerquery. On peut tout à fait imaginer que la tableau source reste tel quel et que les traitements effectués par power query se fassent sur une feuille différente. Si ce tableau est toujours connecté à la source et qu'il exécute la formule de manière automatique ce serait royal.

Vous évoquez un "fichier ci-joint" qui n'est pas présent dans votre réponse.

Merci en tout cas pour cette piste bien avancée et le temps consacré. Je vais ouvrir un nouveau sujet ciblé sur PQ.

Cordialement

Rechercher des sujets similaires à "recuperer dates"