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

  FORUM HardWare.fr
  Programmation

  [Access/VB] Supprimer des accents dans une chaine de caractères

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Access/VB] Supprimer des accents dans une chaine de caractères

n°52610
xaero
Posté le 13-08-2001 à 16:37:54  profilanswer
 

Hello World !  :sol:
   J'aimerais savoir s'il existe une fonction dans access 97 permettant de remplacer une lettre avec accent (ex : é) par la même lettre sans accent (ici, e) :??: Si non, quelles seraient les meilleures fonctions pour faire ce traitement ?  
   Notez que les fonctions VB sont utilisables sous access, je dis ça pour ceux qui sauraient faire l'opération sous VB. Et en SQL ? Je ne pense pas mais encore une fois, si quelqu'un a une idée...
 
   Merci à tous de votre aide !   :hello:

mood
Publicité
Posté le 13-08-2001 à 16:37:54  profilanswer
 

n°52613
Styx0
Aware, abware !
Posté le 13-08-2001 à 16:42:14  profilanswer
 

ben tu fais un "replace" de tes accents avant insertion dans la base
 

Code :
  1. Function Replace(Expression As String, Find As String, Replace As String, [Start As Long = 1], [Count As Long = -1], [Compare As VbCompareMethod = vbBinaryCompare]) As String


---------------
Galerie Photo (Canon)
n°52618
xaero
Posté le 13-08-2001 à 16:48:35  profilanswer
 

Merci de ta réponse rapide !  
   Cependant, mes données sont déjà implémentées. Il s'agit d'enregistrements issus d'une requete et qui sont envoyés vers une table pas l'instruction SQL INSERT INTO. C'est à ce moment là qu'intervient le traitement.  
   Peux tu détailler un peu ta soluce stp ? Où est ce que je tape cette fonction ? Si je comprend bien tu m'as filé l'en-tête de la fonction et je dois taper le code, non ? scuze mais je suis pas une bête en access mais qq tips de plus et je devrai m'en sortir...
 
   Merci encore ! :hello:

n°52629
Styx0
Aware, abware !
Posté le 13-08-2001 à 17:18:52  profilanswer
 

Citation :

