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

Macros et VBA Excel Discussion :

Comparaison d'une base de donnée et insertion de la donnée


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 93
    Par défaut Comparaison d'une base de donnée et insertion de la donnée
    Bonjour à tout le monde, j'ai un nouveau problème à résoudre...

    J'ai un fichier excel avec beaucoup de colonnes et un fichier access avec ma base donnée. Quand je lance ma macro, je veux comparer certaines colonnes de mon fichier excel avec ma base donnée et si c'est les mêmes je veux mettre les données correspondantes de ma base donnée dans un autre fichier excel dans une certaine colonne...

    Un exemple sera plus compréhensible ^^. Par exemple dans le fichier que je reçois, y a différents produits en ligne avec des spécificité en colonnes. Une colonne par exemple c'est région, et c'est codé sur ce fichier excel par exemple A4582, qui correspond à une région spécifique dans ma base de donnée. donc j'aimerai comparer les colonnes nécessaire avec ma base, et si ça correspond envoyé la région correspondant au produit dans un autre fichier excel avec son produit correspondant... Je vous écris le code que j'ai écris pour linstant peut être vous comprendriez mieux...

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    Function insertion_donné()
     
    ' type des produit
     
     xls.Workbooks.Open FichierPath & "HISINVtest.xls"
        xls.Visible = True
    xls.Windows("HISINVtest.xls").Activate
     
    Set HISIN = xls.Windows("HISINVtest.xls")
     
    code_majeure = HISIN.Cells(i, O).Value
    code_mineure = HISIN.Cells(i, N).Value
     
    srequete3 = "SELECT*FROM code_produit"
    rs3("code majeur") = majeur
    rs3("code mineur") = mineur
    rs3("description") = Description
     
    For i = 1 To 5000
        If code_majeure = majeur And code_mineure = mineur Then
            xls.test.FONDS.TYPE_INSTRUMENT = Description
        End If
    Next i
     
    ' précision type produit
     
    prdt_precis = HISIN.Cells(i, AR).Value
    libel = HISIN.Cells(i, AL).Value
     
    srequete3 = "SELECT*FROM code_actif"
    rs3("code") = code
    rs3("actif") = actif
     
     
    For i = 1 To 5000
        If prdt_precis = code Or libel = code Then
            xls.test.FONDS.SECURITY_TIP = actif
        End If
    Next i
     
    ' zone géo
     
    GEO = HISIN.Cells(i, AP).Value
    geoeco = HISIN.Cells(i, AQ).Value
     
    srequete3 = "SELECT*FROM code_zone"
    rs3("code") = code
    rs3("zone") = zone
     
    For i = 1 To 5000
        If GEO = code Or geoeco = code Then
            xls.test.FONDS.GEO = zone
        End If
    Next i
     
    ' type d'OPC
     
    typ_OPC = HISIN.Cells(i, AM).Value
     
    srequete3 = "SELECT*FROM code_OPC"
    rs3("code") = code
    rs3("OPC") = OPC
     
    For i = 1 To 5000
        If typ_OPC = code Then
            xls.test.FONDS.FUND_TYP = OPC
        End If
    Next i
     
     
    End Function


    les majuscules après le nom du feuillet comme là FUND_TYP pour le dernier ça correspond à certaines colonnes...



    Voilà si vous pouvez m'éclairer sur comment je peux faire...

    Merci

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Ton code est dans le fichier Excel, Access ou dans un fichier tiers ?

    Juste une remarque préalable : je ne vois pas d'ouverture de connexion, ni de recordset...

    Ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    srequete3 = "SELECT*FROM code_produit"
    rs3("code majeur") = majeur
    rs3("code mineur") = mineur
    rs3("description") = Description
    Devrait lever une erreur...

    Cordialement,

    PGZ

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 93
    Par défaut
    le programme est sur access désolé...

    et non je n'ai pas oublié le recordset et compagnie je les ai juste pas copié ... il le faut ? je vous le met là donc

    après srequete3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    rs3.open srequete3, cnCon, adopendynamic, adlockoptimistic
    if rs3.EOF = true then
    rs3.addnew
    else rs3.movefirst
    end if

    voilà voilà

  4. #4
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Re,

    Apparemment tu as déjà fait pas mal de choses. Tu as montré des parties du code, mais pas tout, et je ne vois plus trop quelle est ta question.
    A ce stade qu'est-ce qui marche ? Qu'est-ce qui te pose pb ?

    Cordialement,

    PGZ

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 93
    Par défaut
    oui oui j'ai écrit beaucoup de chose mais c'est pas forcément juste....

    le premier fichier excel d'où je veux récupérer les données à comparer avec ma base donnée j'arrive pas à avoir accès... ça bug et met erreur... ensuite je sais pas si le reste fonctionne vu que le départ n'est pas bon :s... Je vous remet cette partie du code :

    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
    set xls = createobject("excel.application")
    HISINV ="\\..."
    test="\\..."
     
    set cncon = news ADODB.connection
    set HISIN = xls.workbooks.open(HISINV)
     
     
    code_majeure = HISIN.range("O1").offset(i,0)
     
    srequete3= "select*from code_produit"
    set rs3 = new adodb.recordset
    rs3.open srequete3, cncon, adopendynamic,adlockoptimistic
    if rs3.EOF=true then
    rs3.addnew
    else rs3.movefirst
    end if
     
    rs3("code majeur") = majeur
    rs3("description") = Description
    set type_instrument = xls.workbooks("test").worksheets("FOND").range("F1").offset(i+220,0)
    for i =1 to 40
    if code_majeure = majeur then
    type_instrument = description
    end if
    next i

    Voilà si vous pouvez me dire pourquoi je n'arrive pas à accéder au premier fichier excel et si ensuite si ça à l'air bon la logique d'écriture....
    Merci

  6. #6
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonsoir.

    Si tu as un pb pour ouvrir et instancier un classeur, tu peux adapter
    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
    Dim oXlApp As Excel.Application
    Dim oWbk As Excel.Workbook
    Dim sPath As String
    Dim sName As String
     
    Set oXlApp = New Excel.Application
    oXlApp.Visible = True
     
    sPath = "CheminDossier"
    sName = "MonClasseur.xlsx"
    Set oWbk = oXlApp.Workbooks.Open(sPath & "\" & sName)
     
    '...
     
    oWbk.Close
     
    Set owk = Nothing
    oXlApp.Quit
    Set oXlApp = Nothing
    oWbk est une variable objet qui contient le classeur ouvert. Pas besoin d'Activate ou Select pour manipuler.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... = oWbl.Worksheets("LaFeuille").Cells(h,l).Value
    Est-ce que ça résout ton premier pb ?

    PGZ

  7. #7
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    N'ayant ni le temps, ni le courage, sans parcourir ton code, je pense que ta variable "xls" n'est pas appropriée car ça doit être un nom réservé, je te conseille de changer de nom, mais ce que je dis...!!!!
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 93
    Par défaut
    J'ai déjà essayé de modifier le nom de xls, j'y avais pensé, mais ça ne change rien... Merci quand même


    cordialement

  9. #9
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    En début de chaque module de code tu inscris Puis tu demandes une compilation du projet. Les erreurs de compilation te seront indiquées et tu pourras nous dire quelle(s) ligne(s) pose(nt) pb(s)...

    Cordialement,

    PGZ

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/05/2006, 12h00
  2. Réponses: 3
    Dernier message: 27/03/2006, 17h25
  3. [MySQL] Insertion d'image dans une base de données
    Par dragonfly dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/03/2006, 14h59
  4. problème d'insertion dans une base de données
    Par belmansour tidjani dans le forum JDBC
    Réponses: 7
    Dernier message: 18/01/2006, 22h13
  5. [Conception] insertion sql en php, dans une base de donnée ?
    Par artotal dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 24/10/2005, 04h34

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