Acess vba et modification d'un champs dans une base

Loic -  
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

je souhaiterai parcourir ma base de donnée regarder la valeur d'un champs et si elle est pas bonne alors j'attribue tel valeur au champs d'a coté!
Mais ca marche pas, je pense que je peux pas faire d'uptate si je travaille deja sur ma table nn?
Si quelqu'un peut m'aider merci

Dim db As DAO.Database
Dim myrst As DAO.Recordset
Dim temp() As String, i As Integer, resultat As String

'tu definis quelle est la BD étudiée, c'est celle qui est courante..
Set db = CurrentDb

'nom de ta table
matable = "Table1"
monAutreTable = "TABLE_2"

sSQL = "SELECT id,Nom,Avancement from " & matable & " ORDER BY id "

'tu definis ton recordset qui va contenir le resultat de la requete
Set myrst = db.OpenRecordset(sSQL)

'si le recordset n'est pas vide
If Not myrst.EOF Then
' tant qu'il n'est pas vide
Do While Not myrst.EOF
'recuperation des valeurs pour tes 3 champs
temp = Split(myrst.Fields("Avancement").Value, ";")
If UBound(temp) > 0 Then
resultat = " "
For i = 0 To UBound(temp)
If temp(i) = "Refus" Then
resultat = "Refus"
ElseIf temp(i) = "A contacter" Then
If resultat <> "Refus" Then
resultat = "A contacter"
End If
ElseIf temp(i) = "Signe" Then
If resultat <> "Refus" Or resultat <> "A contacter" Then
resultat = "Signe"
End If
End If

Next i
requete = "Update[" & matable & "] SET [Resultat] = [" & resultat & "] where [id] =[" & myrst.Fields("id").Value & "];"
DoCmd.RunSQL (requete)
myrst.MoveNext
End If
Loop

End If

myrst.Close
Set myrst = Nothing
db.Close

1 réponse

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Sub test()
    Dim db As DAO.Database
    Dim myrst As DAO.Recordset
    Dim temp() As String, i As Integer, resultat As String

    'tu definis quelle est la BD étudiée, c'est celle qui est courante..
    Set db = CurrentDb

    'nom de ta table
    matable = "Table1"
    monAutreTable = "TABLE_2"

    sSQL = "SELECT id,Nom,Avancement from " & matable & " ORDER BY id "

    'tu definis ton recordset qui va contenir le resultat de la requete
    Set myrst = db.OpenRecordset(sSQL)

    'si le recordset n'est pas vide
    If Not myrst.EOF Then
    ' tant qu'il n'est pas vide
    Do While Not myrst.EOF
    'recuperation des valeurs pour tes 3 champs
    temp = Split(myrst.Fields("Avancement").Value, ";")
    If UBound(temp) > 0 Then
    'init resultat a chaque tour
    resultat = " "
    For i = 0 To UBound(temp)
    If temp(i) = "Refus" Then
    resultat = "Refus"
    ElseIf temp(i) = "A contacter" Then
    '?????????????????????????? pourquoi voir init resultat
    If resultat <> "Refus" Then
    resultat = "A contacter"
    End If
    ElseIf temp(i) = "Signe" Then
    '????????????????????????? pourquoi voir init resultat
    If resultat <> "Refus" Or resultat <> "A contacter" Then
    resultat = "Signe"
    End If
    End If
    Next i
    requete = "Update [" & matable & "] SET [Resultat] = [" & resultat & "] where [id] =[" & myrst.Fields("id").Value & "];"
    DoCmd.RunSQL (requete)
    End If
    'a faire meme si le champ Avancement est vide
    myrst.MoveNext
    Loop
    End If
    myrst.Close
    Set myrst = Nothing
    db.Close
    End Sub
    0