Recherche avec orthographe erronée

Bonjour à tous,

Après recherche non concluant ici et là-bas, je ne trouve rien

J'ai un combobox (avec liste sans fautes d'orthographes), et un tableau de données (avec fautes d'orthographes), j'aimerai qu'il recherche et trouve dans le tableau, un critère avec orthographe similaire!

Comment mettre cela dans mon module en sachant que cela doit-être général à mon userform?

Merci encore une fois de votre aide

J'ai trouvé çà:

Option Compare Text

Et j'ai remplacé cela

If C.Text Like

par

If C.Value Like

Un début ou mauvais départ???

Bonsoir,

Oui, il faut mettre "Option Compare Text" car il permet de ne pas contrôler la casse, c'est à dire que majuscule ou minuscule, aucune importance.

Par contre c'est beaucoup plus compliqué dès qu'il y a des accents ou des fautes d'orthographes, parce que s'il faut mettre une table de correspondance ou scinder la recherche d'un mot en x recherche d'extrait de mot, l'algorithme de recherche est beaucoup plus compliqué et moins fiable, car on risque de trouver des éléments non souhaités.

Regarde s'il n'est pas possible de corriger ces fautes d'orthographe avant d'utiliser la recherche.

Bonsoir Benead,

Merci de me répondre,

Ouah, franchement je ne le voyais pas comme cela, Et y-a-t-il une autre solution?

Car vu mon tableau, cela m'ai impossible de le reprendre en corrigeant toutes les fautes, beaucoup de copier/coller de données de divers sources...

Par exemple, ne peut-il pas rechercher seulement sur les 3 ou 4 premières lettres d'un mot?

A+

Bonjour,

Je reviens vers vous, car je n'ai pas eu de nouvelles....

Lors d'une recherche, comment faire pour qu'il ne recherche que sur les 1ères lettres d'un mot?

Pourquoi dans mon tableau, il ne trouve pas un mot (sans faute d'ortho) et qu'il trouve les autres sans souci, d'où cela peut-il provenir?

Franchement je cale .....

Bon weekend à vous

Bonsoir,

Concernant le mot qu'il ne trouve pas dans ta feuille, une recherche avec Excel donne ce même résultat ?

Si tu veux plus d'explications sur cette anomalie, crée un classeur vierge avec simplement un copier-coller de la cellule contenant ce mot, teste bien que l'erreur persiste et mets-la sur ce fil, je regarderai.

Pour l'utilisation de Like, la syntaxe est celle-ci :

Sub Test()
   If ActiveCell.Text Like "*admission*" Then MsgBox "Trouvé"
End Sub

Tu peux utiliser les caractères génériques *, # et ?

* remplace toute une série de caractères, # un nombre et ? un caractère alphabétique.

Si tu veux trouver le mot admission n'importe ou dans la phrase, il faut mettre "*admission*"

Si tu veux trouver ce même mot en début de phrase : "admission*" et en fin de phrase "*admission"

Si tu veux trouver ce mot avec des fotes d'ortografe, tu peux utiliser * plusieurs fois dans le mot : "*d*ss*n*, mais attention car si tu as une phrase avec plusieurs mots, il y a de forte chance que toutes ces lettres soient dans cet ordre dans la phrase.

Si tu veux, par exemple, trouver le mot orthographe avec ou sans faute : "*or*gr*e" (Orthographe et ortografe sont trouvés)

Si tu veux trouver tout les mots tata, titi, toto et tutu en une seule recherche : "*t?t?*"

Si tu veux trouver le caractère *, il faut mettre entre crochet [*], donc si tu veux le trouver n'importe ou dans la cellule : "*[*]*"

Si tu veux trouver un mot qui comprend un nombre aléatoire : "*feuil#*", seront exclus tous les mots qui ont une lettre après feuil, par exemple feuille.

Tu peux aussi utiliser une liste de caractères dans ta comparaison, pour plus d'explications, quand tu es dans VBE, tu sélectionnes le mot Like puis tu fais F1, tu auras une aide spécifique et très complète sur cet opérateur.

Salut Benead,

Très complet ce que tu viens de m'écrire, merci beaucoup,

Je te mets le fichier en question, et fais une recherche dans "pathologie" et le mot "acné", et tu verras....

Pour les autres, enfin en partie cela fonctionne, tu trouveras peut-être des erreurs dans mon code, alors c'est open vas-y.....

J'ai d'autres questions en suspend mais pas dans ce fil et pas seulement sur ce forum...

Merci de m'aider c'est cool....

A+

Ps: le fichier joint comporte des erreurs, a ne pas prendre en compte car il y a eu des modifs entre temps, mais le code est sensiblement le même....

Bonsoir,

Bon, j'ai regardé ton code sur mon ordi du boulot, car je suis en *Office 64 bits" à la maison, et j'ai des problèmes avec l'ocx mscomctl, mais c'est un autre problème.

Le mot acné est introuvable simplement car dans ta table de chargement des pathologies, tu as écris acné suivi d'un espace. Ce que je te conseille de faire c'est d'utiliser la fonction Trim pour supprimer ces espaces parasites à chacun des combobox :

dim sPatho as String
With recherche_phyto
...
sPatho = Trim(.ComboBox_patho.Text)
...
End With

Ensuite tu fais ta recherche avec sPatho, en plus cela devrait améliorer l'exécution de ton code, car plus besoin d'aller lire le texte qu'il y a dans le combobox.

Evite de mettre des expressions à ralonge mais plutôt des mots clets :

recherche_phyto.ListView1.ListItems(recherche_phyto.ListView1.ListItems.Count).ListSubItems.Add , , ActiveCell.Offset(0, D)

se remplace par exemple par :

UF.LsVPh.ListItems(UF.LsVPh.ListItems.Count).ListSubItems.Add , , ActiveCell.Offset(0, D)

C'est ce que je fais pour ne pas avoir des lignes trop longues

Si tu veux considérablement améliorer l'exécution de ton code, il ne faut pas sélectionner ou activer les feuilles et les cellules, VBA peut travailler sans cela et du coup, beaucoup plus vite et cela se voit sur des bases de données de milliers de lignes :

.Cells(c.Row, 2).Activate
ActiveCell.Offset(0, D)

se remplacent par

.Cells(c.Row, 2).Offset(0, D)

Bonjour Benead,

Merci d'avoir regardé,

Juste pour un espace, c'est c..., je cherche depuis par mal de temps, juste pour ça...

Pour ce code:

dim sPatho as String
With recherche_phyto
...
sPatho = Trim(.ComboBox_patho.Text)
...
End With

J'imagine qu'il faut le retranscrire pour chaque combobox?

Et le mettre dans :

Private Sub patho_Change()
    '[L1] = patho
End Sub

Evite de mettre des expressions à rallonge mais plutôt des mots clefs :

C'est ce que je te disais, le fichier que je t'ai joint comportait des erreurs et code à rallonge, je te joins le nouveau fichier avec les simplifications de code, c'est plus lisible tu verras....

Tu pourras également apercevoir qu'il y a un nouveau userform (Usfimpres), mais j'ai encore besoin de travailler dessus. De plus 2 Lv, comme tu l'as vu, qu'il faut que je mettre en relation avec les recherches, Lv2 pour les FT et Lv3 pour prescriptions, mais bon, je reviendrai vers toi si tu le veux bien pour te demander conseils.....

Bonne soirée

Editer le 20/04 à 21h10

Je viens de faire les modifs, et même si je laisse l'espace, cela ne change rien avec le code que tu m'as fourni, je pense que j'ai dû faire une erreur quelque part???

Pour moi tu peux remplacer ceci :

Private Sub patho_Change()
   With recherche_phyto
      sPatho = Trim(.patho.Text)
   End With
End Sub

par ceci :

Private Sub patho_Change()
   Dim sPatho As String
   sPatho = Trim(patho.Text)
End Sub

Quand tu es dans l'Userform, tu n'es pas obligé de mettre le parent du contrôle :

recherche_phyto = me.patho = pato

Les 3 expressions sont valides, dans tous les cas, évite de nommer l'UF par son nom quand tu es dans le module de l'UF, parce que c'est inutile et en cas de renommage, il faut tout renommer, utilise plutôt le mot clef Me qui désigne l'instance de la classe en cours, donc quand tu es dans un UF, il le désigne implicitement, sans que tu aies besoin de le nommer. Personnellement, quand je suis dans un userform, je nomme les contrôles directement sans mettre le nom de l'UF ni Me.

Pour en revenir à ton problème, je ne mettrais pas le trim comme tu l'as fait, c'est à dire dans l'événement, mais simplement en début de la procédure de recherche

    dim sPatho as String
    With recherche_phyto
    ...
    sPatho = Trim(.ComboBox_patho.Text)
    ...
    End With

Ensuite tu fais la comparaison avec le résultat sPatho (et idem pour les autres combobox) :

.../.... And c.Offset(0, 4) Like "*" & sPatho & "* .../...

Concernant la recherche du mot acné, sans faire de modification, la recherche à trouvé une ligne dans ton second fichier parce que tu as supprimé des lignes par rapport au premier (qui en avait plusieurs dizaines de lignes ou ce mot était présent). Il trouve la ligne 191.

Tu as encore laissé .Cells(c.Row, 2).Activate dans la recherche... cela ne sert à rien, sauf à ralentir l'exécution de ton code comme je te l'ai expliqué dans mon précédent message

Re,

Tu as encore laissé .Cells(c.Row, 2).Activate dans la recherche... cela ne sert à rien, sauf à ralentir l'exécution de ton code comme je te l'ai expliqué dans mon précédent message

Désolé

Je fais les modifs demain, car je suis au boulot et je ne peux pas modifier mon fichier, je suis en lecture seul ici.

A+

Bonjour Benead, et le forum

Niquel tout fonctionne avec ce code

Dim sPatho As String
   sPatho = Trim(patho.Text)

je l'ai appliqué au 3 autres combobox

idem avec celui-là:

.../.... And c.Offset(0, 4) Like "*" & sPatho & "* .../...

Et pour ça:

.Cells(c.Row, 2).Offset(0, D)

Je ne dois pas le faire correctement car il me colle des erreurs, je sais pas comment faire???

Et enfin comme je te le disais

Tu pourras également apercevoir qu'il y a un nouveau userform (Usfimpres), mais j'ai encore besoin de travailler dessus. De plus 2 Lv, comme tu l'as vu, qu'il faut que je mettre en relation avec les recherches, Lv2 pour les FT et Lv3 pour prescriptions, mais bon, je reviendrai vers toi si tu le veux bien pour te demander conseils.....

Après tes réponses, je passerai le sujet en résolu,

Pourrai-je revenir vers toi afin d'avoir des éclaircissements et conseils à propos du Quote au-dessus?

Merci encore

A+

Ps: Révision du fichier ci-dessous

Bonjour à tous,

Cela fait 5 jours que je lis : "orthographe érronné".

Alors je craque.

Sans correcteur d'orthographe : orthographe erronée

mbbp

Salut à tous,

Et oui, je me doutais que cela allait faire réagir au moins une personne, chose faite.....

Merci pour ton analyse

A+

Bonjour,

J'ai adapté ton code, mais si il y a une chose à ne pas faire dans une base de données, c'est bien de fusionner les cellules. Ceci dit, cela fonctionne, ne remets pas ta BD maintenant.

Voici une adaptation sans activation de la feuille, ni utilisation d'ActiveCell :

Sub Recherches_plantes()

'Déclaration des variables
   Dim c As Range, D As Byte, i
 ' C représente chaque cellule de la plage B4 à B et le numéro de la dernière ligne de la colonne B
 ' D représente le nombre de colonnes de la Lv à remplir sauf la première

'Supprimer les Espaces intempestifs dans les listes
    Dim sPatho As String
sPatho = Trim(patho.Text)

    Dim sPlantes As String
sPlantes = Trim(plantes.Text)

    Dim sConstchimiq As String
sConstchimiq = Trim(constchimiq.Text)

    Dim sActpharm As String
sActpharm = Trim(actpharm.Text)

'Suspension du raffraichissement de l'écran
   Application.ScreenUpdating = False

'Vidage du contenu de la listview
   Lv1.ListItems.Clear

  With Sheets("Listes plantes")
'      .Activate

     'Définition de la plage de recherche sur la feuille active
     For Each c In .Range("B4:B" & .Range("B" & Rows.Count).End(xlUp).Row)

        'Critères de recherche des différents Combobox
        'Si le contenu du Combobox1 correspond aux critères et que le contenu du Combobox2 et que le contenu du Combobox3 etc
        If c.Value Like "*" & plantes.Text & "*" And c.Offset(0, 4) Like "*" & constchimiq.Text & "*" And c.Offset(0, 5) Like "*" & patho.Text & "*" _
            And c.Offset(0, 3) Like "*" & actpharm.Text & "*" Then
                If c.Address <> "$B$2" Then  'And .Cells(C.Row, 2) <> ""
'                .Cells(c.Row, 2).Activate
                lig = c.MergeArea.Row
                    'On rempli la première colonne de la listview avec la valeur de la variable
                    Lv1.ListItems.Add , , .Cells(lig, 2) '.Cells(C.Row, 2) '.Range(C.Address)
                    Lv1.ListItems(Lv1.ListItems.Count).Bold = True

                    'On rempli les autre colonnes de la listview par le décalage D représentant l'offset 1,2,3 etc
                    For D = 1 To 9
                        Lv1.ListItems(Lv1.ListItems.Count).ListSubItems.Add , , .Cells(lig, 2).Offset(0, D)
                        Lv1.ListItems(Lv1.ListItems.Count).ListSubItems(D).Bold = True
                    Next D
                    'On rempli les autres colonnes de la listview par le décalage D représentant les cellules fusionnées
                    For i = lig + 1 To c.Offset(1, 0).Row - 1
                        Lv1.ListItems.Add , , ""
                       For D = 3 To 11
                          Lv1.ListItems(Lv1.ListItems.Count).ListSubItems.Add , , .Cells(i, D)
                       Next D
                    Next i
                End If
            End If
     Next c
  End With

   If Lv1.ListItems.Count = 0 Then MsgBox "Pas de résultats trouvés", vbOKOnly, "FIN DE RECHERCHE"

End Sub

Oui, tu peux revenir vers moi, mais je suis de façon aléatoire sur ce forum, cela dépend beaucoup de me mon temps de libre...

Bonjour Benead,

Merci encore une fois,

Le code que tu m'as fourni à une erreur:

lig = c.MergeArea.Row

il bloque à lig

Oui, tu peux revenir vers moi, mais je suis de façon aléatoire sur ce forum, cela dépend beaucoup de me mon temps de libre...

Je l'entends évidemment comme cela.

Merci et bonne journée

C'est quoi le message d'erreur ? Chez moi cela fonctionne. c.MergeArea.Row récupère la première ligne de la plage des cellules fusionnées. Il faut déclarer Lig as Long en début de procédure...

Si cela bug encore envoi moi à nouveau le fichier.

Re,

C'est bon pour moi, ça fonctionne

Par contre si je créais une erreur, ex:

Dans la liste où il y a acné, page BdD, si je laisse l'espace après acné, il ne trouve rien, même avec Trim???

je n'ai pas fait le test avec les autres listes

Merci encore

Ps: quand j' écrirai un nouveau post, pour ce que je t'ai parlé plus haut, puis-je t'envoyer un MP pour te prévenir? Bien évidemment si tu as du temps et si le sujet t'intéresse.

Alienox,

Normal, je n'ai pas recontrôlé ton code, mais visiblement tu es revenu sur une version antérieure, il faut que tu remplaces patho.text par sa variable texte sPatho lors de la comparaison avec Like (idem pour les autres variables) :

    .../.... And c.Offset(0, 4) Like "*" & sPatho & "* .../...

Ok pour le message perso, mais parfois je suis plusieurs jours sans démarrer mon ordi, tu verras bien. Très certainement que d'autres prendrons le relais.

Dans tous les cas, soit explicite, précis et patient et tu auras ta réponse.

Si tu peux, modifie le titre du fil pour corriger la faute d'orthographe, sans doute en éditant le premier post. Il faut prendre en compte les remarques des contributeurs de ce forum, qui sont très souvent attachés à un respect minimum quant à la rédaction des messages sur les forums et dont je fais partie.

Re,

Je te remets le bon fichier, comme tu me l'avais fait modifier, la version que tu as, est sans toutes les modifs que l'on a apporté.

Sinon tout est good, ça fonctionne

Erreur du titre corrigée

Et encore merci

Rechercher des sujets similaires à "recherche orthographe erronee"