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 :

Créer une colonne dans un fichier excel et la remplir avec la valeur d'une requête


Sujet :

VBA Access

  1. #1
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 175
    Points : 223
    Points
    223
    Par défaut Créer une colonne dans un fichier excel et la remplir avec la valeur d'une requête
    Bonjour à tous,

    J'ai une base de données avec 2 tables.
    LOV_Fund avec 2 colonnes : FUND_ID et FUND_Name.
    PORTFOLIO avec un tas de colonnes dont en 1ère le FUND_ID.

    J'ai des fichiers excel portant le nom de mes fonds.
    Ces fichiers contiennent toute l'information qu'il me faut pour utiliser mon code d'import de fichier excel sauf la 1ère colonne FUND_Id que je n'ai pas dans les fichiers excel.
    J'aimerais lorsque je me connecte à mon fichier excel dans mon code, créer une colonne FUND_ID et y insérer le FUND_ID correspondant au nom de mon fichier excel.(et cela pour le nombre de lignes portant des informations de ma feuille excel à partir de la 2nde ligne)

    Voici mon code qui sert à importer tous les fichiers excel d'un répertoire :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Sub tranfertFeuilleClasseursFermes_VersAccess()
    Dim Cn As New ADODB.Connection
    Dim oProdRS As New ADODB.Recordset, oRS As ADODB.Recordset
    Dim oConn As ADODB.Connection
    Dim j As Integer
    Dim Fichier As String, Repertoire As String
     
    '------------------------------------------------------
    'Connection à la Base Access
    Set oConn = CurrentProject.Connection
     
    'les données seront placés dans Table1
    Set oRS = New ADODB.Recordset
    oRS.Open "Select * from PORTFOLIO", oConn, adOpenKeyset, adLockOptimistic
    '------------------------------------------------------
     
    'Boucle sur les classeurs Excel du répertoire cible
    Repertoire = "C:\Users\qdeutschle\Desktop\LiquidityRisk\FundStock"
    Fichier = Dir(Repertoire & "\*.xlsx")
     
    Do While Fichier <> ""
        'Connection au classeur Excel
        Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source=" & Repertoire & "\" & Fichier & ";" & _
        "Extended Properties=""Excel 8.0;"""
     
        'requête pour extraire les données de la Feuil1
        oProdRS.Open "SELECT * FROM [Sheet1$]", Cn, adOpenStatic
     
        ' --- Transfert des données dans la base ---
        Do While Not (oProdRS.EOF)
            oRS.AddNew
                For j = 0 To oRS.Fields.Count - 1
                oRS.Fields(j) = oProdRS.Fields(j).Value
                Next j
            oRS.Update
            oProdRS.MoveNext
        Loop
        '-------------------------------------------
     
        oProdRS.Close
        'Fermeture de la connection au classeur Excel
        Cn.Close
    Fichier = Dir
    Loop
     
    oRS.Close
    Set oRS = Nothing
    'Fermeture de la connection Access
    oConn.Close
    Set oConn = Nothing
    End Sub

    Ma question est donc, comment faire pour sélectionner le Fund_Id correspondant au nom de mon fichier excel?
    Je sais comment stocker le nom de mon fichier dans une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fich = Left(Fichier, Len(Fichier) - 5)
    Je pensais faire une requête du genre :

    Req = "Select Fund_Id from Lov_Fund where Fund_Name = Fich"

    Ensuite mettre la valeur de Req dans toute la colonne que j'ajoute en 1ère position.
    Mais comment faire cela correctement?
    Pourquoi faire aujourd'hui ce que l'on peut remettre à demain ?

  2. #2
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Re,

    petites remarques :
    1) attention au multipost pour le même sujet (ou quasi), c'est interdit.

    2) Il a sur cette même page un post assez semblable au tien Avant de poster, il est bon de faire quelques recherches.

    Bonne continuation.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  3. #3
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 175
    Points : 223
    Points
    223
    Par défaut
    Euh, ce n'est pas vraiment la même chose, j'ai déjà ma méthode d'importation des données, ce n'est pas cela le problème.
    Le problème est que j'ai une colonne supplémentaire dans ma base access par rapport à mon fichier excel. Je voudrais créer par le code dans mon fichier excel(qui reste fermé) une nouvelle colonne .
    Et mettre dans cette colonne ( qui sera appelée Fund_Id) le résultat d'une requête (qui sera toujours qu'un seul nombre).

    Voilà, je ne sais pas comment créer une colonne dans un fichier excel fermé et ensuite la remplir.
    Et je ne sais pas comment stocker dans une variable le résultat d'une requête.
    Pourquoi faire aujourd'hui ce que l'on peut remettre à demain ?

  4. #4
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Euh, ce n'est pas vraiment la même chose, j'ai déjà ma méthode d'importation des données, ce n'est pas cela le problème.
    As-tu au moins BIEN regardé le lien que je t'ai donné et le lien vers la FAQ qui s'y trouve ? Je doute !!

    A vaincre sans combattre, on triomphe sans gloire !!!
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  5. #5
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 175
    Points : 223
    Points
    223
    Par défaut
    Oui je l'avais déjà vu cette FAQ mais il n'y a que Insertion d'une ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xlSheet.Range("A" & i & ":H" & i).EntireRow.Insert Shift:=xlShiftDown
    Du coup pour une colonne ça serait(en particulier insérer une colonne dans A) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xlSheet.Range("A" & 1 & ":A" & i).EntireRow.Insert Shift:=xlShiftDown
    ??? Et i prend quelle valeur? Faut faire une boucle de i=1 à la longueur de ma colonne A -1 ?

    Et j'aimerais surtout savoir comment stocker la valeur de ma requête dans une variable...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Select FUND_ID From LOV_FUND Where FUND_NAME = '" & Fich & "'"
    Pourquoi faire aujourd'hui ce que l'on peut remettre à demain ?

  6. #6
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 175
    Points : 223
    Points
    223
    Par défaut
    Bon j'ai trouvé un autre moyen en fin de compte ^^!
    Au moins ce sera une victoire avec gloire lol!

    Voila ce que j'ai modifié :
    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
        Fich = Left(Fichier, Len(Fichier) - 5)
        Req = DLookup("[FUND_ID]", "LOV_FUND", "[FUND_NAME] = '" & Fich & "'")
     
        'Connection au classeur Excel
        Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source=" & Repertoire & "\" & Fichier & ";" & _
        "Extended Properties=""Excel 12.0;"""
     
        'requête pour extraire les données de la Feuil1
        oProdRS.Open "SELECT * FROM [Sheet1$]", Cn, adOpenStatic
     
        ' --- Transfert des données dans la base ---
        Do While Not (oProdRS.EOF)
            oRS.AddNew
                j = 0
                oRS.Fields(j) = Req
                For j = 1 To oRS.Fields.Count - 2
                oRS.Fields(j) = oProdRS.Fields(j - 1).Value
                Next j
            oRS.Update
            oProdRS.MoveNext
        Loop
    Du coup je vais chercher avec Dlookup la valeur de mon FUND_ID.
    J'incrémente ma boucle While Not de +1 afin de prendre tous mes champs sauf le premier. Et dans le premier j'y place ma requête.

    Merci ^^!

    Par contre j'ai un problème dans ma base de données, j'ai cette erreur :
    The decimal field's precision is too small to accept the numeric you attempted to add.

    Il me met ce message d'erreur pour des pourcentages...
    J'ai des pourcentages sous excel que je veux importer en pourcentages sous access...Et avec le débbuger il me montre un nombre du genre : 2500000000000, alors que ce n'est que 2.5%.
    Auriez-vous une solution?

    Et j'ai encore un autre problème :
    Operation is notallowed in this context.
    Sur le oRS.Close... Mais je ne sais pas pourquoi...
    Pourquoi faire aujourd'hui ce que l'on peut remettre à demain ?

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 26/09/2014, 14h29
  2. copier /coller une colonne dans un fichier excel
    Par fboss dans le forum VB.NET
    Réponses: 0
    Dernier message: 13/11/2009, 12h33
  3. Selectionner une colonne dans un fichier excel
    Par kinou89 dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/04/2009, 11h53
  4. Réponses: 2
    Dernier message: 07/07/2008, 18h24
  5. recuperer les valeurs d'une cellule dans un fichier excel
    Par cortex59 dans le forum Général VBA
    Réponses: 2
    Dernier message: 24/04/2008, 13h10

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