IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Attribuer à un enregistrement ACCESS la valeur d'une variable calculée en VBA


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Attribuer à un enregistrement ACCESS la valeur d'une variable calculée en VBA
    Bonjour,

    Je dois réaliser un programme en VBA sur ACCESS. J'ai quelques notions de VBA sur Excel et quelques notions d'ACCESS.

    Le programme est simple sur Excel je ne sais pas s'il peut être facilement transposable sur ACCESS :

    Il y a 1 Table => "Calcul"

    Cette table "Calcul" contient 4 Champs :

    - "Clé", NuméroAuto
    - "A", numérique
    - "B", numérique
    - "C", numérique

    Objectif :

    - enregistrer pour chaque ligne de cette table la valeur "C" = "A" * "B"
    - je souhaite que mon code VBA réalise cette multiplication => variable "Mult"

    Au final je voudrais un code similaire au code ci-dessous :

    (En rouge les éléments que je ne connaîs pas => manipulation des objets ACCESS en VBA)

    Sub Multiplication

    Dim A, B, Mult as Double
    Dim i as integer

    For i = 1er enregistrement to dernier enregistrement

    A = [Calcul]![A].ligne i ' par exemple 2
    B = [Calcul]![C].ligne i ' par exemple 3
    Mult = A * B ' par exemple 2*3 = 6
    [Calcul]![C].ligne i = Mult

    Next i

    End Sub

    Est-il possible de créer ce genre de code sur ACCESS ?
    Je précise qu’il est nécessaire de conserver la notion de « Enregistrement » = variable calculée par VBA.

    Merci par avance de votre aide.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Tu peux le faire en VBA mais une requête de MAJ, et à vrai dire plutôt une requête simple car il est recommandé de ne pas stocker le résultat d'un calcul dans une table à moins d'avoir des problèmes de performance, serait plus efficace.

    Faier excuter la requête peut se faire ainsi :

    docmd.setWarning false 'Annlue les alertes sur les requêtes de modif de données
    docmd.runquery("NomTaQuery")
    docmd.setWarning true 'Rétablit les alertes sur les requêtes de modif de données

    Ici tout de même un exemple de code qui fait ce que tu demandes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    Sub Multiplication
     
    Dim A as Double, B as Double, Mult as Double 'En VBA il faut préciser le type de TOUTES les variables lors d'une déclaration multiple
    Dim i as integer
     
    dim db as dao.database:set db=currentdb
    dim r as dao.recordset:set=r=db.openrecordset("NomSourceDonnees",dbOpenDynaset)
     
    do while not r.eof() 'tant qu'il y a des lignes dans la source
       r.edit
       A = r![A]
       B = r![B]
       Mult = A * B ' par exemple 2*3 = 6
       r![C] = Mult 'ou r![c]=r![a]*r![b] qui remplace les 3 lignes précdentes
       r.update
       r.movenext 'Passe à l'enregistrement suivant
    loop
     
    r.close:set r=nothing 'Ferme la source de données, libère la mémoire utilisée
    set db=nothing 'Libère la mémoire utilisée
     
    End Sub
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Génial merci beaucoup. Cette réponse répond parfaitement à ma demande.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Je dois m'appuyer sur un algorithme pour trouver chaque résultat c'est pourquoi j'avais besoin de savoir comment utiliser VBA.

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Pour info tu peux combiner VBA et une requête en utilisant aussi une fonction VBA.

    ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public MaFonction(monParam as unType, monParam2 as unAutreType) as unTypeDifferent
      dim result as unTypeDifferent
      '
      ' ici du code VBA
      '
      MaFonction=result
    end function
    et en SQL

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select MaTable.*, MaFonction([MonChamp1], [MonChamp2]) as MonChampCalcule form MaTable;

    Va faire les calculs contenus dans MaFonction pour tous les enregistrements de MaTable.

    Ainsi tu économise la boucle de parcours.

    Toutefois cela peut être parfois moins rapide. La présence de la fonction empèche l'optimisation de l'exécution de la requête ... en pratique cela n'est générale pas trop un problème.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

Discussions similaires

  1. Enregistrer la valeur d'une variable
    Par horneth dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 08/01/2014, 21h37
  2. Réponses: 3
    Dernier message: 26/09/2009, 00h06
  3. Attribuer la valeur d'une variable à un fichier txt,VBScript
    Par MartinezGarcia dans le forum VBScript
    Réponses: 4
    Dernier message: 12/02/2008, 10h35
  4. Réponses: 4
    Dernier message: 04/08/2007, 17h04
  5. Réponses: 2
    Dernier message: 22/05/2007, 16h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo