OVH Cloud OVH Cloud

recopier un enregistrement

6 réponses
Avatar
Germain
Bonjour =E0 tous
Tout d'abord je suis un d=E9butant sur access
voila mon soucis: j'ai cr=E9=E9 une table en important un
fichier texte ma table comprend environ 2000000(deux
millions) d'enregistrements. j'ai des champs qui sont vides
et j'aimerai qu'il soient renseign=E9s avec le champs pr=E9c=E9dent.
Copier, coller c'est tr=E8s long vue la taille de la table!!!
Une ame charitable pourrait-elle me donner un rem=E8de?
Merci beaucoup

6 réponses

Avatar
3stone
Salut,

"Germain"
Tout d'abord je suis un débutant sur access
voila mon soucis: j'ai créé une table en important un
fichier texte ma table comprend environ 2000000(deux
millions) d'enregistrements. j'ai des champs qui sont vides
et j'aimerai qu'il soient renseignés avec le champs précédent.
Copier, coller c'est très long vue la taille de la table!!!
Une ame charitable pourrait-elle me donner un remède?


Tu parle de table et champs précédents...
J'imagine que tu parle du champ de l'enregistrement "précédent" ?

Y a-t-il une clé primaire dans cette table ? (très important)

Car, les enregistrements d'une table n'ont pas d'ordre, malgré l'apparence...
Il faut donc, obligatoirement une clé primaire, donc un champ unique,
pour réaliser ce que tu demande.

A défaut, la recopie serait alléatoire... et pur hasard !


--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------
Avatar
-----Message d'origine-----
Salut,

"Germain"
Tout d'abord je suis un débutant sur access
voila mon soucis: j'ai créé une table en important un
fichier texte ma table comprend environ 2000000(deux
millions) d'enregistrements. j'ai des champs qui sont vides
et j'aimerai qu'il soient renseignés avec le champs précédent.
Copier, coller c'est très long vue la taille de la table!!!
Une ame charitable pourrait-elle me donner un remède?


Tu parle de table et champs précédents...
J'imagine que tu parle du champ de l'enregistrement
"précédent" ?


Y a-t-il une clé primaire dans cette table ? (très important)

Car, les enregistrements d'une table n'ont pas d'ordre,
malgré l'apparence...

Il faut donc, obligatoirement une clé primaire, donc un
champ unique,

pour réaliser ce que tu demande.

A défaut, la recopie serait alléatoire... et pur hasard !


--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------



.
oui il y a une clé primaire je fais quoi après ?
merci


Avatar
3stone
Salut,

a écrit
.
oui il y a une clé primaire je fais quoi après ?



Hmmm ;-)

Tu te débrouille avec VBA ?

Commence par crée une requête basée sur ta table, avec un ordre de tri sur ta clé primaire.
Cet ordre te convient ? Est-il le même que celui que "semble" avoir la table ?

Si cela convient, je te donne une petite fonction qui fera le boulot...

NB:
Tu es conscient du fait que si l'ordre est modifié,
la valeur recopiée ne sera pas celle que tu pense...


--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------

Avatar
Germain
-----Message d'origine-----
Salut,

a écrit
.
oui il y a une clé primaire je fais quoi après ?



Hmmm ;-)

Tu te débrouille avec VBA ?

Commence par crée une requête basée sur ta table, avec un
ordre de tri sur ta clé primaire.

Cet ordre te convient ? Est-il le même que celui que
"semble" avoir la table ?


Si cela convient, je te donne une petite fonction qui fera
le boulot...


NB:
Tu es conscient du fait que si l'ordre est modifié,
la valeur recopiée ne sera pas celle que tu pense...


--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------




.
Tous ce que tu dis est déjà fait.
Ce qu'il me faut c'est une routine qui trouve les
enregistrements vides est les renseigne avec

l'enregistrement précédent.
A+ et merci


Avatar
3stone
Salut,

"Germain"
Tous ce que tu dis est déjà fait.


