Itération avec condition vba, excel -> access

Teen -  
eljojo_e Messages postés 1255 Statut Membre -
Bonjour le forum,

J'utilise un programme vba sur excel qui fonctionne très bien et je souhaite désormais l'utiliser sur une table access, mais le langage vba semble bien différent. Mes interrogations sont :

-Comment affecter à une variable la valeur d'un champ d'un enregistrement, équivalent de mavariable = Range("A" & i).value dans vba pour excel?

-Comment affecter à une variable la valeur d'un champ d'un enregistrement précédent, équivalent de mavariable = Range("A" & i-1).value?

-Comment inscrire ces variables dans ma table, équivalent de Range("A" & i-1).value = mavariable

Si vous nécessitez plus d'infos, voici le code simplifié que je veux traduire, toutes les variables sont de type : temps_prod = Range("A" & i).Value ou Range("A" & i-1).Value
 For i = 2 To fin 
    If Ligne1 = Ligne0 Then 
    temps_prod = temps_prod + temps * quantité 
             
            If temps_prod < délai Then 
            consomation_max = consomation_max + consomation 
            Else: 
            consomation_max = consomation_max + (délai - Range("I" & i - 1).Value) / Range("E" & i).Value 
            End If 
             
    Else: 
    temps_prod = temps * quantité 
    consomation_max = consomation 
    End If 

'Ecriture des valeurs dans des cases excel 
Workbooks("Calculo consumo.xls").Activate 
Range("I" & i).Value = temps_prod 
Range("J" & i).Value = consomation_max 
Next 

End Sub 


Je vous remercie pour votre aide.

Teen

1 réponse

  1. eljojo_e Messages postés 1255 Statut Membre 155
     
    Salut,

    Sur access, tu ne peut pas ciblé exactement un champ directement comme excel.
    Access fonctionne par enregistrement (ligne).
    Je pense qu'il, soit utiliser une requete Mise a jour soit passer par la méthode recorset (un peu plus complexe) exemple :

    Sub test()

    '
    '
    Dim TPTX As Recordset 'défini TPTX comme un enregistrement d'une table en général
    Dim TFU As Recordset
    Dim cTPTX, cTFU As Integer

    Set data_base = CurrentDb 'défini date_base comme la base ouverte

    Set TPTX = data_base.OpenRecordset("T Pgm TX", dbOpenTable) 'défini TPTX comme enregistrement de la table indiqué

    cTPTX = TPTX.RecordCount ' nombre d'enregistrement

    TPTX.MoveFirst ' aller au premier enregistrement

    For a = 1 To cTPTX ' cTPTX étant le nombre d'enregistrement

    If TPTX![id].Value = "" Or IsNull(TPTX![id].Value) Then
    Select Case MsgBox("ID inexistant pour : " & vbLf & vbLf & TPTX![COMMUNES].Value & " " & TPTX![LOCALISATION PRECISE].Value & " " & TPTX![TypeAU].Value & " " & TPTX![Référence Urbanisme].Value & vbLf & vbLf & "En générer un ? - > ID " & (DMax("[ID]", "T Pgm TX") + 1), vbYesNo)
    Case vbYes

    TPro.Edit 'Permet d'éditer un champ (ou une case en excel)
    TPTX![id] = DMax("[ID]", "T Pgm TX") + 1
    TPro.Update ' valide le champ

    Case vbNo
    End Select
    End If

    next
    0