OVH Cloud OVH Cloud

boucler sur un tableau ?

1 réponse
Avatar
Bonjour a tous

j'ai écrit la fonction suivante pour faire un trim sur tous les champs texte
d'une table(table_refs), mon probleme c'est que j'ai une autre table a
traiter(table_datas) et je me dis qu'il doit y avoir un truc plus
intelligent que d'écrire 2 fois tout le code...

donc je me dis qu'il doit falloir écrire avant le 1er "set rst" , un "array
(table_refs,table_datas)" mais je vois pas comment passer ensuite les
valeurs du tableau a l'instruction "set rst = dbs.openrecordset (1ere
valeurdu tableau)" et boucler pour toutes les valeurs du tableau...

j'espere avoir été claire... :-) merci pour votre aide.

Function trimage()
Dim dbs As Database, rst As DAO.Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Table_Refs")
rst.MoveFirst
While Not rst.EOF
rst.Edit
For Each Field In rst.Fields
If Field.Type = dbText Then Field.Value = Trim(Field.Value)
'If Field.Type = dbText Then Debug.Print Len(Field.Value) &
" - " & Field.Value & " - " & Field.Name
Next Field
rst.Update
rst.MoveNext
Wend
rst.Close
Set rst = Nothing
End Function

1 réponse

Avatar
Eric
Bonjour Camille,

Si tu veux faire ca avec un Array, tu dois transformer ton code comme ceci :

Function trimage()
Dim dbs As DAO.Database, rst As DAO.Recordset
Set dbs = CurrentDb
Dim temp '<<---- ne pas typer temp
Dim i As Integer ' ou Byte <<----
temp = Array("table_refs", "table_datas") '<<----
For i = LBound(temp) To UBound(temp) '<<----
Set rst = dbs.OpenRecordset(temp(i)) '<<----
rst.MoveFirst
While Not rst.EOF
rst.Edit
For Each Field In rst.Fields
If Field.Type = dbText Then Field.Value = Trim(Field.Value)
'If Field.Type = dbText Then Debug.Print
Len(Field.Value) & _
" - " & Field.Value & " - " & Field.Name
Next Field
rst.Update
rst.MoveNext
Wend
rst.Close
Next i '<<----
Set rst = Nothing
End Function


Une autre solution consisterait à faire de ta fonction une fonction
générique à laquelle tu passerais en argument le nom de la table ou du
recordset.(Utilisable n fois)

Function trimage2(NomRecordset As String)
Dim dbs As DAO.Database, rst As DAO.Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset(NomRecordset)
rst.MoveFirst
While Not rst.EOF
rst.Edit
For Each Field In rst.Fields
If Field.Type = dbText Then Field.Value = Trim(Field.Value)
'If Field.Type = dbText Then Debug.Print
Len(Field.Value) & _
" - " & Field.Value & " - " & Field.Name
Next Field
rst.Update
rst.MoveNext
Wend
rst.Close
Set rst = Nothing
End Function


--
A+
Eric
Un petit tour ici : http://users.skynet.be/mpfa/
Accès aux archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Bonjour a tous

j'ai écrit la fonction suivante pour faire un trim sur tous les champs texte
d'une table(table_refs), mon probleme c'est que j'ai une autre table a
traiter(table_datas) et je me dis qu'il doit y avoir un truc plus
intelligent que d'écrire 2 fois tout le code...

donc je me dis qu'il doit falloir écrire avant le 1er "set rst" , un "array
(table_refs,table_datas)" mais je vois pas comment passer ensuite les
valeurs du tableau a l'instruction "set rst = dbs.openrecordset (1ere
valeurdu tableau)" et boucler pour toutes les valeurs du tableau...

j'espere avoir été claire... :-) merci pour votre aide.

Function trimage()
Dim dbs As Database, rst As DAO.Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Table_Refs")
rst.MoveFirst
While Not rst.EOF
rst.Edit
For Each Field In rst.Fields
If Field.Type = dbText Then Field.Value = Trim(Field.Value)
'If Field.Type = dbText Then Debug.Print Len(Field.Value) &
" - " & Field.Value & " - " & Field.Name
Next Field
rst.Update
rst.MoveNext
Wend
rst.Close
Set rst = Nothing
End Function