RechercheH Excel

Résolu/Fermé
Perlogic - 16 mai 2009 à 22:54
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 - 19 mai 2009 à 15:02
Bonjour les amis,

J'ai trié le nom des mois de façon ascendente sur une ligne, tel que: Août, Avril, Décembre, etc

Le problème est le suivant:

Si je cherche, l'élément exact, ça fonctionne, mais si je recherche avec les premières lettres significative, alors il me retourne l'élément précédent et si je recherche quelque chose qui irait avant le premier élément, j'obtient une erreur.

voici ma fonction:   RECHERCHEH("janvier";$IK$3:$IV$3;LIGNE(1:1))  ---> me retourne: Janvier, trouvé
                            RECHERCHEH("jan";$IK$3:$IV$3;LIGNE(1:1))       ---> me retourne: Février, non trouvé
                        et RECHERCHEH("aaa";$IK$3:$IV$3;LIGNE(1:1))       ---> me retourne:   #N/A, erreur




Note: Ma matrice est entre des mois est entre IK3:IV3, et la chaîne de caractère sera remplacée par une cellule.

Comment puis-je solutionner si je veux faire ces trois types de recherche?

Je ne veux pas valider la cellule avec une liste déroulante.

Le but ultime est de trouver une formule pour valider la saisie.

Merci de votre précieuse aide

Perlogic
A voir également:

11 réponses

eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
17 mai 2009 à 23:57
la correction automatique est-elle lié au classeur ou à l'environnement?
Ca demande confirmation par des tests mais sûrement à l'environnement.

en VBA, je sais que ça va fonctionner, mais je ne sais pas comment l'écrire pour le moment
Ca pourrait être qcq chose comme ça :
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim mois As Variant, i As Long, j As Long, k As Long
    mois = Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre")
    If Intersect(Target, [B2:B50]) Is Nothing Then Exit Sub
    For i = 0 To 11
        If UCase(Left(mois(i), Len(Target.Value))) = UCase(Target.Value) Then
            k = k + 1
            j = i
        End If
    Next i
    If k = 1 Then Target.Value = mois(j)
End Sub

Tu saisis une ou des lettres (avec les accents), si la correspondance est unique le mois est mis.
Là ce n'est actif que sur la plage B2:B50 de la feuille où est collé ce code.
Par contre, contrairement à la complétion automatique, il faut avoir fait Entrée pour que le code s'exécute, pas le choix.

eric
1
Bonjour

Encore moi, j'ai trouvé quelque chose, mais je n'arrive pas à valider la cellule avec ça. Voici la fonction compliqué que j'ai trouvé:

=SI(B4=GAUCHE(RECHERCHEH(B4;IK3:IV3;LIGNE(1:1));NBCAR(B4));RECHERCHEH(B4;IK3:IV3;LIGNE(1:1));INDEX(IK3:IV3;EQUIV(B4;IK3:IV3)+1))

En sommes la condition VRAI du si renvoie le mois trouvé, sinon il renvoie l'élément suivant.

Bien sur quand je valide la cellule, je vais dans le menu DONNÉES, puis VALIDATION.., je choisie la validation personnalisé et quand j'entre la formule trouvé ça fonctionne pas, j'ai tenté aussi de remplacer la fonction SI par ET, mais ça fonctionne pas mieux, j'obtiens toujours une erreur.

Ma formule fonctionne bien dans une cellule, mais pas comme fonction de validation.

Perlogic
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
16 mai 2009 à 23:43
Bonsoir,

- pour le 2 ça serait plutôt :
RECHERCHEH("jan*";$IK$3:$IV$3;1,faux)
Sur 3 lettres pas terrible, avec jui* tu auras toujours juin et jamais juillet...

- pour le 3 tu ne pourras jamais empecher excel de retourner une valeur d'erreur s'il ne trouve pas. A toi de la tester et d'agir en conséquence...

