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 Access Discussion :

Import d'une plage depuis Excel [AC-2010]


Sujet :

Macros Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Import d'une plage depuis Excel
    Bonjour à tous,

    Désolé si ceci n'est pas au bon endroit, mais comme cela concernait Access directement, je me suis dit que j'allais poster cela ici.

    J'aimerai créer une macro avec bouton sous Excel ou Access qui exporterait une plage de cellules définie depuis Excel vers une table Access.
    Ces données s'ajouteraient à la table.
    Autre précision : cette plage de données n'est pas forcément pleine, c'est-à-dire que l'importation peut se faire qu'il y ait 2 ou 20 tuples à importer.

    Je suppose que cette macro doit exister dans Excel plus que dans Access, mais comme je ne connais rien en VBA...

    Merci pour votre aide !

  2. #2
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour fabian,

    Si l'importation se fait depuis Access, voici le code pour le faire en spécifiant les plages. Ce n'est pas une macro mais VBA.

    http://www.developpez.net/forums/d14...ccess-via-vba/

    Tu y trouveras un exemple, à adapter selon tes besoins.

    Bonne journée

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Bonsoir,

    Merci pour votre réponse sur laquelle j'ai commencé à travailler

    J'ai rédigé le code suivant :
    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
    Public Sub ImportExcel()
    'Les variables nécessaires
        Dim oApp As Excel.Application
        Dim oWkb As Excel.Workbook
        Dim oWSht As Excel.Worksheet
        Dim i As Integer
        Dim strMessage As String
        Dim sql As String
     
     
        'Créer l'objet
        Set oApp = CreateObject("excel.application")
        'Ouvrir l'objet
        Set oWkb = oApp.Workbooks.Open("...\Gestion.xlsx")
        'Choisir la feuille
        Set oWSht = oWkb.Worksheets("AStocks")
        'Choisir la ligne ici je partirais à la ligne 4
        i = 4
        'Parcourir la feuille jusqu'à ce qu'il n'y ait plus de données
        While oWSht.Range("A" & i).Value <> ""
           'Ici on pourrait mettre une requête Insert qui ajouterais à une table les lignes concernées
           strMessage = oWSht.Cells(i, 1) & " et " & oWSht.Cells(i, 2) & " et " & oWSht.Cells(i, 3) & " et " & oWSht.Cells(i, 4)
        sql = "INSERT INTO Stock(Tour, Ville, Ressource, Stock) VALUES (" + CInt(oWSht.Cells(i, 1)) + "," + oWSht.Cells(i, 2) + ", " + oWSht.Cells(i, 3) + "," + CInt(oWSht.Cells(i, 4)) + ")"
        DoCmd.RunSQL sql
           i = i + 1
        Wend
        'Fermer les objets
        oWkb.Close
        Set oWSht = Nothing
        Set oWkb = Nothing
        Set oApp = Nothing
    End Sub
    Le débugage m'informe cependant d'une erreur de type à la ligne sql=...
    J'ai utilisé CInt pour transformer les valeurs numériques (là où Access souhaite recevoir des valeurs numériques) mais rien n'y fait.

    Je ne vois pas trop ce qui ne marche pas...

  4. #4
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour fabian_,

    Le + n'est pas bon, remplace le par &. C'est d'ailleurs une bonne pratique de ne jamais employé le + pour concaténer, il peut être interprété de différente façon.

    Bonne journée

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Bonsoir Robert et merci pour votre aide !

    J'ai modifié la ligne en question.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = "INSERT INTO Stock(Tour, Ville, Ressource, Stock) VALUES (" & CInt(oWSht.Cells(i, 1)) & "," & oWSht.Cells(i, 2) & ", " & oWSht.Cells(i, 3) & "," & CInt(oWSht.Cells(i, 4)) & ")"
    J'ai pourtant toujours une incompatibilité de type à cette même ligne !
    J'ai encore vérifié mon fichier Excel pour placer les colonnes correspondantes en mode numérique et texte respectivement.

    Pour information, il y a d'autres données sur la feuille.
    J'importe seulement les colonnes A, B, C et D à partir de la ligne 5.
    Peut-être est-ce cela qui pose problème ?

    Ou peut-être dois-je activer des références particulières ?

  6. #6
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour fabian_,

    Dans ton post précédent tu spécifiais la ligne 4.

    Ajoute un MsgBox sous la ligne 22Tu vas voir ce que tu importes. Les autres colonnes n'ont pas rapport. Avec ce code tu peux piger ou tu veux dans la feuille Excel.

    Donne moi un retour...

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Bonsoir,

    Ah la commande est pratique je saurai m'en souvenir !

    Les données que me renvoient le MsgBox sont correctes (ce sont celles que je veux importer).

    L'erreur a cependant changé :
    Erreur de synthaxe (opérateur absent) dans l'expession "[valeur texte]".
    Et dans l'aide au débugage, c'est maintenant "DoCmd.RunSQL sql" qui est surlignée...

  8. #8
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour fabian_,

    Pour les champs texte tu dois inclure " donc la manière de faire est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = "INSERT INTO Stock(Tour, Ville, Ressource, Stock) VALUES (" & CInt(oWSht.Cells(i, 1)) & "," & Chr(34) & oWSht.Cells(i, 2) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 3) & Chr(34) & "," & CInt(oWSht.Cells(i, 4)) & ")"
    Si tu mets un Debug.Print sql après ta ligne tu vas voir ce que ça donne et tu devrais voir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO Stock(Tour, Ville, Ressource, Stock) VALUES (2, "Texte", "AutreTexte", 3)
    C'est le format que je comprend selon ton code, c'est à dire une première valeur numérique, une deuxième et troisième valeur texte et finalement la quatrième valeur numérique.

    Bonne journée

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Bonsoir Robert,

    Effectivement c'est cela, vous avez bien compris !

    Et ça fonctionne enfin ! J'ai réussi à ajouter mes données !
    Je vous remercie ÉNORMÉMENT pour votre aide et vous souhaite une très bonne soirée !

  10. #10
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour fabian_,

    N'oublie pas de marquer résolut, c'est important pour les recherches.

    Bonne journée

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

Discussions similaires

  1. [AC-2010] Importation d'une plage de cellules excel qui se modifie quotidiennement
    Par freeman3869 dans le forum Access
    Réponses: 2
    Dernier message: 18/04/2015, 00h11
  2. [MS SQL-Server] Import d'une table depuis Excel
    Par Bunlock dans le forum Développement
    Réponses: 0
    Dernier message: 23/06/2008, 16h55
  3. [sources] Generer une bibliographie depuis excel vers word
    Par merenptah44 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/05/2007, 11h13
  4. [sources] Generer une bibliographie depuis excel vers word
    Par merenptah44 dans le forum Contribuez
    Réponses: 0
    Dernier message: 22/05/2007, 11h07
  5. importer des liens hypertextes depuis excel
    Par maywen dans le forum Access
    Réponses: 1
    Dernier message: 30/03/2007, 22h52

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