Excel : problème de recherche sur un terme approximatif
Sined9612
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je cherche à mettre en majuscule certains mots d'une plage de données.
J'ai réussi à faire, mais j'ai un petit souci au niveau de l'écriture :
Le code est le suivant :
Pour chaque cellule de la plage de cellules traitées
J'ai pris l'exemple où tous les termes poisson et viande de ma plage de cellules seront mis automatiquement en majuscules.
Mon problème est que si une cellule contient poissons, ma macro l'ignorera.
Y a t'il possibilité dans ma macro de gérer les pluriels où les accents dans ma fonction replace.
Merci de votre réponse
Cordialement
Je cherche à mettre en majuscule certains mots d'une plage de données.
J'ai réussi à faire, mais j'ai un petit souci au niveau de l'écriture :
Le code est le suivant :
Pour chaque cellule de la plage de cellules traitées
Var = Cell.Value Var = Replace(Var, "poisson", UCase("poisson")) var =replace(var,"viande",Ucase("viande")) cell.value=var
J'ai pris l'exemple où tous les termes poisson et viande de ma plage de cellules seront mis automatiquement en majuscules.
Mon problème est que si une cellule contient poissons, ma macro l'ignorera.
Y a t'il possibilité dans ma macro de gérer les pluriels où les accents dans ma fonction replace.
Merci de votre réponse
Cordialement
A voir également:
- Excel : problème de recherche sur un terme approximatif
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel moyenne - Guide
3 réponses
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
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
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
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
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?
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.