Recherche dans un tableau

Bonjour,

Je fais appel à votre aide pour trouver une formule qui me permettrait dans le tableau ci-joint de trouver la première fois qu'apparaît par exemple la lettre E colonne B de mon tableau et la dernière fois que cette même lettre apparaît. Je souhaiterai que la formule me renvoit comme résultat dans mon exemple les années 2012 (première fois) et 2015 (dernière fois) de la colonne A.

J'espère que je me suis bien expliqué et vous remercie par avance de votre aide.

Cordialement,

Julien

47ex.xlsx (8.66 Ko)

Bonjour,

Une solution serait d'utiliser une colonne supplémentaire (la colonne C dans la pièce jointe); colonne qu'on peut masquer, si besoin.

Indiquer la valeur cherchée dans la cellule jaune

Bonjour le forum,

Sans colonne supplémentaire :

bonjour

Une autre solution , dans la première page avec mise en forme conditionnelle , et dans la deuxième page avec code

25ex-2.xlsm (18.36 Ko)

Bonjour,

Autre approche, par une fonction personnalisée :

Function TROUVERPREMDER(v As String, Tb As Range)
    Dim T(1), i%
    Application.Volatile
    If Tb.Columns.Count <> 2 Then Exit Function
    With Tb
        For i = 1 To .Rows.Count
            If .Cells(i, 2) = v Then
                T(0) = .Cells(i, 1).MergeArea.Cells(1, 1): Exit For
            End If
        Next i
        For i = .Rows.Count To 1 Step -1
            If .Cells(i, 2) = v Then
                T(1) = .Cells(i, 1).MergeArea.Cells(1, 1): Exit For
            End If
        Next i
    End With
    TROUVERPREMDER = T
End Function

Arguments de la fonction : la valeur à chercher en colonne 2 et la plage de recherche à deux colonnes. (Les lignes vides de séparation n'ont pas d'importance, elles seront ignorées).

Pour avoir les deux résultats, sélection 2 cellules en ligne, taper la fonction, et valider matriciellement (par Ctrl+Maj+Entrée).

