Excel : problème de recherche sur un terme approximatif
Fermé
Sined9612
Messages postés
5
Date d'inscription
lundi 22 septembre 2014
Statut
Membre
Dernière intervention
23 septembre 2014
-
Modifié par pijaku le 23/09/2014 à 15:14
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 26 sept. 2014 à 07:54
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 26 sept. 2014 à 07:54
A voir également:
- Excel : problème de recherche sur un terme approximatif
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
- Déplacer une colonne excel - Guide
3 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
23 sept. 2014 à 15:14
23 sept. 2014 à 15:14
Bonjour,
Dans ta cellule Cell, il y a un ou plusieurs mots? Sont-ils tous séparés par un espace?
Dans ta cellule Cell, il y a un ou plusieurs mots? Sont-ils tous séparés par un espace?
via55
Messages postés
14509
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
2 janvier 2025
2 739
23 sept. 2014 à 15:16
23 sept. 2014 à 15:16
Bonjour
La seule possibilté est me semble-t-il de lister tous les cas possibles
Le faire dans une colonne dans une autre feuille (par ex colonne A feuille2) en faisant précéder les pluriels : mettre par exemple en A1 poissons puis en A2 poisson, en A3 chèvres, en A4 chèvre , en A5 chevres, en A6 chevre etc
remplacer dans la macro les 2 lignes avec Replace par celles ci :
Pour intégrer de nouveaux mots il suffit de modifier la liste en feuille 2 (et éventuellement de rallonger la boucle For)
Cdlmnt
La seule possibilté est me semble-t-il de lister tous les cas possibles
Le faire dans une colonne dans une autre feuille (par ex colonne A feuille2) en faisant précéder les pluriels : mettre par exemple en A1 poissons puis en A2 poisson, en A3 chèvres, en A4 chèvre , en A5 chevres, en A6 chevre etc
remplacer dans la macro les 2 lignes avec Replace par celles ci :
For n = 1 To 10 ' pour 10 possibilités, à adapter Var = Replace(Var, Sheets("Feuil2").Range("A" & n), UCase(Sheets("Feuil2").Range("A" & n))) Next
Pour intégrer de nouveaux mots il suffit de modifier la liste en feuille 2 (et éventuellement de rallonger la boucle For)
Cdlmnt
Sined9612
Messages postés
5
Date d'inscription
lundi 22 septembre 2014
Statut
Membre
Dernière intervention
23 septembre 2014
23 sept. 2014 à 16:07
23 sept. 2014 à 16:07
il y a plusieurs mots par cellule et ils sont séparés par un pipe, car c'est une extraction d'un logiciel externe.
Merci en tout cas de vos retours
Cdlt
Merci en tout cas de vos retours
Cdlt
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
25 sept. 2014 à 16:44
25 sept. 2014 à 16:44
Bonjour,
J'avais oublié ce sujet...
Alors pourquoi faire simple lorsque l'on peut faire compliqué :
J'avais oublié ce sujet...
Alors pourquoi faire simple lorsque l'on peut faire compliqué :
Sub test() Dim i As Integer, j As Integer, Nb As Integer, ContenuCorrige As String For i = 1 To 4 'lignes de 1 à 4 Nb = CInt(Len(Cells(i, 1).Value) - Len(Replace(Cells(i, 1), "|", ""))) ContenuCorrige = "" For j = 0 To Nb ContenuCorrige = ContenuCorrige & MaFonction(CStr(Split(Cells(i, 1).Value, " |")(j))) & " |" Next j Cells(i, 2) = Left(ContenuCorrige, Len(ContenuCorrige) - 2) Next i End Sub Function MaFonction(Mot As String) As String Select Case True Case Mot Like "*viande*" MaFonction = UCase(Mot) Case Mot Like "*ch*vre*" MaFonction = UCase(Mot) Case Mot Like "*poisson*" MaFonction = UCase(Mot) Case Else MaFonction = Mot End Select End Function
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
Modifié par eriiic le 25/09/2014 à 19:42
Modifié par eriiic le 25/09/2014 à 19:42
Bonjour à tous,
Juste un petit détail pijaku.
Peut-être Case Mot Like "*ch?vre*" au cas où...
Et tant que j'y suis j'aurais mis le split dans une variable au début de la boucle pour éviter d'avoir à le faire x fois. En plus on récupère l'index de fin de boucle avec le ubound().
Ca fait toujours ça de travail en moins sur les chaines si jamais c'est un très grand tableau.
C'est juste pour m'occuper un peu parce qu'il n'y a pas grand chose sur le forum. Je ne veux pas passer pour le chiant... ;-)
eric
Juste un petit détail pijaku.
Peut-être Case Mot Like "*ch?vre*" au cas où...
Et tant que j'y suis j'aurais mis le split dans une variable au début de la boucle pour éviter d'avoir à le faire x fois. En plus on récupère l'index de fin de boucle avec le ubound().
Ca fait toujours ça de travail en moins sur les chaines si jamais c'est un très grand tableau.
Sub test() Dim i As Integer, j As Integer, Nb As Integer Dim tablMots For i = 1 To 4 'lignes de 1 à 4 tablMots = Split(Cells(i, 1).Value, "|") For j = 0 To UBound(tablMots) tablMots(j) = MaFonction(tablMots(j)) Next j Cells(i, 2) = Join(tablMots, "|") Next i End Sub Function MaFonction(ByVal Mot As String) As String Select Case True Case Mot Like "*viande*" MaFonction = UCase(Mot) Case Mot Like "*ch?vre*" MaFonction = UCase(Mot) Case Mot Like "*poisson*" MaFonction = UCase(Mot) Case Else MaFonction = Mot End Select End Function
C'est juste pour m'occuper un peu parce qu'il n'y a pas grand chose sur le forum. Je ne veux pas passer pour le chiant... ;-)
eric
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
25 sept. 2014 à 19:51
25 sept. 2014 à 19:51
Salut Eriiic,
Tu as entièrement raison.
ch*vre est probablement source d'erreur (chanvre par exemple serait accepté), ch?vre* l'est beaucoup moins...
Idem pour le Split avant boucle...
En revenant sur ce sujet, je me pose une question... Donc je te la pose...
N'y a t'il pas moyen de limiter le nombre de caractères lorsqu'on utilise le caractère *?
Dans le cas qui nous intéresse,
Tu as entièrement raison.
ch*vre est probablement source d'erreur (chanvre par exemple serait accepté), ch?vre* l'est beaucoup moins...
Idem pour le Split avant boucle...
En revenant sur ce sujet, je me pose une question... Donc je te la pose...
N'y a t'il pas moyen de limiter le nombre de caractères lorsqu'on utilise le caractère *?
Dans le cas qui nous intéresse,
ch?vre*autorise chevrettes par exemple. (je sais l'exemple n'est pas top)... Ne peut on pas empêcher cela en restreignant à une seule lettre supplémentaire, sans en faire toute une fonction supplémentaire?
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
25 sept. 2014 à 20:27
25 sept. 2014 à 20:27
Pour un seul caractère le joker c'est ?
Après pour plus de possibilité c'est les regex, mais plus abscon... J'suis encore un peu étanche à ces trucs ;-)
eric
Après pour plus de possibilité c'est les regex, mais plus abscon... J'suis encore un peu étanche à ces trucs ;-)
eric
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
26 sept. 2014 à 07:54
26 sept. 2014 à 07:54
Salut,
C'est un peu dans l'esprit des regex que je pensais pouvoir trouver une solution...
Dans le style : "ch?vr*{1, 2}" ou seraient donc acceptées tous les mots correspondants avec 1 ou 2 lettres après "vr"...
Mais bon, on ne peut pas gagner à tous les coups.
C'est donc foutu sans regex...
Bonne journée à toi.
ps : n'hésite pas à passer sur tous mes sujets, tu y seras toujours le bienvenu. Deux têtes valent mieux qu'une.
C'est un peu dans l'esprit des regex que je pensais pouvoir trouver une solution...
Dans le style : "ch?vr*{1, 2}" ou seraient donc acceptées tous les mots correspondants avec 1 ou 2 lettres après "vr"...
Mais bon, on ne peut pas gagner à tous les coups.
C'est donc foutu sans regex...
Bonne journée à toi.
ps : n'hésite pas à passer sur tous mes sujets, tu y seras toujours le bienvenu. Deux têtes valent mieux qu'une.