Ceci dit c'est une drôle d'idée d'utiliser rechercheh() pour valider ce qui ressemble à une date (?).
Si tu donnais tes critères de validation ?

eric
0
Merci erric,

Effectivement ce que tu me proposes ne fonctionne pas très bien, avec les premières lettres significative. Si tu mets le paramètre FAUX il te retourne l'élément précédent si la valeur recherché n'est pas exact.

Ma formule compliqué ci-haut fonctionne dans les deux cas (seulement si la formule est tapée dans une cellule).

Ce que je recherche n'est pas une date, tel que je l'ai décris dans mon première message, ce sont le nom des mois, tel que Janvier, Février, Mars, Avril, etc. Bien sur pour que Excel puisse faire des recherchent je devais trier le nom des mois, ce que j'ai fait : Août, Avril, Décembre, Février, etc.

J'ai à partir de B2:B... des cellules où je demande à l'utilisateur d'entrer le nom des mois, par exemple:
B2:  Avril
B3: Juillet
B4: Septembre
etc


Je désire valider la saisie pour que l'utilisateur ne puisse qu'en entrer le nom des mois, je veux lui offrir le raccourcis d'entrer les premières significatives par exemple:
ja nvier, D écembre, juin, juil let, Ao ût, etc.

Donc avec l'option de la validation, je pouvais manipuler les erreurs, la formule semble n'accepter qu'un résultat logique, VRAI ou FAUX. Moi je veux retourner le résultat de ma recherche et si je ne trouve pas alors je retourne non pas une erreur, mais une Information.