Cependant, mes données sont déjà implémentées. Il s'agit d'enregistrements issus d'une requete et qui sont envoyés vers une table pas l'instruction SQL INSERT INTO. C'est à ce moment là qu'intervient le traitement.  


 
bon si je comprend bien, tu as déjà les données dans une table, et tu veux les traiter (en VBA) avant de les insérer dans une autre table (donc de faire un Update ou un Insert ou par le biais d'un recordset) ?
g besoin de précision et/ou de clarté là  
 
Sinon exemple de la fonction :
strResultat=Replace("éhbé voila le résultat, "é", "e" )
ca donne strResultat = "ehbe voila le resultat"


---------------
Galerie Photo (Canon)
n°52634
xaero
Posté le 13-08-2001 à 17:30:31  profilanswer
 

OK je comprend mieux là. Ce que je veux faire c'est remplacer la chaîne par la même, sans accent, et ceci dans la même table, au même champ. C'est possible ou bien je dois l'insérer dans une autre table ?  
Je vais essayer ta soluce et je refais signe demain si j'ai un pb. Merci ! :)

n°52642
Styx0
Aware, abware !
Posté le 13-08-2001 à 17:46:03  profilanswer
 

ben la c facile tu fais la requete suivante
 
Update <NomTABLE> set <NOMDUCHAMP>=Replace(<NOMDUCHAMP>,"é","e)
 tu fais autant de requete que de replace nécessaires (â,è,ê....)
 
normalement le SQL d'access accepte le VBA, donc ca devrait marcher très très simplement)


---------------
Galerie Photo (Canon)
n°52648
xaero
Posté le 13-08-2001 à 17:59:34  profilanswer
 

t'es royal...
Bon, g pas le tps d'essayer ça maintenant mais dès demain matin je m'y remet et je te tiens au courant.  
 
 Juste une question : je peux pas créer une requete pure puisqu'il faut taper la fonction Replace. Donc, je créé un formulaire ? Quel est le plus simple ?
 
Thanx :hello:

n°52714
xaero
Posté le 14-08-2001 à 10:25:36  profilanswer
 

Styx0 a écrit a écrit :

ben la c facile tu fais la requete suivante
Update <NomTABLE> set <NOMDUCHAMP>=Replace(<NOMDUCHAMP>,"é","e)
 tu fais autant de requete que de replace nécessaires (â,è,ê....)
normalement le SQL d'access accepte le VBA, donc ca devrait marcher très très simplement)  




 
  Je dois quand même taper la fonction Replace non ? J'ai créé un module et collé le texte ci-dessous mais il me met un message d'erreur. Qu'est ce que je dois rajouter à la function ? :
  Function Replace(Expression As String, Find As String, Replace As String, [Start As Long = 1], [Count As Long = -1], [Compare As VbCompareMethod = vbBinaryCompare]) As String  
 
   ==> C'est l'en-tête ? Kesako ? Si je fait la requete Update, comment s'effectue le lien avec la fonction ?  
 
PLease Styx0, détailles ! :cry:
Ne me laissez pas seul !! :cry: :( :cry:

n°52725
xaero
Posté le 14-08-2001 à 10:49:47  profilanswer
 

Alors, tout le monde sèche ? :cry:
:bounce:

n°52755
Styx0
Aware, abware !
Posté le 14-08-2001 à 12:10:08  profilanswer
 

je t donné la requete ?!? :
 
Update <NomTABLE> set <NOMDUCHAMP>=Replace(<NOMDUCHAMP>,"é","e)
 
pas besoin de passer par un module ni par un form


---------------
Galerie Photo (Canon)
mood
Publicité
Posté le 14-08-2001 à 12:10:08  profilanswer
 

n°52760
xaero
Posté le 14-08-2001 à 12:25:19  profilanswer
 

OK, mais ça marche pas car il connait pas la fonction Replace ; elle est pas définie ! Tu pensais que c était une fonction de base ? Dans l'aide il parle pas de cette fonction mais elle s'appelle peut être autrement... :fou:

n°52763
xaero
Posté le 14-08-2001 à 12:33:02  profilanswer
 

Il y a la fonction MID :pt1cable: pour remplacer un nombre déterminé de caractères d’une variable chaîne par des caractères issus d’une autre chaîne.
Je vais essayer ça :hello:

n°52777
Styx0
Aware, abware !
Posté le 14-08-2001 à 13:47:02  profilanswer
 

sous Access 2000 la fonction existe (VBA de VB 6.0)
donc au pire tu utilises la fonction mid comme ci dessous mais dans un module (donc nécessité d'ouvrir un recordset sur la table que tu veux modifier) - je fais la fonction à la volée donc à tester:

Code :
  1. strTest="blhablhaé"
  2. intPos = InStr(1,strTest,"é" ) ' retourne la position du caractère é si y en a pas retourne 0
  3. strTest=left(StrTest,intPos) & "e" & right(strTest,len(strTest)-intPos - 1) ' le -1 pour enlever le caractère "é"


voilà c un peu barbare toutefois


---------------
Galerie Photo (Canon)
n°52813
xaero
Posté le 14-08-2001 à 15:33:33  profilanswer
 

Oui, j'ai déjà fait un traitement similaire sur une autre table. En fait je voulais surtout savoir par ce post si il y avait une fonction toute faite. Et la réponse et oui... sur Access 2000 ;)
 
Donc je vais faire à l'ancienne. J'ai repris ta dernière requête en la modifiant légèrement et puis je l'ai tapé dans une requete Update, et non pas un form ou module. Mais j'ai une erreur de conversion de type. Bon, ça a marché pour une autre table à qq nuances près, donc je devrai retomber sur mes pattes :p
 
Si t'as d'auters tips à proposer ou quelqu'un d'autre n'hésitez pas !  :hello:

n°52820
xaero
Posté le 14-08-2001 à 15:51:58  profilanswer
 

Juste pour info :
 
UPDATE  TableTmp  
SET TableTmp.Nom = (Left ([Nom], InStr(1, [Nom], "é" ) ) & "e" & Right ([Nom], Len( [Nom] - (InStr(1, [Nom], "é" ) ) -1 ) ) ) ;
 
Il est vrai que je dois retaper la fonction InStr mais ça doit pouvoir s'améliorer... Si c trop lourd j'écrirai la req dans un formulaire.
Sinon au niveau logique ça colle ? Parce que là il écrit qu'il lit en même temps. Je devrais peut-être passer par un champ temporaire...

n°52821
Styx0
Aware, abware !
Posté le 14-08-2001 à 15:54:30  profilanswer
 

non ca colle !
 
par contre c pas top optimisé (et moyen propre) mais bon ca doit etre suffisant pour ton appli ! :)
 
Good luck


---------------
Galerie Photo (Canon)
n°52828
xaero
Posté le 14-08-2001 à 16:13:55  profilanswer
 

Dernière version améliorée :
UPDATE Tmp  
SET Tmp.Nom = UCase(Left([Nom],InStr(1,[Nom],"é" )-1) & "e" & (Mid([Nom],InStr(1,[Nom],"é" )+1)));
 
J'ai utilisé Mide plutot que Right.
 
Ca marche mais pb : j'ai un message d'erreur (erreur de conversion de type) quand des champs ne contiennent pas de "é". Si je supprime ces champs dans la table avant la requ, la maj se déroule bien. Soit je supprime ces champs avant, mais galère, soit... je sais pô ! En fait il bloque sur les champs ne nécessitant pas de modif. => Je vais inclure clause WHERE EXISTS "é" (enfin en gros)  :D
 
Access:gun: c'est tabou, on en viendra tous à bout !
 
Merci encore pour ton aide !  :hello:

n°52832
xaero
Posté le 14-08-2001 à 16:22:15  profilanswer
 

Clause à rajouter (je met ça pour ceux que ça intéresse, hein !)
  WHERE NP LIKE "*é*"
 
Pas d'opérateur EXISTS sous access. De toute façon LIKE est plus simple.
Ca rend fou Access :pt1cable:  :hap:  :crazy:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [Access/VB] Supprimer des accents dans une chaine de caractères

 

Sujets relatifs
[Access VBA] GROS PROBLEME!! URGENT!!AIDEZ MOI SVP!!!!!!!!!! C++ création d' un tableau avec chaine...
[VB et ACCESS] Pb de buffer[PL/SQL] Convertir une chaine en Base64
Access - enregistrements des données d'un formulaire dans une tableACCESS: requete paramétrée
[VISUAL BASIC] Prob sur manip chainePhp et access
[Access 97] Date ... : Imprimer sur un Mois ??access
Plus de sujets relatifs à : [Access/VB] Supprimer des accents dans une chaine de caractères


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