Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

En VBA, remplacement d'un caractère par un autre pour toutes les données d'une table

3 réponses
Avatar
Patrick_67
Bonjour =E0 toutes et =E0 tous,

Suite =E0 une importation de donn=E9es d'une grande base (hors Access)
dans une table Access, certains caract=E8res accentu=E9s tels que "=E9"
n'apparaissent pas correctement (par exemple sous la forme =AB =DA =BB).

Une fois l'importation effectu=E9e, j'aimerai qu'une proc=E9dure VBA
remplace automatiquement le caract=E8re erron=E9 =AB =DA =BB par =AB =E9 =
=BB dans tous
les champs de la table Access.

J'aimerai donc faire l'=E9quivalent (en VBA) de la bo=EEte de dialogue =AB
Edition/Remplacer =BB avec les param=E8tres suivants :
=B7 Rechercher : =DA
=B7 Remplacer par : =E9
=B7 Regarder dans : =AB Toute la table =BB
=B7 O=F9 : =AB N'importe o=F9 dans le champ =BB
=B7 Remplacer Tout...

En r=E9sum=E9, la bo=EEte de dialogue =AB Remplacer =BB a-t-elle un =E9quiv=
alent
simple en VBA ?

Merci d'avance de vos r=E9ponses...

Patrick.

3 réponses

Avatar
Raymond [mvp]
Bonjour.

As-tu d'abord essayé d'importer en modifiant les spécifications, option Page
de codes, en sélectionnant le code correspondant (exemple ASCII é-U) ? ce
serait préférable de trouver la page de codes exact.

--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/

Partagez vos créations réalisées sous Office 2007 et gagnez peut-être 5000?
!
http://www.comscamp.com/Tracker/Redirect.ashx?linkid"7641a0-797c-44d5-8774-d820448dbe90


"Patrick_67" a écrit dans le message de news:

Bonjour à toutes et à tous,

Suite à une importation de données d'une grande base (hors Access)
dans une table Access, certains caractères accentués tels que "é"
n'apparaissent pas correctement (par exemple sous la forme « Ú »).

Une fois l'importation effectuée, j'aimerai qu'une procédure VBA
remplace automatiquement le caractère erroné « Ú » par « é » dans tous
les champs de la table Access.

J'aimerai donc faire l'équivalent (en VBA) de la boîte de dialogue «
Edition/Remplacer » avec les paramètres suivants :
· Rechercher : Ú
· Remplacer par : é
· Regarder dans : « Toute la table »
· Où : « N'importe où dans le champ »
· Remplacer Tout...

En résumé, la boîte de dialogue « Remplacer » a-t-elle un équivalent
simple en VBA ?

Merci d'avance de vos réponses...

Patrick.
Avatar
Patrick_67
N'ayant pas trouvé de solutions vraiment satisfaisantes sur Internet,
j'ai préféré écrire la fonction personnalisée suivante :

Function Remplacement(Table_Ou_Requête As String, _
Nom_Du_Champ As String, _
Chaîne_Initiale As String, _
Chaîne_Finale)

'-------------------------------------------------------------------------- ------------
' Fonction qui remplace une chaîne de caractères par une autre pour :
' l'ensemble des enregistrements d'un Recordset (Table ou Requête)
' et soit pour tous les champs d'un Recordset, soit pour un champ
unique d'un Recordset
'-------------------------------------------------------------------------- ------------
' Paramètres de la fonction :
' 1. Table_Ou_Requête :
' Nom de la table ou de la requête concernée par le
remplacement
' 2. Nom_Du_Champ :
' Soit le nom d'un champ
' (si le remplacement doit s'effectuer sur un champ unique
du Recordset)
' Soit la constante "(Tous_Les_Champs)"
' (si le remplacement doit s'effectuer sur tous les champs
du Recordset)
' 3. Chaîne_Initiale :
' La chaîne de caractères qui va être remplacée
' 4. Chaîne_Finale :
' La chaîne de caractères qui va remplacer la chaîne initiale
'
' Exemples d'appel de la fonction :
' Call Remplacement("T_Salariés", "(Tous_Les_Champs)", "Ú", "é")
' => pour l'ensemble des champs de la table "T_Salariés", remplace
chaque "Ú" par un "é"
' Call Remplacement("T_Salariés", "Nom", "Ú", "é")
' => uniquement pour le champ "Nom" de la table "T_Salariés",
remplace chaque "Ú" par un "é"

Dim Jeu_Enregistrements As DAO.Recordset
Dim Champ As DAO.Field

Set Jeu_Enregistrements = CurrentDb.OpenRecordset(Table_Ou_Requête)

With Jeu_Enregistrements

' Positionnement sur le 1er enregistrement
.MoveFirst

' Boucle sur l'ensemble des enregistrements
Do While Not .EOF

' Pour des modifications ultérieures du Recordset
.Edit

Select Case Nom_Du_Champ

Case "(Tous_Les_Champs)"
' tous les champs du Recordset sont à mettre à jour

' boucle sur l'ensemble des champs de Recordset
For Each Champ In Jeu_Enregistrements.Fields
On Error Resume Next
' remplacement
Champ.Value = Replace(Champ.Value,
Chaîne_Initiale, Chaîne_Finale)
On Error GoTo 0
Next Champ

Case Else
' un seul champ du Recordset est à mettre à jour

' remplacement
.Fields(Nom_Du_Champ) = Replace(.Fields(Nom_Du_Champ),
Chaîne_Initiale, Chaîne_Finale)

End Select

' Mise à jour du Recordset
.Update

' Passage à l'enregistrement suivant du Recordset
.MoveNext

' Fin de la boucle sur l'ensemble des enregistrements
Loop

End With

' Fermeture du Recordset
Jeu_Enregistrements.Close

End Function
Avatar
Raymond [mvp]
Bonsoir.

tu n'as pas répondu à ma question. avant de réinventer l'eau tiède il
vaudrait mieux vérifier si elle existe ou non ?

--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/

Partagez vos créations réalisées sous Office 2007 et gagnez peut-être 5000?
!
http://www.comscamp.com/Tracker/Redirect.ashx?linkid"7641a0-797c-44d5-8774-d820448dbe90


"Patrick_67" a écrit dans le message de news:

N'ayant pas trouvé de solutions vraiment satisfaisantes sur Internet,
j'ai préféré écrire la fonction personnalisée suivante :