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 :

Insérer des données d'un fichier Excel dans et depuis Access [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Points : 46
    Points
    46
    Par défaut Insérer des données d'un fichier Excel dans et depuis Access
    Bonjour à tous,

    je vous expose mon problème
    je voudrais lorsque je suis sous Access pouvoir importer et alimenter mes tables de ma base de donnée Access depuis un fichier excel

    j'ai commencé à faire mon code VBA mais je rencontre des problèmes

    en fait dans mon fichier excel sur lequel plus tard je n'aurai pas la main il y a des colonnes masquées avec des zones vides et je pense que le soucis vient de là (mais peut être je me trompe, a vous de me dire)

    en fait j'arrive à récupérer dans des variables les premières colonnes de mon fichier mais une fois que j'arrive à une colonne masquée je n'arrive pas à trouver la valeur

    je vous met le code
    ainsi que mon fichier excel

    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
    72
    73
     
     
    Private Sub Cmd_update_base_Click()
     
    'Mise à jour de la base de données
     
    Dim oApp As Object
    Dim oWkb As Object
    Dim oWSht As Object
    Dim insbord As String
     
    Set oApp = CreateObject("Excel.Application")
    Set oWkb = oApp.Workbooks.Open("C:\Documents and Settings\PC\Bureau\Modèle")
    Set oWSht = oWkb.Worksheets("BDD")
     
    Dim i As String
     
    'Déclarations de toutes les colonnes à importer:
     
    '1 - Colonnes liées à la table bordereau
    Dim colA, colQI, ColQJ, colQK, colQL, colQM, colQN, colQO, colQP, colQQ, colQR, colQS, colQT, colQU As Object
    Dim colRH, colRI, colRJ, colRK, colRL, colRM, colRN, colRO, colRP, colRQ, colRR, colRS, colRT, colRU, colRV, colRW As Object
    Dim colSG, colSH, colSI, colSJ, colSK, colSL As Object
     
    '2 - Colonnes liées à la table échafaudage --> Echafaudage n°1
    Dim colF, colG, colH, colI, colJ, colK, colL, colM, colN, colO, colP, colQ, colR, colS, colT, colU, colV, colW, colX, colY, colZ As Object
    Dim colAA, colAB, colAC, colAD, colAE, colAF, colAG, colAH, colAI, colAJ, colAK, colAL, colAM, colAN, colAO, colAP, colAQ, colAR, colAS, colAT, colAU, colAV As Object
     
    '3 - Colonnes liées à la table échafaudage --> Echafaudage n°2
     
    '4 - Colonnes liées à la table échafaudage --> Echafaudage n°3
     
    '5 - Colonnes liées à la table échafaudage --> Echafaudage n°4
     
    '6 - Colonnes liées à la table porte à faux --> Porte à faux n°1
     
    '7 - Colonnes liées à la table porte à faux --> Porte à faux n°2
     
    '8 - Colonnes liées à la table Garde corps
     
    '9 - Colonnes liées à la table bâche ignifugée
     
    '10 - Colonnes liées à la table bâche polyane
     
    '11 - Colonnes liées à la table Dépense contrôlée sans matériel
     
    '12 - Colonnes liées à la table Dépense contrôlée avec matériel
     
    'l'importation commence à la ligne 5
    i = 5
     
    'Pas de message d'erreur
    DoCmd.SetWarnings False
     
    'importation tant que la cellule est differente de ""
    While oWSht.Range("A" & i).Value <> ""
     
    'on stocke l'info dans une variable
    Set colA = oWSht.Cells(i, 1)
    Set colQI = oWSht.Cells(i, 450)
    Set colF = oWSht.Cells(i, 5)
     
    'requète SQL
    insbord = "insert into T_Bordereau ( numero_bordereau, Surface_totale ) values (" & Chr(34) & colA & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 5) & Chr(34) & ")"
     
    DoCmd.RunSQL insbord
     
    'passage à la ligne suivante
    i = i + 1
     
    Wend
     
    End Sub
    Modèle.xlsx

    merci de votre aide car je mouline
    Blado_sap

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    A mon avis tu n'as pas besoin de créer un objet pour chaque variable, mais juste d'affecter le contenu des cellules à des variables de type string ou variant, un peu comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim colA as string, colQI as string, ColQJ as string, colQK as string...
    ...
    colA = oWSht.Cells(i, 1).value
    ...
    Note que quand tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim colA, colQI, ColQJ, colQK as string
    ...
    colA, colQI et ColQJ sont de type variant et colQK de type string.

    Cela dit je n'ai pas trop étudié ton code en détail étant un peu dans le cirage aujourd'hui
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Cher tous,

    Cela dit je n'ai pas trop étudié ton code en détail étant un peu dans le cirage aujourd'hui
    Denis se serait-il reconverti en cordonnier ?

    jimmy
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Points : 46
    Points
    46
    Par défaut
    Bonjour à tous,

    Le fait de déclarer chaque variable séparément ne change rien à mon probleme

    Je ne sais pas si lé fait d'être dordonnier est de rigueur mais je suis en train d'user mes semelles de faire les cent pas avec ce probleme

    Blado_sap

  5. #5
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Citation Envoyé par jimbolion Voir le message
    Cher tous,



    Denis se serait-il reconverti en cordonnier ?

    jimmy
    Coucou Jimmy,

    Sache que la dernière fois que j'ai ciré des godasses c'était à l'armée
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut Quelques pistes...
    Citation Envoyé par Blado_sap Voir le message
    Bonjour à tous,

    Le fait de déclarer chaque variable séparément ne change rien à mon probleme

    Je ne sais pas si lé fait d'être dordonnier est de rigueur mais je suis en train d'user mes semelles de faire les cent pas avec ce probleme

    Blado_sap
    Difficile de résoudre ton problème, j'ai quand même 2 ou 3 pistes à explorer :

    1. Il faudrait que tu vérifies si le format des cellules sur ces colonnes masquées correspond avec le type du champ de destination, dans la table T_Bordereau.
    2. Par exemple, si ton champ surface_total est numérique, alors il faut que les cellules sur la colonne concernée soit au format numérique aussi.
    3. Bien penser au niveau du code SQL à distinguer une mise à jour d'un champ texte values ('" & colA & "')", d'une mise à jour d'un champ numérique values (" & colA & ")" (pas de quotes).
    4. Après il faut aussi voir si tu as des valeurs nulles sur ces colonnes, car si c'est du texte alors tu copies une chaîne vide dans ton champ texte sous Access, mais si c'est du numérique et que la cellule est vide, tu vas copier quoi dans ton champ ?


    Enfin, il faut bien penser à libérer la mémoire en fin de procédure car tu risques d'avoir pas mal d'instances d'Excel ouvertes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    Set oWSht = Nothing
    Set oWkb = Nothing
    Set oApp = Nothing
    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Points : 46
    Points
    46
    Par défaut
    Bonjour,

    toutes mes colonnes dans mon fichier excel sont au format "standard"

    En fait les colonnes masquées sont toutes vides
    elles proviennent d'un précédent export dont je ne suis pas maitre et il faut que je compose avec ce fichier

    Par exemple dans le fichier excel que j'ai mis en pièce jointe dans un précédent message il y a la colonne E qui est masquée et qui est vide
    je peux récupérer les valeurs des colonnes A à D par contre la F je ne peux plus

    une idée??

    j'ai bien pensé à rajouter les instructions avant mon en fin d'instruction ;-)

    Blado_sap

  8. #8
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Moi j'arrive à récupérer les colonnes E et F

    Pour E ça me met des chaînes vides et pour F ça me met "C/6/9/34", "C/6/9/32"...

    As-tu un message d'erreur pour E ?

    Quel est le type du champ de destination pour E ?

    a+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Points : 46
    Points
    46
    Par défaut
    Re,

    non pas de message d'erreur pour E

    l'erreur vient de moi:
    j'ai mis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    colF = oWSht.Cells(i, 5).Value
    et il fallait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    colF = oWSht.Cells(i, 6).Value
    j'ai honte de moi lol

    par contre pour insérer dans mes tables comme tu me le disais il faut:

    pour des champs de type texte : values ('" & colA & "')"
    pour des champs de type numérique : values (" & colA & ")" (pas de quotes).

    et pour des champs de type "Oui/Non" que faut il?
    et des champs de type "date" (date abrégée)?
    et des champs de type "monétaire" ?

    et dois je tout déclarer en Dim As String??

    Merci
    Blado_sap

  10. #10
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Je viens justement de répondre à cette question sur un autre sujet.

    Le monétaire et le booléen sont des numériques.

    a+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/04/2010, 09h31
  2. Réponses: 0
    Dernier message: 07/07/2008, 20h42
  3. [MySQL] insérer des donnée d'un fichier dans base mysql
    Par monsieur77 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/01/2008, 15h20
  4. Réponses: 1
    Dernier message: 30/12/2007, 14h51
  5. Réponses: 6
    Dernier message: 08/12/2006, 13h07

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