Recherche données dans base

Bonjour à tous.

Je vais essayer d'être le plus précis possible dans ma demande

Voilà... J'ai une onglet se composant d'une base de données de contrats et de date de signatures sous la forme suivante :

Contrat Service Date

A 1 01/01/2011

B 1 01/01/2011

C 1 01/01/2011

C 2 01/03/2011

D 2 01/02/2011

J'ai donc 1 contrat avec une possibilité de N dates.

Je souhaiterais dans un autre onglet et sans à avoir à utuliser un TCD avoir un tableau par mois et faisant en sorte que la date mentionnée du contrat soit la date la plus ancienne

Janvier

Contrat Service Date

A 1 01/01/2011

B 1 01/01/2011

C 1 01/01/2011

D 2 Non signé

Février

Contrat Service Date

A 1 01/01/2011

B 1 01/01/2011

C 2 01/01/2011

D 2 01/02/2011

Mars

Contrat Service Date

A 1 01/01/2011

B 1 01/01/2011

C 2 01/03/2011

D 2 01/02/2011

Avril

Contrat Service Date

A 1 01/01/2011

B 1 01/01/2011

C 2 01/03/2011

D 2 01/02/2011

Ah oui... j'évite la fonction SommeProd car cette dernière ne fonctionne pas dans le cadre d'une sélection d'une colonne en entier et elle ralenti considérablement le temps de calcul car mon tableau à plus de 20000 lignes

Merci à vous d'une aide à mon casse tête.

Bien à vous.

Fred

Bonjour

Mets ton fichier en ligne avec données non confidentielles. Cela évitera de devoir tout refaire

Amicalement

Ok Dan...

Voici une ébauche du fichier....

J'ai bien essayé les fonctions : Somme.si.ens, index avec equiv mais là je sèche....

Fred

30classeur1.xlsx (29.09 Ko)

Bonjour

Tu dis vouloir la date la plus ancienne, ce qui est le cas dans ton fichier exemple pour Janvier et Février, mais ne l'est plus pour Mars et Avril? Pourquoi?

Cordialement

Merci à toi déjà d'avoir pris le temps de regarder le fichier.

J'ai pas bien expliqué ma demande alors... Désolé... Disons que je veux récupérer la dernière date du contrat correspondant au mois du tableau.

Janvier et février auront comme réponse 01/01/2011 et à partir de mars tous le mois suivant auront 01/03/2011 puisque c'est la dernière date de contrat.

Si ce contrat aurait eu une troisième signature le 01/05/2011 les réponses auraient été :

Janv => 01/01/11

Fév => 01/01/11

Mars => 01/03/11

Avril => 01/03/11

Mai => 01/05/11

Juin => 01/05/11

Juil => 01/05/11

Aout => 01/05/11 ... jusqu'à décembre.

Cordialement

Fred

Bonjour

Pour économiser la mémoire et ne pas définir toute la colonne comme champ, création de champs dynamiques ajustables aux données:

La formule:

=DECALER(Base!$A$2;;;NBVAL(Base!$A:$A)-1)

est nommée Matricule

=DECALER(Base!$I$2;;;NBVAL(Matricule))

est nommée Début

et pour la suite à venir..

=DECALER(Base!$J$2;;;NBVAL(Matricule))

est nommée Fin

Formule en B2 de chaque Feuille mois (Matricielle à valider avec les 3 touches Ctrl+Maj+Entrée)

=GRANDE.VALEUR(SI((Matricule=A2)*(Début<DATE(2011;MOIS("1/"&STXT(CELLULE("nomfichier";$A$1);TROUVE("]";CELLULE("nomfichier";$A$1))+1;32))+1;1));Début);1)

Cordialement

37frt93.zip (15.08 Ko)

Heuuuuu quoi dire..... suis beuflé...

C'est pile poil ce que je souhaitais avec en plus un cours sur la fonction decaller.... que demander de mieux....

