Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
759 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [Resolu] Echappement des caracteres speciaux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Resolu] Echappement des caracteres speciaux

n°1178150
guendalf
Posté le 17-08-2005 à 17:50:15  profilanswer
 

Bonjour,
Je cherche commment echapper les caracteres speciaux lors d'une recherche avec la methode Find.
Pourquoi ? Car j'ai une liste de noms et certains contiennent des '*' or pour excel, il s'agit d'un caractere special qui signifie n'importe quoi.
 
Exemple:
la case A1 contient "thomas lar" et la case A2 contient "thomas*"
Et je cherche a recuperer la ligne ou se situe "thomas*" ...
 
Or avec un Range("A1:A2" ).Find(what:="thomas*" ), il va me renvoyer la cellule A1 au lieu de A2 car il va interpretrer ma demande comme etant tout ce qui commence par "thomas".
 
Je pensais qu'il existait une sorte de caratere d'echappement (comment sur d'autre system..), mais je n'ai pas trouve.
 
Donc si quelqu'un a une solution, je suis preneur ;)


Message édité par guendalf le 18-08-2005 à 11:05:31

---------------
Guendalf
mood
Publicité
Posté le 17-08-2005 à 17:50:15  profilanswer
 

n°1178212
watashi
La démotivation : JAMAIS !
Posté le 17-08-2005 à 18:47:01  profilanswer
 

Salut guendalf,
 
j'ai eu un cas à peu près pareil. Ma sollution :
 

Code :
  1. Sub cherc()
  2.      Dim a, b
  3.      a = 1
  4.      For a = 1 To 10
  5.           If Cells(a, 1).Text = "thomas*" Then b = a: GoTo 1
  6.      Next a
  7. 1    If b = "" Then MsgBox ("aucune occurrence" ) Else MsgBox ("ligne : " & b)
  8. End Sub


C'est fastidieux, c'est pas find qui est utilisé mais jusqu'à présent j'ai pas eu la chance de tomber sur une autre sollution.
 
Je suis aussi prenneuse si un mieux existe  ;)  

n°1178268
guendalf
Posté le 17-08-2005 à 20:16:58  profilanswer
 

watashi a écrit :

Salut guendalf,
 
j'ai eu un cas à peu près pareil. Ma sollution :
 

Code :
  1. Sub cherc()
  2.      Dim a, b
  3.      a = 1
  4.      For a = 1 To 10
  5.           If Cells(a, 1).Text = "thomas*" Then b = a: GoTo 1
  6.      Next a
  7. 1    If b = "" Then MsgBox ("aucune occurrence" ) Else MsgBox ("ligne : " & b)
  8. End Sub


C'est fastidieux, c'est pas find qui est utilisé mais jusqu'à présent j'ai pas eu la chance de tomber sur une autre sollution.
 
Je suis aussi prenneuse si un mieux existe  ;)


 
Ah! Goto!!!! Beurk!!!!!!!!!!! lol ;)
 
Mais tu m'as donne une idee ;)
Il suffit d'utiliser Find toujours, mais en verifiant si la case qu'il nous retourne contient le bon texte. Sinon on continue la recherche.
 
Voici un exemple qui permet de trouver la case contenant "dog*" dans la liste de mot "A1:A10"
 

Code :
  1. Public Sub RechercheExacte()
  2. Dim c As Range
  3. Dim search_word As String
  4. Dim next_line As Integer
  5. search_word = "dog*"
  6. With ActiveWorkbook.Worksheets(1)
  7.     Set c = .Range("A1:A10" ).Find(what:=search_word, LookIn:=xlValues)
  8.     If Not c Is Nothing Then
  9.         If c.Value <> search_word Then
  10.             Do
  11.             next_line = c.Row + 1
  12.             Set c = .Range("A" & next_line & ":A10" ).Find(what:=search_word, LookIn:=xlValues)
  13.             Loop While Not c Is Nothing And next_line <= 10 And c.Value <> search_word
  14.         End If
  15.         If c.Value = search_word Then
  16.             MsgBox "Found in " & c.Address, vbInformation
  17.         Else
  18.             MsgBox "Not found.", vbInformation
  19.         End If
  20.     Else
  21.         MsgBox "Not found", vbInformation
  22.     End If
  23. End With
  24. End Sub


 
