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

Modélisation Discussion :

Reprise d'un environnement Access+Excel vers Access [AC-2010]


Sujet :

Modélisation

  1. #1
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2016
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2016
    Messages : 136
    Points : 149
    Points
    149
    Par défaut Reprise d'un environnement Access+Excel vers Access
    Bonjour,

    Je vais avoir à reprendre l'organisation d'une équipe qui utilise une base ACCESS et un fichier EXCEL, probablement pour tout passer sous ACCESS.

    Ma question est assez générale : comment dois-je m'y prendre pour aborder ça ?

    Les problèmes que j'anticipe sont les suivants :
    1) je vais devoir maquetter l'application future (tables, relations, formulaires, bandeaux, etc.) puis exporter/importer les données de l'ancienne structure - mixte ACCESS / EXCEL - vers la nouvelle - pure ACCESS - avec tous les problèmes d'index et de clés primaires que cela suppose
    2) il y a des chances que des erreurs de conception aient été faite dans la version initiale et que doive donc splitter ou fusionner des tables de l'ancienne base, créer de nouvelles tables de jointure, etc
    3) le travail de l'équipe ne va pas s'arrêter pour autant donc, durant la phase de mise au point, je risque d'avoir à faire des allers-retours de données dans un sens ou dans l'autre

    Dès lors que deux tables sont en relation, l'une contient des valeurs de clé primaire de l'autre. Mais ces clés (NuméroAuto) se perdent facilement lors des exports/imports transitant via Excel.

    Habituellement, comment les cadors (ce que je ne suis pas encore) abordent-ils ce genre de problématique technico-organisationnelles ? Quels sont les outils et/ou le code VBA à connaître absolument ?

    Cordialement,
    Olivier

  2. #2
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2016
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2016
    Messages : 136
    Points : 149
    Points
    149
    Par défaut Une précision ...
    Rebonjour,

    J'imagine assez facilement que je vais devoir "mettre à plat" des tables liées - via des requêtes - pour produire des "tables larges" puis re-ventiler ces tables larges sur mes nouvelles tables.

    Prenons une table LivreGenres :
    ID | NomGenre
    1 | Biographie
    2 | Roman
    16 | BD
    ...

    Et une table Livres :
    ID | Titre | IDGenre
    1 | Da Vinci Code | 2
    12 | Lucky Luke : La Diligence | 16
    23 | Achille Talon n'a pas tout dit | 16
    ...

    Mis à plat, cela va donner :
    Titre | NomGenre
    Da Vinci Code | Roman
    Lucky Luke : La Diligence | BD
    Achille Talon n'a pas tout dit | BD
    ...

    ça, ça s'exporte/importe facilement puis, dans la nouvelle appli, il faudra que je balaye cette table pour les transférer ligne par ligne dans les nouvelles tables. C'est bien cela ?

    Vous auriez un exemple de code VBA qui balayerait la troisième table et qui reconstruirait les deux tables précédentes (avec des index différents, bien sur) ?

    Cordialement,
    Olivier

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 596
    Points : 34 282
    Points
    34 282
    Par défaut
    Salut,

    Par habitude, le plus propre reste de decouper le processus en 2 etapes :
    - creation d'une nouvelle BDD avec architecture propre qui correspond exactement au besoin, avec en tete les options d'evolution auxquelles ton appli pourra etre confrontee
    - traitement VBA de migration et de recuperation d'historique, avec les tables de mapping remplies en amont, que tu peux executer a l'envi pour tes tests, mes qui ne sera executee en prod qu'une seule fois =]

    Le traitement doit pouvoir prevoir les 2 cas de figure (nouvel enregistrement / donnees existantes a mettre a jour).

    La double utilisation des systemes est un point a bien prendre en compte, le code qui te permet de basculer d'Excel vers Access doit etre bien concu, avec par exemple des parametres de dates ou d'identifiant pour ne recuperer qu'une partie ou la totalite des donnees.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  4. #4
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2016
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2016
    Messages : 136
    Points : 149
    Points
    149
    Par défaut Réponse
    En cherchant, on trouve ...



    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
    Function ScanImport()
        Dim import As DAO.Recordset
        Dim genres As DAO.Recordset
        Dim livres As DAO.Recordset
     
        Set import = CurrentDb.OpenRecordset("Import", dbOpenDynaset) ' WARNING : dbOpenDynaset !!
        Set genres = CurrentDb.OpenRecordset("Genres", dbOpenDynaset)
        Set livres = CurrentDb.OpenRecordset("Livres", dbOpenDynaset)
     
        Do Until import.EOF
            Debug.Print import("Genre") & " / " & import("Titre")
            genres.FindFirst "NomGenre = '" & import("Genre") & "'"
            If genres.NoMatch Then
                genres.AddNew
                genres.Fields("NomGenre").Value = import("Genre")
                genres.Update
                genres.MoveLast ' absolument nécessaire !!
                Debug.Print "NOUVEAU GENRE : " & import("Genre") & " / " & genres("ID")
            Else
                Debug.Print "GENRE CONNU: " & genres("NomGenre") & " / " & genres("ID")
            End If
            livres.AddNew
            livres.Fields("Titre").Value = import("Titre")
            livres.Fields("IDGenre").Value = genres("ID")
            livres.Update
            import.MoveNext
        Loop
        import.Close
        genres.Close
        livres.Close
     
    End Function



    J'ai un peu souffert sur le mode d'ouverture des RecordSet (dbOpenDynaset au lieu d'un dbOpenTable que j'avais piqué dans des exemples) et sur le .MoveLast qui doit suivre un .AddNew + .Update (sinon, on ne peut pas récupérer l'index du dernier genre découvert et enregistré).

    Tout ceci suppose bien sur que les noms de genre sont sans doublons, ce qui minimise l'intérêt d'avoir une table pour ça ... mais ce bout de code devrait me servir.

    Si vous voyez d'autres points à considérer, je suis tout ouïe !

    Cordialement,
    Olivier

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 25/02/2013, 11h19
  2. Réponses: 25
    Dernier message: 26/04/2011, 13h58
  3. Récupérer une sheets dans excel vers access sous vba
    Par odbee dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/10/2005, 00h30
  4. Problème champ après import d'excel vers access
    Par David M dans le forum Access
    Réponses: 6
    Dernier message: 16/10/2005, 11h53
  5. Réponses: 6
    Dernier message: 19/09/2005, 12h55

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