VBA - Enregistrement dans Access depuis Excel

Bonjour le forum,

N'ayant pas trouver de réponses à mes questions dans les discussions du forum, je me permet de faire ce post.

J'ai un fichier Excel qui me sert à éditer des rapports, le contenu des rapports est actuellement enregistré dans le même fichier Excel (tableau structuré).
Le problème, c'est que mes données deviennent importantes ce qui ralenti grandement mon fichier lors de chargement ou sauvegarde de mes rapports.
De plus, ce fichier est sur un OneDrive et plusieurs utilisateurs peuvent y acceder, ce qui forcément me pose des problèmes d'enregistrement en simultané.

Pour palier à mon problème je m'intéresse à une base de données Access, cependant je débute sur Access et ne connait pas encore les commandes VBA associées.

Ci-joint vous trouverez un exemple (une partie) d'un de mes rapports à sauvegarder dans la db Access. Je ne peux malheureusement pas joindre la db Access (format non autorisé) mais vous trouverez une image de mes champs (peut-importe au final, c'est la méthode qui m'intéresse).

Mon problème réside dans le contrôle d'enregistrement existant et non pas dans l'enregistrement en lui-même.
En effet, pour mettre à jour mon enregistrement s'il existe, je dois contrôler la valeur de 4 champs.
Comme vous pouvez le voir sur l'image ci-dessous, j'ai essayé de créer une clé composite pour palier à mon problème et de chercher dans l'index, mais un champ calculé ne peut pas être un index...

Enfin bref, si quelqu'un d'entre vous connais la bonne synthaxe pour palier à mon problème, je suis preneur

Merci d'avance,
Kilian

test database forum

Bonjour Kilian1906

Essayez de remplacer donc votre "Rs.FindFirst" propriété qui n'existe pas en instruction Access par "rs.Find"

image

A+

Hello Bruno,

Merci pour ton retour.

C'est une option que j'avais déjà exploré mais d'après la doc Microsoft il s'agit d'une méthode de l'objet module et non de l'objet RecordSet.

image

J'ai tout de même essayé dans ma procédure Test3, cependant la méthode rs.NoMatch n'existe pas non plus.
Je ne sais donc pas quelle méthode adopté pour savoir si la méthode renvoi une correspondance.

Merci,
Kilian

Re

Outch...

Rs un définit comme un RecordSet, rien à voir avec "Module"

Utilisez les bons objets dans vos recherches...

Re,

Oui très juste, erreur de ma part... C'est que dans mes recherches dans la doc, l'objet RecordSet ne contient pas de méthode Find...

Mais je viens d'arriver à mes fins avec la propriété EOF et les méthodes MoveFirst & MoveNext.

    Set rs = db.OpenRecordset("DB_Report")

    Dim critere As String
    critere = "[Type of control] = '" & WsMCR.Range("A10").Value & "' AND [Machine number] = '" & WsMCR.Range("H2").Value & "' AND [Items number] = '" & rTBMCR(n, 4).Value & "' AND [Short description] = '" & rTBMCR(n, 6).Value & "'"

    With rs
        .MoveFirst
        Do Until .EOF
            If .Fields("Type of control").Value = WsMCR.Range("A10").Value And _
               .Fields("Machine number").Value = WsMCR.Range("H2").Value And _
               .Fields("Items number").Value = rTBMCR(n, 4).Value And _
               .Fields("Short description").Value = rTBMCR(n, 6).Value Then
                RecordExists = True
                Exit Do
            End If
            .MoveNext
        Loop

        If Not RecordExists Then RecordExists = False

Je ne sais pas si c'est le moyen le plus simple car ce chemin m'a l'air un peu long pour quelque chose qui doit être du standard dans le traitement des bases de données...

S'il y a d'autre méthodes plus courtes ou "plus juste", je reste preneur car je devrai adapter pas mal de lignes pour avoir l'entièreter sur Access...

Merci, A+
Kilian

Rechercher des sujets similaires à "vba enregistrement access"