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
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
A voir également:
- RechercheH Excel
- Liste déroulante excel - Guide
- Formule excel - Guide
- Si et excel - Guide
- Aller à la ligne excel - Guide
- Mise en forme conditionnelle excel - Guide
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
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 :
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
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
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
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
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
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
- 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
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:
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
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
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
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
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
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:
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
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 RECHERCHEH(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
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
17 mai 2009 à 15:45
parce que ça ça ne te va pas ?
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
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
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
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
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
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.
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.
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
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
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
19 mai 2009 à 15:02
De rien et merci pour le retour.
Bonne continuation :-)
Bonne continuation :-)