Itération avec condition vba, excel -> access

Fermé
Teen - Modifié par Teen le 31/10/2011 à 14:35
eljojo_e Messages postés 1155 Date d'inscription lundi 10 mai 2010 Statut Membre Dernière intervention 14 octobre 2022 - 25 nov. 2011 à 15:08
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
A voir également:

1 réponse

eljojo_e Messages postés 1155 Date d'inscription lundi 10 mai 2010 Statut Membre Dernière intervention 14 octobre 2022 153
25 nov. 2011 à 15:08
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