"Find" peut-il passer outre la position des caractères?

YANN-56

XLDnaute Barbatruc
Bonsoir à tous,

Il y a "Option Compare Text" Pour les majuscules et minuscules.

Il y a " InStr(1, ActiveSheet.Cells(x, y).Value, "MOT", 1) pour ignorer celles-ci,
de la même façon, et trouver "MOT" quelque soit sa position dans la cellule.

Mais peut-on l'associer à:
"Range(Cells(1, 1), Cells(100, 1)).Find("MOT", LookIn:=xlValues)"

Quant aux accents qui me fichent aussi le désordre,
je n'ai pas trouvé autre solution que de passer par une fonction de remplacement.

Mais là: Je doute de la possibilité de s'en passer! ... Dommage!

Si quelqu'un passant par là à une idée... Merci d'avance.

Yann
 

YANN-56

XLDnaute Barbatruc
Re : "Find" peut-il passer outre la position des caractères?

Bonsoir Hasco :),

Et Vlan! Prends ça dans la tronche!!! :eek:

Je descends à la cave, et j'reviens...

"Chérie! Elle est où la lampe de poche?"

Ami Hasco... Quelque chose me dit que je vais encore devoir te dire Merci... Pff!

Dès que je remonte, j'te dis.

Amicalement.

Yann
 

JNP

XLDnaute Barbatruc
Re : "Find" peut-il passer outre la position des caractères?

Bonjour le fil :),
C'est pas LookAt=:xlPart dont tu parles par hasard :p ?
Tu peux aussi regarder du côté de RegExp, y a des trucs très sympa pour la gestion du texte :rolleyes:...
Bon dimanche :cool:
 
G

Guest

Guest
Re : "Find" peut-il passer outre la position des caractères?

bonjour,

Hello JN

Ben notre ami Yann est resté coincé dans la cave. Sans doute pour Finder des bouteilles, et pas en XlPart, certainemant en xlWhole.
Peut-être est-il en train de déchiffrer les étiquettes en MatchCase:=false.

A+
 

YANN-56

XLDnaute Barbatruc
Re : "Find" peut-il passer outre la position des caractères?

Bonjour Hasco:), JNP:), et à ceux qui passeront par ici,

Il est vrai qu'à partir d'une certaine heure; je ne devrais pas descendre à la cave... J'ai bien dormi!

Pour tout vous dire; j'ai appris l'existence de "Find" en participant ici:
https://www.excel-downloads.com/threads/trouver-find-une-date.156406/
D'où le bien fondé de ma signature.

J'avais pour habitude de faire une boucle alors que "Find" est plus direct. (Il en est de même dans la cave!)

J'ai noté xlPart, RegExp, xlWole. Je vais chercher, tester...

En espérant revenir vous dire que j'ai trouvé.
Sinon je reviendrai avec un exemple concret.(Sinon un peu de honte)

Merci à vous, et à plus tard.

Yann
 

YANN-56

XLDnaute Barbatruc
Re : "Find" peut-il passer outre la position des caractères?

Re Hasco, JNP,

Je me suis, à priori "bourré" de problèmes qui n'existaient pas!

"Find" trouve bien le mot recherché quelque soit sa position dans une cellule.
J'ai du me planter dans mon appli en cours! Le souci vient certainement d'ailleurs... :mad:

J'ai construit le Classeur joint pour tester.... Le résultat me convient.

Il reste que j'en conclus qu'une fonction supprimant les accents
possibles sur les toutes les lettres de l'alphabet est incontournable.
(Si je ne l'ai pas effacée, je pense en avoir une quelque part derrière les fagots)

Quant à "RegExp" dont parle JNP: C'est un peu trop haut pour mes petites compétences.

En tous les cas Merci à vous deux de m'avoir poussé à chercher. :):):)

Amicalement.

Yann
 

Pièces jointes

  • TROUVE_MOT.xls
    37 KB · Affichages: 72
G

Guest

Guest
Re : "Find" peut-il passer outre la position des caractères?

Bonjour Yann,

Si tu as bien lu l'aide excel sur find tu auras remarqué que les paramètres LookIn, LookAt, SearchOrder et MatchByte sont enregistrés à chaque demande. Tu as donc tout interêt à inclure,au moins LookAt dans ta macro.

Si entre deux lancements de la macro tu utilise sla recherche par la boîte de dialogue et que ce paramètre est changé, ta macro ne fonctionnera pas bien et risque de ne plus rechercher les parties de chaine mais la totalité.

A+
 

YANN-56

XLDnaute Barbatruc
Re : "Find" peut-il passer outre la position des caractères?

Hasco, toujours aussi pertinent dans tes aides! :) :) :)

J'ai bien noté ton conseil, et vais le suivre.