[En prime dans le même module, une petite proc. pour constituer la liste de validation en E3. La liste est triée (bien que là elle était triée dès le prélèvement). La proc. est réutilisable en l'adaptant : il suffit de lui fournir une autre plage de valeurs à lister et une cible pour mettre la liste...]

Cordialement.

34julien-ex.xlsm (20.46 Ko)

Je vous remercie pour votre aide mais je ne m'en sors pas avec mon tableau. Du coup je vous partage le fichier que j'ai allégé sur lequel je travaille. Le tableur concerne les résultats en F1 de chaque année (onglet F1) ainsi que des statistiques (onglet Stats).

Si vous pouviez m'indiquer la formule dans les colonnes B et C de l'onglet Stats qui répond aux données de l'onglet F1.

Pour exemple si je prends le pilote Lewis Hamilton onglet Stats ligne 506 je dois retrouver en colonne B 2007 (Début de carrière en F1) et en colonne C 2017 (Année de fin en F1) qui sont extrait de l'onglet F1 du tableur

Merci d'avance pour votre aide

38f1.xlsm (115.77 Ko)

Bonjour,

En ce qui concerne ma proposition, ton fichier a 3 colonnes là où le modèle n'en avait que 2, il suffisait donc de changer trois 2 en 3 pour adapter.

Tu as déjà un liste de noms constituée, mais dont beaucoup ne figurent pas dans le tableau. Dans ce cas la formule renvoie 0. Tu peux mettre sous condition pour éliminer les 0, ou les inhiber par format de cellule.

Cordialement.

28julien-f1.xlsm (151.01 Ko)

Merci MFerrand mais je ne comprends pas car en sélectionnant 2 lignes puis en copiant collant ta formule que je valide par Ctrl+Maj+Entrée dans mon fichier j'obtiens un #NOM? sur les 2 lignes avec une erreur due à un nom non valide.

Comment est-ce possible?

Je précise au passage comme tu as pu le remarquer que sur le fichier que j'ai envoyé j'ai supprimé les résultats de 1950 à 1999 ainsi que des stats sur l'onglet stats afin que le fichier ne dépasse pas la taille autorisée d'où les pilotes absents que tu as remarqué

La fonction que j'ai fournie doit être dans un Module standard du classeur où tu l'utilises.

L'erreur #NOM? provient du fait que la fonction n'est pas trouvée dans le classeur, d'où nom de fonction qui ne correspond à rien.

Cordialement.

Ok et je dois faire quoi pour l'adapter sur mon fichier?

Tu copies le code de la fonction (en entier), et tu le colles dans un module standard.

Je suppose que tu sais ouvrir l'éditeur VBA, sinon Alt+F11 est le raccourci clavier pour l'ouvrir sur toutes versions d'Excel.

Dans l'éditeur, menu Insertion > Module, ou Clic droit dans l'explorateur de projets (ou sont listés les classeurs ouverts) sur le classeur final et Insertion dans le menu contextuel, puis Module.

Cordialement.

Tu supposes mal, j'ai le niveau d'une huître en Excel. Je me débrouille avec google pour trouver mes formules, ça s'arrête là!

J'ai essayé à nouveau ta méthode mais rien n'y fait je ne m'en sors pas.

N'existe t'il pas une solution plus simple sans passer par ces lignes de code avec des formules magiques comme l'a proposé mbbp?

Je viens également d'adapter sa méthode sur mon tableau mais seul la colonne Fin F1 fonctionne.

Encore un peu d'aide SVP, je devrais m'en sortir

Bonjour,

IJulienI a écrit :

N'existe t'il pas une solution plus simple sans passer par ces lignes de code avec des formules magiques comme l'a proposé mbbp?

Dans la solution proposée par mbbp, si mes souvenirs sont bons, il n'y avait plus de cellules fusionnées en colonne A et les années étaient recopiées sur chaque ligne.

Une formule "magique" comme tu dis, pourrait être, en B2 dans ton dernier fichier:

=SI(NB.SI('F1'!$C$1:$C$500;A2)=0;"";INDEX('F1'!$A$1:$A$500;MIN(SI('F1'!$C$1:$C$500=A2;LIGNE('F1'!$C$1:$C$500)))-INDEX('F1'!$B$1:$B$500;MIN(SI('F1'!$C$1:$C$500=A2;LIGNE('F1'!$C$1:$C$500))))+1))

À valider avec Ctrl+Shift+Enter. On peut peut-être simplifier un peu, si on défusionne?

Pour autant, il n'est pas certain que cette solution soit plus simple à comprendre et mettre en œuvre que la fonction personnalisée de MFerrand !?

Si tu dis qu'en outre, tu as supprimé de nombreuses lignes de ton fichier réel, ça risque de "ramer" sur un volume nettement supérieur ... mais au moins tu auras une solution plus simple, comme demandé

Sans répéter ce que vient de dire U.Milité, je crois qu'il faut que tu choisisses ce que tu veux obtenir...

D'abord, on peut tout faire avec des formules, cela risque seulement d'être à la fois un peu fastidieux à faire, long et un peu compliqué, et nécessité des aménagements avec diverses colonnes masquées pour des calculs intermédiaires qui ne doivent pas apparaître...

Une des raisons de l'utilisation de VBA est d'éviter ces complications...

Dans les cas simples, une fonction personnalisée permet de répondre à des cas non prévus par les fonctions génériques, permettant de substituer une formule simple à une qui serait excessivement longues ou plusieurs sans doute pas courtes non plus...

Mais cela a ses limites ! En termes de personnalisations, tes dernières spécifications font apparaître que tu veux des résultats multiples, intercalés les uns au milieu des autres, et sous des formes ne permettant pas de les déduire les uns des autres...

A partir de là, le plus économique devient un traitement complet par macro, qui lors de son exécution pourra conserver les résultats intermédiaires et les réutiliser pour d'autres calculs ou les restituer sous d'autres formes. Pour t'illustrer : lorsqu'on a déterminer que tu as une période du 3 au 8 (correspondant à la fois à des dates et des rangs de colonnes dans une plage, on peut inventorier la plage, décompter les valeurs qui y sont, et te fournir un résultat "du 3 au 8..." dans une cellule, "2A" et "4B" dans deux autres (mais la macro aura utilisé 8 à 10 variables pour calculer et composer les différents résultats...

Si tu travailles en formules, ce que tu ne vois pas en utilisant une macro, il faudra que tu l'aies sous une forme ou une autre sur ta feuille !

Ou bien tu limites très très fortement tes personnalisations...

Mais sauf erreur, tu as fourni un classeur qui contenait 5 modules vides. Comme ils ne sont pas apparus tout seuls, il a bien fallu que tu les insères ! Ceci fait il ne te reste plus qu'à copier du code et le coller dedans, ce qui est tout de même enfantin...

Cordialement.

Bonsoir,

Certains de mes commentaires dans mon dernier post concerneraient plutôt un autre sujet, qui présentaient des analogies formelle de traitement avec celui-ci. Si donc le paragraphe fournissant un exemple n'a rien à voir avec toi (et peut-être une partie du suivant), ignore ces éléments, et je te prie de m'en excuser...

Par contre, et par contrecoup, ce qui m'a fait m'en rendre compte, m'a fait constater que ton problème est nettement plus simple que celui auquel j'ai fait allusion. Que coller quelques lignes de code dans un module est une opération relativement simple, qu'il convient de toute façon de savoir faire lorsqu'on utilise Excel.

Tu te priverais d'une façon simple d'opérer.

Cordialement.

Merci U.Milité pour ta formule magique qui fonctionne à merveille et que je peux étendre sans ramer sur l'ensemble de la liste des pilotes de la colonne Début F1. Peut être aurais tu encore 5 min pour me donner la formule qui irait dans la colonne Fin F1? Merci d'avance

Merci au passage à MFerrand pour son aide et je ne mets pas en doute ses explications mais c'est trop complexe pour moi. Il me faudra progresser pour comprendre ton langage .

Bonjour,

Tu ne me croiras peut-être pas, mais il suffit de remplacer les 2 MIN, figurant dans la formule, par ... MAX

Ne pas oublier de valider avec la combinaison Ctrl+Shift+Enter et recopier ensuite vers le bas

Ce qui m'inquiétait au niveau du volume, ce n'est pas tellement la liste des pilotes en feuille Stats, mais les 50 années que tu avais initialement dans ton fichier! (les plages dans la formule, allant jusqu'en ligne 500 devront donc être adaptées aussi!)

Il reste que, même si elle t'effraie moins au départ, la formule ne te paraît visiblement pas plus simple à adapter que la proposition de MFerrand

Merci pour les formules U.Milité mais en regardant bien les résultats il y a des erreurs sur certains pilotes et je ne trouve pas la raison.

J'ai donc réessayé la proposition de MFerrand avec succès cette fois-ci. Je constate toutefois une certaine lenteur des résultats et lorsque je fais une modification ça rame pas mal. Décidément c'est bien compliqué tout ça.

Merci beaucoup pour votre aide et votre implication.

Tu as combien de lignes ?

Je peux essayer de te la scinder en 2 fonctions, une pour le premier, une pour le dernier : en dématricialisant on peut peut-être gagner...

Cordialement.

Merci c'est gentil.

Sur mon premier onglet F1 j'ai 3100 lignes et sur l'onglet Stats qui référence tous les pilotes j'ai 830 lignes

Rechercher des sujets similaires à "recherche tableau"