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

Access Discussion :

Base de données de contacts: récupérations de données de fichiers Excel [AC-2010]


Sujet :

Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Collaborateur scientifique
    Inscrit en
    Octobre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Collaborateur scientifique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2014
    Messages : 22
    Points : 18
    Points
    18
    Par défaut Base de données de contacts: récupérations de données de fichiers Excel
    Bonjour à toutes et tous,

    Ceci est mon premier post sur ce forum... merci d'avance de votre accueil (et de votre patience).

    Je n'ai pas une grande expérience de la programmation mais je bidouille un peu avec la suite Office et notamment Excel et Access.

    Depuis 2 jours, j'essaie de réaliser quelque chose qui me paraissait simple mais je sèche: j'ai consulté les aides des programmes, ce forum, les tutos mais je ne vois pas.

    Je vous explique: je souhaite constituer une base de données de contacts sous Access 2010 qui sera gérée par notre secrétariat. Les données de contacts qui y seront introduites sont dispersées dans une trentaine de services indépendants du mien (dans le sens où nous ne partageons pas de serveur ou de bases de données communs). Il me faut constituer la base de données et prévoir les outils pour l'actualiser régulièrement.

    Comme tous les services indépendants ont à disposition Excel, j'imaginais créer un formulaire ou masque sous Excel (cf. pièce-jointe) qui serait rempli par les services concernés puis renvoyé chez moi. Il suffirait ensuite d'importer les données depuis l'interface d'Access et le tour est joué. Je précise que le masque et la table Access y relative ont rigoureusement la même structure.

    Mon souci est le suivant: dans le formulaire Excel, j'ai prédéfini un certain nombre de champs avec listes déroulantes sur les 150 premières lignes. Ces cases restent vides si aucune option n'est sélectionnée. Quand j'essaie d'importer le fichier Excel, Access m'importe les 150 lignes... dont une majeure partie est donc vide. Comment faire pour qu'Access n'importe que les données utiles.

    Par ailleurs, de manière plus générale, quel serait le meilleur moyen pour récupérer des données de fichiers Excel et les introduire dans Access. Plusieurs projets de genre se préparent qui nécessiteront ce type de connaissances. Merci de m'orienter!

    Merci d'avance de votre aide et meilleurs messages.

    Venentius
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 871
    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 871
    Points : 3 457
    Points
    3 457
    Par défaut
    Bonjour Venentius,

    Je ne crois pas que tu puisses faire cela avec un Docmd.TransferSpreadsheet.

    Un moyen efficace est de parcourir le fichier Excel sur une colonne qui a des données. Dans ton cas supposons que la colonne nom est toujours remplie, tu parcours le fichier Excel tant qu'il y a des données dans la colonne nom et tu importes ligne par ligne dans la table de ton choix.

    Voici un petit exemple:
    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
    Option Compare Database
    Option Explicit
    Public Function fuExcel()
     
        Dim oApp As Excel.Application
        Dim oWkb As Excel.Workbook
        Dim oWSht As Excel.Worksheet
        Dim i As Integer
        Dim strFeuille As String, strChemin As String
     
        strFeuille = "Saisie"  'Inscrire le nom de la feuille de ton classeur
        strChemin = "C:\BDMC\Contacts SSRORP_Masque.xlsx"  'Inscrire le chemin plus le nom du classeur
     
        Set oApp = CreateObject("excel.application")
        Set oWkb = oApp.Workbooks.Open(strChemin)
        Set oWSht = oWkb.Worksheets(strFeuille)
     
        i = 2 'Première ligne à parcourir, dans ton exemple on débute à la ligne #2
        'On parcours le fichier Excel tant qu'il y a de l'information dans la colonne nom
        'Ici la colonne qu'on veut tester
        While oWSht.Range("E" & i).Value <> ""
          'On récupère la valeur des différentes colonnes ici celle qui a le nom dans le fichier Excel
          MsgBox "Ligne " & i & " le nom est : " & oWSht.Cells(i, 5) 'Tu modifies cette ligne pour faire ce que tu veux, dans ton cas une requête ajout ferait l'affaire
          'Tu pourrais aussi ouvrir un recordset et faire un AddNew
          i = i + 1
        Wend
        'On ferme
        oWkb.Close
        'On libère les objets
        Set oWSht = Nothing
        Set oWkb = Nothing
        Set oApp = Nothing
     
    End Function
    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  3. #3
    Membre à l'essai
    Homme Profil pro
    Collaborateur scientifique
    Inscrit en
    Octobre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Collaborateur scientifique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2014
    Messages : 22
    Points : 18
    Points
    18
    Par défaut Merci!!! Et j'ai encore une petite question...
    Bonjour Robert,

    Je te remercie infiniment de ton aide: ça fonctionne (avec un RecordSet)!

    Mais voilà ma question subsidiaire: dans le code proposé, le fichier est toujours le même. Alors que, concrètement, je vais recevoir plusieurs fichiers qui risquent d'être renommés. Par contre, la structure du formulaire ne change pas (toutes les infos se trouvent sur la feuille "Saisie").

    Est-il possible d'ouvrir une boîte de dialogue lors de l'exécution de la fonction afin de déterminer le fichier à importer? Par conséquent faire de StrChemin une variable.

    Sur le site, j'ai vu le tuto suivant (http://access.developpez.com/faq/?pa...#AffBoitDialog) mais je comprends pas où mettre ce code (dans un module, j'imagine) et comment lier ma procédure d'importation avec ce code (ou un autre d'ailleurs). Je précise que je n'ai visiblement pas accès aux références Microsoft Common Dialog Control.

    Je te remercie encore une fois et te souhaite le meilleur.

    Avec mes meilleurs messages.
    Venentius

  4. #4
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 871
    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 871
    Points : 3 457
    Points
    3 457
    Par défaut
    Bonjour Venentius,

    Il y a plusieurs manières de faire cela. Dans le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strChemin = "C:\BDMC\Contacts SSRORP_Masque.xlsx"  'Inscrire le chemin plus le nom du classeur
    Indique le chemin et le nom du fichier Excel. Tu pourrais modifier cette partie pour qu'elle soit dynamique. Le plus simple est un InputBox comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strChemin = InputBox("Inscrire le chemin")
    C'est moins conviviale parce que ça demande à l'utilisateur d'inscrire correctement le chemin + le nom complet du fichier et de ne pas choisir le bouton annuler, mais ça va te donner le résultat voulue.

    Tu pourrais mettre aussi un argument dans la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function fuExcel(strChemin as String)
    et lors de l'appel de la fonction donner le chemin grâce à un champ dans un formulaire ou encore l'InputBox. Il y a aussi l'Application.FileDialog standard avec office 2010 qui est un peu comme l'explorateur et récupère le chemin et nom de fichier.

    A toi de voir.

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  5. #5
    Membre à l'essai
    Homme Profil pro
    Collaborateur scientifique
    Inscrit en
    Octobre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Collaborateur scientifique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2014
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Bonjour Robert,

    Je te remercie une nouvelle fois de ta réponse pertinente. La méthode InputBox fonctionne mais comme je vais déléguer cette tâche au secrétariat, j'ai besoin d'une méthode plus conviviale.

    Je me suis penché sur l'Application.FileDialog. J'ai réussi à exécuter une procédure afin d'aller récupérer le nom de dossier et de fichier.

    Sub OuvrirFichier()
    Application.FileDialog(msoFileDialogFilePicker).AllowMultiSelect = False
    Application.FileDialog(msoFileDialogFilePicker).Show
    MsgBox Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1)
    End Sub

    La MsgBox affiche le tout mais je ne sais pas intégrer ça dans ma fonction FuExcel.

    Je te remercie, une fois de plus, de ta gentillesse et de ta patience envers un amateur Access/VBA.

    Avec mes meilleurs messages.
    Venentius

  6. #6
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 871
    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 871
    Points : 3 457
    Points
    3 457
    Par défaut
    Bonjour Venentius,

    Dans mon exemple du post # 2 mon code se trouve dans un module. En supposant que tu ais fait pareil, dans ce même module tu insères une fonction comme suit:
    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
    Private Function fuCheminFichier()
     
        Dim fDialog As Office.FileDialog
     
        Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
        With fDialog
            .AllowMultiSelect = False
            .Title = "Veuillez sélectioner le fichier Excel désiré."
            .Filters.Clear
            .Filters.Add "Classeur Excel", "*.xlsx"
            .Filters.Add "Tous fichiers", "*.*"
            If .Show = True Then
                fuCheminFichier = .SelectedItems(1)
            Else
                fuCheminFichier = ""
            End If
        End With
        Set fDialog = Nothing
     
    End Function
    Puis dans le code de la fonction fuExcel() tu modifies la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strChemin = "C:\BDMC\Contacts SSRORP_Masque.xlsx"  'Inscrire le chemin plus le nom du classeur
    pour les lignes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    strChemin = ""
        strChemin = fuCheminFichier()  'Récupère la réponse 
        If strChemin = "" Then 'Si l'utilisateur à cliquer sur le bouton cancel, sortie de la fonction
            MsgBox "Aucun fichier de sélectionner, abandon de la procédure"
            Exit Function
        End If
    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  7. #7
    Membre à l'essai
    Homme Profil pro
    Collaborateur scientifique
    Inscrit en
    Octobre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Collaborateur scientifique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2014
    Messages : 22
    Points : 18
    Points
    18
    Par défaut Un immense merci!
    Bonjour Robert,

    Un immense merci pour ton aide: tout fonctionne parfaitement: ça va grandement simplifier la vie de tout le monde dans mon service!

    Je te souhaite le meilleur et te renouvelle mes remerciements.

    Venentius

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/04/2015, 11h06
  2. Réponses: 5
    Dernier message: 27/06/2014, 11h37
  3. [CONTACT] Récupération de données
    Par HadanMarv dans le forum Android
    Réponses: 2
    Dernier message: 13/03/2013, 09h59
  4. Réponses: 10
    Dernier message: 22/03/2011, 23h40
  5. Réponses: 3
    Dernier message: 28/08/2009, 15h01

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