C'est bien ;-)

Ce qu'il me faut c'est une routine qui trouve les
enregistrements vides est les renseigne avec
l'enregistrement précédent.



Y a qu'à demander ;-)

Colle la fonction ci-dessous dans un module (onglet Module)
et sauve-le sous le nom de "mod_MiseaJour"

Ensuite, tu ouvre la fenêtre d'exécution directe ( Control + G ) et tu saisis:

MiseaJour("Nom_de_ta_requête")

Important !!!
Le premier enregistrement de la requête DOIT être complet !!!
Dis-moi combien de temps cela à pris, cette mise à jour...


'//--- début -----------------------------
Function MiseAJour(strNomRequete)
Dim Champ() As Variant, f As Variant, i As Integer
Dim db As DAO.Database, rs As DAO.Recordset

Set db = CurrentDb()
' req_SurTable sera une requête triée sur la clé primaire
' a défaut, renseigner directement la table
Set rs = db.OpenRecordset(strNomRequete)
ReDim Champ(rs.Fields.Count)

'Lire le premier enregistrement qui DOIT être complet
i = 0
For Each f In rs.Fields
Champ(i) = rs.Fields(i).Value
i = i + 1
Next
rs.MoveNext

'// Boucler sur les enregistrements
Do While Not rs.EOF
rs.Edit : i = 0
'On complète les champs vides...
For Each f In rs.Fields
rs.Fields(i) = Nz(rs.Fields(i), Champ(i))
i = i + 1
Next
rs.Update
i = 0
'On mémorise les dernières valeurs
For Each f In rs.Fields
Champ(i) = rs.Fields(i).Value
i = i + 1
Next
'Suivant
rs.MoveNext
Loop

'On termine proprement
rs.Close
Set rs = Nothing
Set db = Nothing
End Function
'//--- Fin ----------------------------------



--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------

Avatar
Germain
-----Message d'origine-----
Salut,

"Germain"
Tous ce que tu dis est déjà fait.


C'est bien ;-)

Ce qu'il me faut c'est une routine qui trouve les
enregistrements vides est les renseigne avec
l'enregistrement précédent.



Y a qu'à demander ;-)

Colle la fonction ci-dessous dans un module (onglet Module)
et sauve-le sous le nom de "mod_MiseaJour"

Ensuite, tu ouvre la fenêtre d'exécution directe ( Control
+ G ) et tu saisis:


MiseaJour("Nom_de_ta_requête")

Important !!!
Le premier enregistrement de la requête DOIT être complet !!!
Dis-moi combien de temps cela à pris, cette mise à jour...


'//--- début -----------------------------
Function MiseAJour(strNomRequete)
Dim Champ() As Variant, f As Variant, i As Integer
Dim db As DAO.Database, rs As DAO.Recordset

Set db = CurrentDb()
' req_SurTable sera une requête triée sur la clé primaire
' a défaut, renseigner directement la table
Set rs = db.OpenRecordset(strNomRequete)
ReDim Champ(rs.Fields.Count)

'Lire le premier enregistrement qui DOIT être complet
i = 0
For Each f In rs.Fields
Champ(i) = rs.Fields(i).Value
i = i + 1
Next
rs.MoveNext

'// Boucler sur les enregistrements
Do While Not rs.EOF
rs.Edit : i = 0
'On complète les champs vides...
For Each f In rs.Fields
rs.Fields(i) = Nz(rs.Fields(i), Champ(i))
i = i + 1
Next
rs.Update
i = 0
'On mémorise les dernières valeurs
For Each f In rs.Fields
Champ(i) = rs.Fields(i).Value
i = i + 1
Next
'Suivant
rs.MoveNext
Loop

'On termine proprement
rs.Close
Set rs = Nothing
Set db = Nothing
End Function
'//--- Fin ----------------------------------



--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------



.
Merci Pierre, je te dirai demain car ma base est au boulot
A+