si peut-etre juste un petit truc (j'ose....) Y a pas moyen d'echapper à la Matricielle ? Avec la matricielle dès que tu cliques sur la formule la matricielle disparait et le problème c'est que ce fichier sera fait pour des utilisateurs ne connaissants pas grand chose à Excel. Alors si tu as une idée elle sera la bien venue.

Mais en tout cas merci de ce retour ultra rapide.

Fred

Bonjour Fred

Pour éviter les formules Matricielles, une solution radicale

A partir de la formule en B2

=GRANDE.VALEUR(SI((Matricule=A2)*(Début<DATE(2011;MOIS("1/"&STXT(CELLULE("nomfichier";$A$1);TROUVE("]";CELLULE("nomfichier";$A$1))+1;32))+1;1));Début);1)

on peut à la fois éviter la saisie Matricielle et la saisie de la Formule

Important: Sélectionner Janvier!B2

On bâtit à partir de la formule précédente, une formule générique (sans référence aux feuilles)

=GRANDE.VALEUR(SI((Matricule= !$A2)*(Début<DATE(2011;MOIS("1/"&STXT(CELLULE("nomfichier"; !$A$1);TROUVE("]";CELLULE("nomfichier"; !$A$1))+1;32))+1;1));Début);1)

et on nomme cette cellule (en saisie normale car les formules nommées ne sont pas sous forme matricielle)

ici (se rappeler qu'on nomme cette formule en étant en B2) j'ai nommé cette formule

Formule

La formule à mettre en B2 est donc

=Formule

et elle s'incrémente normalement

Cordialement (Je te mettrais le fichier ultérieurement, pb de débit Internet de Montagne insuffisant actuellement)

39frt93.zip (15.73 Ko)

Mais c'est pas vrai..... Tu es mon mentor... que dis-je un Dieu d'Excel.... Bref en deux mots mon sauveur capilaire car je me tirais les cheveux sur cette formule.

Moi qui pensais déjà connaitre bien certaines fonctions et bien la je me sens tout petit petit....

En tout cas un grand merci et si tu passes sur Paris je te paye une bonne bière pour le service rendu....

Bonne fin de journée à toi Amadéus.

Fred

Bonjour Amadéus.

Je reviens vers toi pour une petite question certainement bête pour toi mais qui je pense va m'aider à refaire ma base.

Dans une de tes réponses tu me mentionnes que nous pouvons economiser de la mémoire en faisant des champs dynamiques....

Amadéus a écrit :

Bonjour

Pour économiser la mémoire et ne pas définir toute la colonne comme champ, création de champs dynamiques ajustables aux données:.....

Jusque là je ne m'étais jamais posé cette question... Je subissais des temps de calculs assez longs ou je décochais la case calcul automatique.

J'utilise énormement les fonctions suivantes :

=INDEX(Feuil1!$1:$1048576;EQUIV(Feuil2!$A2;Feuil1!$A:$A;0);EQUIV(Feuil2!B$1;Feuil1!$1:$1;0))

Donc comme tu peux le voir je prends en recherche une colonne entière, une ligne entière dans un onglet entier...

Est-ce qu'avec la fonction Decaler dont tu m'as montré par tes différents retours je gagnerais un temps précieux dans le calcul ?

Merci à toi.

Fred

Bonjour

Quelle que soit la formule, il est évident que chercher sur 3000 lignes est plus facile que de chercher sur 1048576 lignes.

Maintenant, toi seul peut mesurer le temps gagné en regardant un coup avec un champ dynamique et un coup avec toute la colonne. Essaie les 2 solutions, tu verras bien.

Quoi qu'il en soit, l'utilisation des champs dynamiques est toujours profitable et notamment dès qu'il s'agit d'utiliser des matricielles puisque celles-ci (suivant la version d'Excel) refusent de fonctionner sur des colonnes entières et que les champs définis ("au pif") prévoient en général très large et augmentent les temps de calculs.

Cordialement

Rechercher des sujets similaires à "recherche donnees base"