Pendant mon développement, j'ai ma formule (identique à mon test de validation) dans une cellule(E25) qui vérifie ce que j'ai en B2, et en B2 j'ai affecté cette cellule avec une validation. donc lorsque je modifie B2 j'obtiens mon résultat correct en E25, mais B2 la validation ne fonctionne pas :(

De plus en plus je pense que je vais devoir utiliser du VBA. Il y a t'il une possibilité sans utiliser le VBA?

Merci beaucoup de votre aide.

Perlogic
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
17 mai 2009 à 10:48
Bonjour,

Effectivement ce que tu me proposes ne fonctionne pas très bien, avec les premières lettres significative.
C'est ce que TU voulais dans ton exemple, rechercher sur les 3 1ères lettres : RECHERCHEH("jan";$IK$3:$IV$3;LIGNE(1:1))

Si tu mets le paramètre FAUX il te retourne l'élément précédent si la valeur recherché n'est pas exact.
Non, avec VRAI recherchev() te ramène la valeur la plus proche si non trouvé, avec FAUX tu obtiens #N/A

Et ce que tu veux faire est une autocomplétion et pas du tout une validation.

Tu peux utiliser l'autocomplétion d'excel. Si la saisie du mois est colonne B par exemple, de B1 à B12 tu saisis tes mois et tu masques les lignes 1:12.
en B13 si tu saisis F il va te proposer Février que tu valides par Entrée, si tu tapes A il attendra une autre lettre car plusieurs mois commencent par A.
Ca n'est valable que si toutes les cellules au dessus de celle de ta saisie sont remplies.
S'il peut ne pas y avoir de saisie il ne reste que vba.
Et tu peux compléter cette autocomplétion par une validation sur liste.

Au passage, si tu veux travailler avec des listes c'est plus facile si elles sont verticales plutôt qu'horizontales

eric
0
Bonjour erric,

Tu me fais bien rire eriic, on dirait que t'arrive à lire tout ce que j'ai dans la tête. Énuméré les mois en colonne par exemple B1 à B12, je l'ai fais, mais j'ai pas ça. J'aimerais cacher la façon que j'ai utilisé. J'ai caché la matrice des mois à l'horizontale pour que l'usager aille moins de chance de supprimer les lignes de ma matrice

Si seulement il existait une fonction qui retourne l'élément le plus proche mais le SUIVANT, plutôt que le précédent, ce serait merveilleux.

Mon expression:
=SI (B4=   GAUCHE( RECHERCHEH( B4;IK3:IV3;LIGNE(1:1) );NBCAR(B4) );   // condition
                R­ECHERCHEH(B4;IK3:IV3;LIGNE(1:1));    // VRAI, s'il trouve exact le nom du mois
                INDEX(IK3:IV3;EQUIV(B4;IK3: IV3)+1) )   // SINON, on retourne l'élément suivant


Fonctionne merveilleusement bien, mais je ne peux pas l'utiliser dans une validation de cellule. Comme t'as pu lire précédemment je ne cherche pas seulement les 3 premières lettres, par ce que il aurait un problème avec juin et juillet, mon expression tiens compte des n premières lettres avec NBCAR() et je compare avec GAUCHE des n premières lettres du mois trouvé.

Je cherchais la solution dans Excel car en VBA je ne suis pas le meilleur.

As-tu déjà utilisé la validation de cellule avec une fonction personnalisé?

Perlogic
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
17 mai 2009 à 15:45
parce que ça ça ne te va pas ?
0
Bonjour Eriic

Oui j'ai fait ce test semblable, j'avais définis de B1:B12 les mois de janvier à décembre et j'ai masqué les lignes en B14 l'usager devait entrer ses valeurs. Mais j'aime pas car l'usager vois qu'il a des lignes de cacher plus haut.

J'ai bien aimé le site où l'on peux déposer un fichier, à cette effet je t'invite à aller voir mon test: http://www.cijoint.fr/cjlink.php?file=cj200905/cijB2CJXZf.xls

En B l'usager doit entrer les mois, et en C l'effet de ma formule. c'est cette formule que j'aimerais affecté à B.

Tu me diras ce que tu en penses.

Mille merci Eriic.

Perlogic
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
17 mai 2009 à 18:51
Re,

Tu ne peux pas faire ça avec une validation. Une validation regarde si le contenu d'une cellule est conforme aux critères définis, c'est tout.
A ce moment là va plutôt voir dans menu 'outils / options / orthographe / options de correction automatique...'. Là tu peux définir des raccourcis. Par exemple 'remplacer :' ja -> 'par :' janvier.
Ou sinon en vba mais le résultat sera le même.
eric
0
Bonjour Eric

Dit moi la correction automatique est-elle lié au classeur ou à l'environnement? Par exemple si j'envoie mon classeur à quelqu'un, aura t-il l'autocorrection automatique? Je vais pouvoir valider comme t'avais fait dans ton exemple, pour m'assurer que c'est un mois?

J'avais pensé à ça, mais je voulais voir si je pouvais faire mieux.

Je vais tout même m'essayer en VBA, je sais que ça va fonctionner, mais je ne sais pas comment l'écrire pour le moment, mais je trouverai. Je vais enregistrer mes actions et Excel s'occupera de me faire ma macro VBA.

J'ai appris que la validation que j'ai appliqué n'est pas valide, comme tu m'as dit, car seul formule accepté est que la formule retourne une valeur booléenne, VRAI ou FAUX. Moi je cherchais le moyen de retourner une chaine, c'est pour cela que ça ne fonctionne pas.

Merci beaucoup Eric, maintenant que j'ai plusieurs solutions, j'arriverai à faire quelque chose avec ça.
0
Merci Eric,

J'en demandais pas tant :)

Merci encore, ça fonctionne bien.

Il me reste une petite chose à faire, mais je ne veux pas t'en parler, je veux le faire moi même :-D

Non je vais le dire, mais je veux le faire moi même, il manque la validation, si le mois n'as pas été trouvé alors revenir sur la cellule et affiche MSGBOX de l'avertissement. Ça me parais pas trop difficile à faire. :)

Merci beaucoup pour ce que tu as fait..


Perlogic
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
19 mai 2009 à 15:02
De rien et merci pour le retour.
Bonne continuation :-)
0