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

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

Marsh Posté le 13-08-2001 à 16:37:54    

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:

Reply

Marsh Posté le 13-08-2001 à 16:37:54   

Reply

Marsh Posté le 13-08-2001 à 16:42:14    

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)
Reply

Marsh Posté le 13-08-2001 à 16:48:35    

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:

Reply

Marsh Posté le 13-08-2001 à 17:18:52    

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)
Reply

Marsh Posté le 13-08-2001 à 17:30:31    

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 ! :)

Reply

Marsh Posté le 13-08-2001 à 17:46:03    

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)
Reply

Marsh Posté le 13-08-2001 à 17:59:34    

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:

Reply

Marsh Posté le 14-08-2001 à 10:25:36    

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:

Reply

Marsh Posté le 14-08-2001 à 10:49:47    

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

Reply

Marsh Posté le 14-08-2001 à 12:10:08    

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)
Reply

Marsh Posté le 14-08-2001 à 12:10:08   

Reply

Marsh Posté le 14-08-2001 à 12:25:19    

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:

Reply

Marsh Posté le 14-08-2001 à 12:33:02    

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:

Reply

Marsh Posté le 14-08-2001 à 13:47:02    

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)
Reply

Marsh Posté le 14-08-2001 à 15:33:33    

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:

Reply

Marsh Posté le 14-08-2001 à 15:51:58    

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...

Reply

Marsh Posté le 14-08-2001 à 15:54:30    

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)
Reply

Marsh Posté le 14-08-2001 à 16:13:55    

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:

Reply

Marsh Posté le 14-08-2001 à 16:22:15    

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:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed