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 :

Insertion d'un champ calculé dans table [AC-2016]


Sujet :

VBA Access

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut Insertion d'un champ calculé dans table
    bonjour le phorum

    j'aurai besoin d'un peu de lumière pour cette requête VBA
    en effet je cherche à intégrer dans un champ access une donnée variable issue d'une variable VBA et d'un champ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CheminComplet = Application.CurrentProject.Path & "\"
         VarTabSplit = Split(Application.CurrentProject.Path, "\")
         Chemin = ""
         For IntCnt = 0 To UBound(VarTabSplit) - 1
               Chemin = Chemin & VarTabSplit(IntCnt) & "\"
         Next IntCnt
         EX = Extrait(Chemin, "MD", " ", "_", 1)
               NUMDOSSIER = EX => variable VBA
    
    SQL = "INSERT INTO IMPORTATION_RECAP (DOSSIER) SELECT " & NUMDOSSIER & "-" & " NUMPARUTION;" => valeur de mon champ
    la valeur du champ se trouve dans la table ou je souhaite insérer la valeur EX-NUMPARUTION dans le champ DOSSIER
    J'ai ce message d'erreur à l'arrivée
    Citation Envoyé par Access
    incompatibilité de type
    quelqu'un ou quelqu'une aurai une idée ?

    merci d'avance pour vos pistes

    david

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Si il s'agit d'une variable VBA il ne faut pas mettre de guillemet après le & :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "... SELECT " & NUMDOSSIER & "-" & mavariable & "...;"
    Par contre si la valeur est un string il faut doubler les guillemets avant et après comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "... SELECT """ & NUMDOSSIER & "-" & mavariable & """...;"

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,

    je cherche à intégrer dans un champ access une donnée variable issue d'une variable VBA et d'un champ

    la valeur du champ se trouve dans la table ou je souhaite insérer la valeur EX-NUMPARUTION dans le champ
    Ce n'est pas tout à fait clair: tu souhaites insérer une valeur dans le champ DOSSIER de la table IMPORTATION_RECAP ==> OK
    Tu récupères une variable : NUMDOSSIER ==> OK
    mais si tu récupères NUMPARUTION dans la table IMPORTATION_RECAP, quand et comment l'enregistrement est choisi ?
    Faut-il insérer un nouveau ou mettre à jour l'enregistrement choisi ?
    De plus, pourquoi vouloir ajouter une information venant d'un champ d'une table à un autre champ de cette même table ? Il suffit de concaténer les 2 champs avec une requête.

    Peux-tu afficher la structure de ta table avec un aperçu des données et un exemple de la variable que tu extrais ?
    Cela permettra de mieux comprendre ton besoin.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    merci à vous deux pour vos réponses

    la structure de ma table en résumé est
    DOSSIER
    SEQUENCE
    ADRS1
    ADRS2
    ADRS3
    ADRS4
    NUMPARUTION

    Tous est au format texte
    je cherche donc à faire un concatener de la variable créée NUMDOSSIER avec le NUMPARUTION
    Ce qui devrait donner par exemple
    MD0757-FDC01
    MD0757-FDC01
    MD0757-FDC02

    Et que ce résultat s'affiche dans le champ DOSSIER

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "INSERT INTO IMPORTATION_RECAP (DOSSIER) SELECT " & NUMDOSSIER (variable fixe) & "-" & " NUMPARUTION(valeur du champ dynamique);"
    et ensuite créer dans le champ séquence un numéro séquentiel du nombre de ligne de la table au format texte également

  5. #5
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    pour commencer, je persiste à dire qu'il ne faut pas stocker une valeur déjà présente dans une table : dans DOSSIER, il faudrait mettre uniquement la variable récupérée par VBA, après, tu peux toujours les afficher en les concaténant, (c'est utilisé fréquemment par exemple, avec Nom et Prénom) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DOSSIER & "-" & NUMPARUTION as NUMDOSSIER FROM  IMPORTATION_RECAP
    dans un premier temps la requête devrait ressembler à cela par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "INSERT INTO IMPORTATION_RECAP (DOSSIER) SELECT """ & NUMDOSSIER & "-" & """ NUMPARUTION FROM IMPORTATION_RECAP;"
    Mais, tu n'expliques toujours pas comment est choisi l'enregistrement avec NUMPARUTION pour l'insertion dans la table, faut-il sélectionner un enregistrement ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "INSERT INTO IMPORTATION_RECAP (DOSSIER) SELECT """ & NUMDOSSIER & "-" & """ NUMPARUTION FROM IMPORTATION_RECAP WHERE NUMPARUTION=""FDC02"";"
    ou alors, faut-il mettre à jour tous les enregistrements existants ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "UPDATE IMPORTATION_RECAP SET DOSSIER = """ & NUMDOSSIER & "-" & """ NUMPARUTION;"
    et ensuite créer dans le champ séquence un numéro séquentiel du nombre de ligne de la table au format texte également
    quelle idée de choisir le format texte pour stocker un nombre de lignes, et à chaque fois qu'un enregistrement est créé il faudra tous les mettre à jour ?

    Désolé, je n'ai toujours pas tout compris
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    Salut tee_granbois

    désolé pour cette réponse plus que tardive
    j'ai appliqué ton conseil pour le numéro de dossier et numéro de parution
    voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Function NumDossier_NumParution()
     
    'Initialisation du nom de Dossier
        répertoire = Application.CurrentProject.Path & "\"
        ExtractionNiv1 = InStr(1, répertoire, "MD")
        ExtractionNiv2 = Mid(répertoire, ExtractionNiv1, 6)
     
    'Dossier & Num parution
    SQL = "UPDATE IMPORTATION_RECAP SET DOSSIER = """ & ExtractionNiv2 & "-" & """ & NUMPARUTION;"
    CurrentDb.Execute SQL
     
    End Function
    je n'ai plus qu'à ajouter un numéro séquentiel au bout de la chaine ExtractionNiv2&"-"&NUMPARUTION
    par contre y a t'il une méthode rapide via VBA pour initialiser le nombre de lignes présent dans la table de 0 à x

    merci d'avance pour ton retour ou piste

    cdt

    david

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    bon j'ai un début de solution, par contre il me met le nombre total de ligne à la fin de la macro
    je me doute que je n'utilise pas la bonne méthode, y a t il une ame charitable qui pourrait m'aiguiller sur l'instruction qui permette de mettre sur le ligne 1, la séquence 1, ligne 2 la séquence 2 etc... jusqu'à la fin
    voici le code actuel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        NombreLigne = DCount("*", "IMPORTATION_RECAP") = nombre de ligne de la base
        répertoire = Application.CurrentProject.Path & "\"
        ExtractionNiv1 = InStr(1, répertoire, "MD")
        ExtractionNiv2 = Mid(répertoire, ExtractionNiv1, 6)
     
     
     
    For i = 1 To NombreLigne = test sur toutes les lignes
        SQL = "UPDATE IMPORTATION_RECAP SET DOSSIER = """ & ExtractionNiv2 & "-" & """ & NUMPARUTION, SEQUENCE = """ & Format(i, "00000") & """ ;"
        CurrentDb.Execute SQL
    Next i = séquence suivante
    au final dans la colonne séquence, j'obtiens 11 (nombre de ligne de la table) sur toutes les lignes...

    merci pour un coup de main

    david

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    au final dans la colonne séquence, j'obtiens 11 (nombre de ligne de la table) sur toutes les lignes...
    ton code met à jour tous les enregistrements de la table car il n'y a pas de critère pour sélectionner une ligne en particulier.
    Le mieux c'est de faire une boucle avec un RecordSet:
    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
    Dim répertoire As String, ExtractionNiv1 As String, ExtractionNiv2 As String
    Dim oRst As Recordset
    Dim oDb As Database
    Set oDb = CurrentDb
    Set oRst = oDb.OpenRecordset("Select * from importation_recap", dbOpenDynaset)
     
    répertoire = Application.CurrentProject.Path & "\"
    ExtractionNiv1 = InStr(1, répertoire, "MD")
    ExtractionNiv2 = Mid(répertoire, ExtractionNiv1, 6)
     
    Do Until oRst.EOF
        oRst.Edit
        oRst.Fields("DOSSIER") = ExtractionNiv2 & " - " & oRst.Fields("NUMPARUTION")
        oRst.Fields("SEQUENCE") = Format(oRst.AbsolutePosition + 1, "00000")
        oRst.Update
        oRst.MoveNext
    Loop
     
    oRst.Close
    oDb.Close
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    Merci tee grandbois
    Je tournais autoyrcsans trouver
    Je teste demain et te tiens au courant
    Merci encore

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    bonjour à tous et un grand merci à tee_grandbois

    tout marche nickel

    encore merci

    david

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2016] Champ calculé dans table (décimales et unités)
    Par tree.management dans le forum Modélisation
    Réponses: 2
    Dernier message: 03/04/2018, 20h42
  2. [AC-2010] Champ calculé dans Table
    Par Buffet76 dans le forum Access
    Réponses: 4
    Dernier message: 02/05/2017, 21h10
  3. Réponses: 1
    Dernier message: 15/11/2010, 10h19
  4. Créer un champ calculé dans une table
    Par tigevellou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/04/2006, 15h08
  5. Champ text dans table inserted ?
    Par devdev dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 28/06/2004, 17h00

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