P.S: J'aurai pu utiliser FindNext dans le bout de code precedent, mais j'ai remarque que le resultat etait incorrect avec FindNext si j'avais un appel de fonction entre le premier Find et le FindNext... et je n'ai pas encore compris pk ce n'etait pas possible (d'ou mon vieux hack pourri pour rechercher l'element suivant en reduisant la taille du Range). Mais je vous accorde qu'ici, n'ayant aucun appel de fonction, FindNext aurait tres bien fonctionne. (Au moins j'ai pu poser ma question sur FindNext qui me tarode depuis un ptit bout de tps maintenant...)
 
Bonne soiree a ceux qui ont pris le tps de tout lire ;)


---------------
Guendalf
n°1178488
watashi
La démotivation : JAMAIS !
Posté le 18-08-2005 à 09:26:52  profilanswer
 

[quotemsg=1178268,3,279265]
Ah! Goto!!!! Beurk!!!!!!!!!!! lol ;)
[quotemsg]
 
lollllll c'est vrai que c'est pas beau ;)  
 

n°1178586
guendalf
Posté le 18-08-2005 à 11:01:44  profilanswer
 

WaTaShi> Goto ne devrait jamais etre utilise, c'est quasiment impossible de maintenir un code contenant des sauts un peu partout. On peut (quasiment) tout le temps s'en passer a moins de faire de l'asm.
 
bon je viens de voir que le code que j'ai mis precedemment, sans utiliser findnext est faux (il ne marche pas dans le cas ou l'on cherche un "thomas*", qu'il y a bien des "thomas" dans le texte mais pas de "thomas*" )
 
Donc voici quelque chose qui marche (et tant pis pour mon soucis avec findnext, qui de toute facon est hors sujet ici)
 

Code :
  1. ' permet de rechercher le contenu exacte d'une chaine,
  2. ' en traitant les caracteres speciaux au meme titre que les autres
  3. Public Sub RechercheExacte()
  4. Dim c As Range
  5. Dim search_word As String, firstAddress As String
  6. search_word = "thomas*"
  7. With ActiveWorkbook.Worksheets(1).Range("A1:A12" )
  8.     Set c = .Find(what:=search_word, LookIn:=xlValues)
  9.     If Not c Is Nothing Then
  10.         If c.Value <> search_word Then
  11.             firstAddress = c.Address
  12.             Do
  13.             Set c = .FindNext(c)
  14.             Loop While firstAddress <> c.Address And c.Value <> search_word
  15.         End If
  16.         If c.Value = search_word Then
  17.             MsgBox "Found in " & c.Address
  18.         Else
  19.             MsgBox "Not found"
  20.         End If
  21.     Else
  22.         MsgBox "Not found"
  23.     End If
  24. End With
  25. End Sub


Message édité par guendalf le 18-08-2005 à 11:26:16

---------------
Guendalf
n°1178755
watashi
La démotivation : JAMAIS !
Posté le 18-08-2005 à 14:03:02  profilanswer
 

Pour les goto c'est vrai que c'est parfois un peu risqué mais je me suis pas encore penche sur les autres boucles que for... et encore même pas les for each.
Va falloir que je m'y mette en voyant tes codes c'est évident. Va falloir que je me penche sur la synthaxe ;)
merci pour le conseil :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [Resolu] Echappement des caracteres speciaux

 

Sujets relatifs
[VB.NET] [ Resolu ]COnvertir Dataview en stringComment récuperer $_GET['machin'] en $machin ? [résolu]
[résolu]probleme avec $_FILES lors d'un upload[résolu]Overflow et firefox
[resolu][html]input type=file different entre ie et firefox !!probleme avec sort [resolu]
[résolu]post ne s'affiche qu'apres en avoir posté un autre...[Résolu] Séparateur de champ format CSV
Problème de caractères accentués via PHP[résolu]Probleme PHP/Mysql bizzarre
Plus de sujets relatifs à : [Resolu] Echappement des caracteres speciaux


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR