Access VBA, certainement bien mais pas top pour l'instant

renelours - 5 nov. 2001 à 15:49
 rafano - 13 nov. 2001 à 13:44
Bonjour,

j'ai un enorme souci sur access VBA.
apres importation d'un fichier dans une table, je suis amené à retraiter l'ensemble des info de la table pour en creer une nouvelle sans doublons.
En effet, des infos qui devront etre dans un seul enregistrement sont à présent reparties dans plusieurs.
Je n'arrive pas à mette la main sur de la doc concernant la parcours conditionnel (nb de ligne à l'origine des futures enregistrement est variable) des enregistrements d'une base.
Si qqun a deja été confronté au pb, ou connait et/ou dispose d'une doc bien fournit sur ce theme je suis particlièrement interesse.

par avance merci, a bientot

5 réponses

Je ne pense pas que ça soit un problème pour récupérer les enregistrements unique.

Il faut évidemment parcourir la table d'origine et pour chaque ligne, tester dans la table de destination si l'enregistrement existe. S'il n'existe pas, on l'insère sinon on passe à l'enregistrement suivant.

Je resume :

dim dbd as database
dim rs as recordset
dim rt as recordset
dim sTemp as string
dim ssql as string

set dbd = Currentdb
set rs = dbd.openrecordset(TableSource)
do while not rs.EOF
sTemp = rs("CHAMP1")
ssq = "SELECT * FROM TableTarget " ssql ssql & "where Champ1 '" & sTemp & "';"
set rt = dbd.openrecordset(ssql)
if rt.recordcount <> 0 then
ssql = "INSERT INTO TableTarget (Champ1)"
ssql = ssql & " VALUES ('" & sTemp & "');"
dbd.execute ssql
end if
rs.movenext
loop
0
Je vais tacher de tester cela,
en tout cas merci pour la reponse
rapide
0
Il y a erreur :
...
if rt.recordcount = 0 then
...
0
Après quelques neurones grillé et quelques litres de caféine
voici, pour information la solution à mon problème...

Sub TraitemementAnnonce()

Dim dbd As Database
Dim rs As Recordset
Dim w_codsir As String
Set dbd = CurrentDb
Set rs = dbd.OpenRecordset("Bodacc0208", dbOpenTable)

Do While Not rs.EOF
If rs![C2] = "MVT" Then
rs.Edit
rs![Champ1] = rs![C3]
rs.Update
End If
rs.MoveNext
Loop

Set rs = dbd.OpenRecordset("Bodacc0208", dbOpenTable)
Do While Not rs.EOF
If rs![C2] = "MVT" Then
w_codsir = rs![Champ1]
End If
If rs![C2] <> "MVT" And rs![Champ1] = "" Or IsNull(rs![Champ1]) Then
rs.Edit
rs![Champ1] = w_codsir
rs.Update
End If
rs.MoveNext
Loop

End Sub

En te remerciant encore pour m'avoir mis sur la voie

à bientot, salut
0

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

Posez votre question
Il faut voir ton script car tu risque d'avoir des problèmes.

Set rs = dbd.OpenRecordset("Bodacc0208", dbOpenTable)
Do While Not rs.EOF
If rs![C2] = "MVT" Then
w_codsir = rs![Champ1]
End If

'D'accord si rs![C2] = "MVT", w_codsir possède une valeur.
'Sinon il devra pas en avoir

'et si ta condition n'est pas vérifiée, quelle est la valeur de "w_codsir", c-à-d ici ?

If rs![C2] <> "MVT" And rs![Champ1] = "" Or IsNull(rs![Champ1]) Then
rs.Edit
rs![Champ1] = w_codsir

'Il va garder toujours la même valeur que l'ancienne, car il n'est réinitialisé

rs.Update
End If
rs.MoveNext
Loop

'il faut le réinitialisé w_codsir=vbnullstring après Do while. Si la 1ère condition n'est pas vérifiée, sa valeur restera toujours =""

A+
0
Rejoignez-nous