Le bon résultat de mon essai m'a amené à ne pas continuer à analyser l'aide.
(A tort comme tu me le démontres... J'y retournerai pour peaufiner)

Pour l'instant je fouille pour bien substituer des lettres sans accent à celles qui en ont.

Ami Hasco... Quelque chose me dit que je vais encore devoir te dire Merci... Pff!

Je ne m'étais donc pas trompé!!!

Amicalement.

Yann

P.S. La présente question est aussi liée au fil relatif à la recherche de distances
entre villes avec maps.google à laquelle tu as participé.
Mon projet avance bien. Mais je m'étais heurté à cette affaire de "Find"

RE-P.S. Après recherche relative aux accents:

Tu avais déjà offert une bonne solution ici:
https://www.excel-downloads.com/threads/mois-en-majuscules-mais-sans-accents-vba.145518/

SUPER!!!
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : "Find" peut-il passer outre la position des caractères?

Bonjour Yann, Hasco, Jean-Noël,

Je vois qu'on parle ici d'accents.

Je ne saurais trop recommander de télécharger sur le web (c'est gratuit) la macro complémentaire Morefunc de Laurent Longre.

On y trouve la fonction ANSI128 qui supprime les accents.

Voici une manière de l'utiliser en VBA pour une recherche :

Code:
Sub Recherche()
'télécharger la macro complémentaire Morefunc de Laurent Longre
Dim txt$, plage1 As Range, col As Byte
Dim plage2 As Range, trouve As Range
Application.ScreenUpdating = False
txt = "eleve" 'texte recherché
Set plage1 = ActiveSheet.UsedRange
col = plage1.Columns.Count
plage1.Copy
plage1.Insert xlToRight
Set plage2 = plage1.Offset(, -col)
plage2.FormulaR1C1 = "=ANSI128(RC[" & col & "])"
Set trouve = plage2.Find(txt, LookIn:=xlValues, LookAt:=xlWhole)
If Not trouve Is Nothing Then Set trouve = trouve.Offset(, col)
plage2.Delete xlToLeft
Application.ScreenUpdating = True
If Not trouve Is Nothing Then _
  MsgBox "'" & trouve & "' trouvé en " & trouve.Address(0, 0)
End Sub
Fichier joint.

A+
 

Pièces jointes

  • Recherche accents(1).xls
    37.5 KB · Affichages: 63

YANN-56

XLDnaute Barbatruc
Re : "Find" peut-il passer outre la position des caractères?

Bonsoir job... Sympa de ta part.

Que je suis bordé par belles aides. Tu t'y ajoutes que rêver de mieux!!!

Malgré mon âge certain, je suis toujours novice.
J'ai du mal à tout comprendre dans le code que tu proposes, bien que soupçonnant l'efficacité.

J'ai du boulot à tout assimiler, mais quel bonheur d'apprendre!

Je vais tenter de traduire, car "Offset" n'est pas trop dans mon répertoire,
et quant à l'objet "Range" je lui affuble toujours "Cells (y, x)"

"ANSI128" n'est-il pas la clé de la traduction des lettres sans accents?

Est-il ainsi simplement possible de traduire en colonne 2 les mots mis en colonne 1,
comme: "Landévant" en "Landevant" ou "Malmö en Malmo. Tout simplement.

Merci beaucoup pour ton intervention, et pardon de me montrer si gourmand.

Amicalement.

Yann
 
G

Guest

Guest
Re : "Find" peut-il passer outre la position des caractères?

bonsoir tous,

Alors une fonction SansAccent avec API Windows 32:
Code:
Private Declare Function FoldString Lib "kernel32" Alias "FoldStringA" _
                                    (ByVal dwMapFlags As Byte, ByVal lpSrcStr As Long, ByVal cchSrc As Long, _
                                     ByVal lpDestStr As Long, ByVal cchdest As Long) As Long
Function SansAccent(Texte As String) As String
    Dim I As Integer
    SansAccent= Space(Len(Texte))
    For I = 0 To Len(Texte) * 2 - 2 Step 2
        FoldString &H40, StrPtr(Texte) + I, 1, StrPtr(SansAccent) + I, 1
    Next I
End Function

Une autre qui traîne un peu partout sur internet depuis des années:
Code:
' Définition de la conversion
Const accent As String   = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñÇç"
Const noAccent As String = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNnCc"
' La fonction :
Private Function sansAccents(ByRef s As String) As String
Dim i As Integer  
Dim lettre As String * 1
  sansAccents = s
  For i = 1 To Len(accent)
    lettre = Mid$(accent, i, 1)
    If InStr(sansAccents, lettre) > 0 Then
       sansAccents = Replace(sansAccents, lettre, Mid$(noAccent, i, 1))
    End If
  Next i
End Function

Maintenant tu as le choix

A+
 

job75

XLDnaute Barbatruc
Re : "Find" peut-il passer outre la position des caractères?

Re,

"ANSI128" n'est-il pas la clé de la traduction des lettres sans accents?

Mon post #10 ne dit pas autre chose non ?

Est-il ainsi simplement possible de traduire en colonne 2 les mots mis en colonne 1,
comme: "Landévant" en "Landevant" ou "Malmö en Malmo. Tout simplement.

Bien sûr entrer en B1 cette formule à tirer vers le bas :

=ANSI128(A1)

Et si l'on veut du VBA pour entrer la formule et la supprimer :

Code:
Sub EntreANSI128()
'télécharger la macro complémentaire Morefunc de Laurent Longre
Dim plage As Range
Set plage = Range("B1:B" & Range("A65536").End(xlUp).Row)
plage.FormulaR1C1 = "=ANSI128(RC[-1])"
plage = plage.Value 'supprime les formules
End Sub
A+
 

YANN-56

XLDnaute Barbatruc
Re : "Find" peut-il passer outre la position des caractères?

Ouafff!!! Trop de chez trop...Je vais dormir!!!!!!!!
A demain. Avec tête reposée...
Je n'en peux plus.......!
Bonne nuit à vous si généreux.
Et énorme Merci pour la peine que vous prenez à m'aider.

Yann
 

Statistiques des forums

Discussions
312 298
Messages
2 086 981
Membres
103 419
dernier inscrit
mk29