Replace

Résolu
jeanluc065 Messages postés 134 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 1 juin 2007 - 29 oct. 2006 à 06:23
jeanluc065 Messages postés 134 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 1 juin 2007 - 1 nov. 2006 à 08:47
Bonjour,

En access2002 , novice, je voudrais remplacer une chaîne de caractères par une autre.
dans l'exemple ci-dessous  remplacer -aug- par /08/
Malgré mes recherches sur le site, je n'y arrive pas.
Merci
Jl

J'ai essayé ceci mais çà plante
Quelqu'un pourrait-il ma'ider

Private commande_1click()
replace ([matable].[monchamp], "-aug-", "/08/"
end sub

11 réponses

jeanluc065 Messages postés 134 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 1 juin 2007
1 nov. 2006 à 08:47
Bonjour à tous,

Je suis arrivé à ceci en passant par une macro (exécuter sql et dans le champ commande, il suffit de taper UPDATE matable SET monchamp = replace([monchamp],""-JAN-"",""/01/")
1 ligne par mois.
Une fois ma macro complète nommée "Replace_dates", enregistrer sous "module" et j'ai obtenu la function "Replace_dates" que voici.
Si je prends la peine de donner la solution, c'est bien pour tous les novices comme moi qui ont souvent besoin d'un p'tit coup de pouce pour évoluer.

Function Replace_dates()
OnErrorGoTo Replace_dates_Err
 
    DoCmd.RunSQL"UPDATE matable SET monchamp = replace([monchamp],""-JAN-"",""/01/"");", -1
    DoCmd.RunSQL"UPDATE matable SET monchamp = replace([monchamp],""-FEB-"",""/02/"");", -1
   'etc
Replace_dates_Exit:
    ExitFunction
 
Replace_dates_Err:
    MsgBox Error$
    Resume Replace_dates_Exit
 
EndFunction

 

<form name="vbform" onsubmit="return vB_Editor['vB_Editor_001'].prepare_submit(0, 2)" action="newreply.php" method="post"> </form>
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
29 oct. 2006 à 06:49
Mais, jeanluc65 , c'est apparement le même problème que celui que tu nous a exposé là :

http://www.vbfrance.com/infomsg_REMPLACER-CHINE-CARACTERES-OU-TRADUIRE-DATES_833288.aspx#5

et je vois maintenant pourquoi tu n'y parvenanis pas : il y a une différence entre AUG et aug !

Je reviens donc avec mon code, dans lequel j'ai ajouté un Ucase pour pallier cette difficulté :

Private Sub Command1_Click()
  lesanglaisdic = "@JAN@FEB@MAR@APR@MAY@JUN@JUL@AUG@SEP@OCT@NOV@DEC@"
  datebritish = "07-aug-2006"
  datefrance = Left(datebritish, 2) & "/" & Format((InStr(lesanglaisdic, "@" & UCase(Mid(datebritish, 4, 3)) & _
  "@") + 3) / 4, "0#") & "/" & Right(datebritish, 4)
  MsgBox datefrance
End Sub
0
jeanluc065 Messages postés 134 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 1 juin 2007
29 oct. 2006 à 07:21
Bonjour jmfmarques,

merci pour ta réponse. Effectivement, je ne m'en sors pas et si tu pouvais m'aider, ce serait très gentil.
Je recopie bêtement, je remplace datebritish par le nom du champ [MOBISTARidentity].[Champ2] qui contient la date et  [MOBISTARidentity].[datefrance] le nom du champ qui accueillera le champ transformé

et j'obtiens :
erreur 2465
Impossible de trouver le champ "!" auquel il est fait référence dans votre expression


et c'est    [MOBISTARidentity].[Champ2] = "07-AUG-2006" qui est en surligné


Private Sub Étiquette59_Click()
  lesanglaisdic = "@JAN@FEB@MAR@APR@MAY@JUN@JUL@AUG@SEP@OCT@NOV@DEC@"
  [MOBISTARidentity].[Champ2] = "07-AUG-2006"
  [MOBISTARidentity].[datefrance] = Left([MOBISTARidentity].[Champ2], 2) & "/" & Format((InStr(lesanglaisdic, "@" & UCase(Mid([MOBISTARidentity].[Champ2], 4, 3)) & _
  "@") + 3) / 4, "0#") & "/" & Right([MOBISTARidentity].[Champ2], 4)
  MsgBox [MOBISTARidentity].[datefrance]
End Sub

merci
JL
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
29 oct. 2006 à 07:53
Je crois, jeanluc065, que ton problème, bien avant celui celui de la transformation d'une chaîne de caractères en un autre chaîne, est celui de l'ouverture, de la lecture, puis de l'écriture d'un champ dans une table, que ce champ soit une date ou tout autre chose .
Je te suggère de commencer par les tutoriels relatifs aux bases de données.

Tu ne sembles enfin pas avoir compris le mécanisme de mon cide !

dans mon code, datebritish (avec une valeur donnée) n'est là que pour avoir une valeur d'essai.
chez toi, datebritish doit être égale à la valeur du champ que tu lis !


datebritish = ce_qui_est_lu dans_ton_ champ_d'origine

une fois datefrance trouvée, tu dois remplacer de qui dans mon code est un msgbox par :

mon_champ = datefrance

le tout avec la bonne syntaxe de lecture et d'écriture du champ concerné, bien évidemment ...


Résumons le mécanisme :


1) lecture de la valeur du champ (c'est celà, datebritish)


2) transformation de datebritish en datefrance (c'est celà, mon code)


3) écriture de datefrance dans le champ concerné .
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jeanluc065 Messages postés 134 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 1 juin 2007
29 oct. 2006 à 08:12
Re bonjour jmfmarques,

merci pour tes conseils, j'en prends bonne note.
bon dimanche.
JL
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
29 oct. 2006 à 09:57
 Bonjour à tous....

Salut jean-luc,
Il est "joli" (et fonctionnel) le bout de code de jmfmarques !!!
Peux-tu me dire quelles valeurs peut contenir ta variable [MOBISTARidentity].[Champ2]
Je suppose dates anglaises ou françaises.

jean-marc
0
jeanluc065 Messages postés 134 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 1 juin 2007
29 oct. 2006 à 10:21
Bonjour Jean-Marc,

Oui effectivement, mais l'important c'est de le faire fonctionner, ce qui n'est pas mon cas.
Les valeurs que que peuvent prendre [MOBISTARidentity].[Champ2] :
JAN, FEB, MAR, APR, MAY, JUN, JUL , AUG, SEP, OCT, NOV, DEC   et çà se présente toujours sous la forme
26-FEB-2006 
mon souhait : obtenir une mise à jour du champ sous la forme 26/02/2006

Merci d'avance pour le coup de main.
Bon dimanche
JL
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
29 oct. 2006 à 11:36
Re,

Ton problème se résume-t-il à remplacer -xxx- par /yy/ ????

'  [MOBISTARidentity].[Champ2] = "26-FEB-2006"


avant = "26-FEB-2006"


If Mid(avant, 3, 5) "-JAN-" Then avant Replace(avant, "-JAN-", "/01/") If Mid(avant, 3, 5) "-FEB-" Then avant Replace(avant, "-FEB-", "/02/") If Mid(avant, 3, 5) "-MAR-" Then avant Replace(avant, "-MAR-", "/03/") If Mid(avant, 3, 5) "-APR-" Then avant Replace(avant, "-APR-", "/04/") If Mid(avant, 3, 5) "-MAY-" Then avant Replace(avant, "-MAY-", "/05/") If Mid(avant, 3, 5) "-JUN-" Then avant Replace(avant, "-JUN-", "/06/") If Mid(avant, 3, 5) "-JUL-" Then avant Replace(avant, "-JUL-", "/07/") If Mid(avant, 3, 5) "-AUG-" Then avant Replace(avant, "-AUG-", "/08/") If Mid(avant, 3, 5) "-SEP-" Then avant Replace(avant, "-SEP-", "/09/") If Mid(avant, 3, 5) "-OCT-" Then avant Replace(avant, "-OCT-", "/10/") If Mid(avant, 3, 5) "-NOV-" Then avant Replace(avant, "-NOV-", "/11/") If Mid(avant, 3, 5) "-DEC-" Then avant Replace(avant, "-DEC-", "/12/")

jean-marc
0
jeanluc065 Messages postés 134 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 1 juin 2007
29 oct. 2006 à 12:14
Re bonjour Jean-Marc,

Merci pour la réponse.
Oui effectivement, çà doit se résumer à çà . J'ai bien essayé de chercher sur les différents sites où l'on parle de la fameuse fonction REPLACE mais hélas, pour les novices comme moi, il n'y a aucun exemple.
Et des solutions complexes ( pour réduire les lignes de code ), il n'en manque pas mais...les appliquer c'est autre chose.
Toi, tu as l'esprit pratique.
Ce code là, dans mon application, je dois le mettre où ?

Private sub étiquette51_click()

End sub

Encore merci, salutations amicales
JL
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
29 oct. 2006 à 12:26
 Re,

Mettre les mois xxx et yy dans 2 tableaux, et vérifier ta variable prennent + de 12 lignes de code.
Je sais que c'est pas très élégant de mettre 12 Replace !!!

Bonne question de ta part,
Où mettre le code suivant ????

If Mid( [MOBISTARidentity].[Champ2], 3, 5) = "-JAN-" Then new_variable = Replace(avant, "-JAN-", "/01/")
If Mid( [MOBISTARidentity].[Champ2], 3, 5) = "-FEB-" Then new_variable = Replace(avant, "-FEB-", "/02/")

'....
msgbox new_variable

jean-marc
0
jeanluc065 Messages postés 134 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 1 juin 2007
29 oct. 2006 à 15:14
Merci Jean-Marc d'avoir essayé de me dépanner.
C'est énervant parce que quand tu recherches sur les différents tutos, et  sites, tu ne lis que çà...'grâce à la fonction replace, ..... Utilisez la nouvelle fonction replace.....etc.. mais on ne trouve aucun exemple pourtant c'est vrai que çà doit être tout bête (comme moi ).
Il y a une autre solution digne d'un autre temps, extraire les différentes parties de la date, transformer le mois (upadet) et concacéténer ensuite mais CE SERAIT DOMMAGE DE NE PAS EMPLOYER REPLACE, n'est-ce pas ?
Bon fin de dimanche Jean-Marc et encore merci pour ton soutien.
0
Rejoignez-nous