Remplir un champs d'un formulaire Access à partir d'un fichier Excel
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Remplir un champs d'un formulaire Access à partir d'un fichier Excel



  1. #1
    invite3df46c33

    Remplir un champs d'un formulaire Access à partir d'un fichier Excel


    ------

    Bonjour à tous
    Je me permets de vous solliciter en espérant que vous puissiez m'aider. Je suis assez nouveau en VBA, et j'aimerai pouvoir remplir un champs de mon formulaire Access (nommé PABX_type), grâce à une donnée contenue dans un fichier Excel (située en cellule A12). Le fichier excel est situé dans un dossier Mail, et j'aimerai qu'une fois la donnée exportée dans mon champs, enregistrer le fichier Excel dans un dossier nommé Sharepoint. Cependant, après 2 jours de recherches passés à décortiquer chaque site, je n'arrive toujours pas à réaliser cette action convenablement.

    Voici mon tout dernier code

    Code:
        Dim myRec As DAO.Recordset
        Dim xl As Excel.Application
        Dim xlsht As Excel.Worksheet
        Dim xlWrkBk As Excel.Workbook
    
    
        Set xl = CreateObject("Excel.Application")
        Set xlWrkBk = GetObject("D:\Users\abouzid\Documents\Automation\Mail\Site1\AG06W01A CHATEAUNEUF SUR LOIRE.XLS")
        Set xlsht = xlWrkBk.Worksheets(1)
    
        Set myRec = CurrentDb.OpenRecordset("T_Configuration")
           
         If PABX_Type = "" Then 'Change la valeur du champs PABX_Type uniquement pour les sites où cette valeur n'a pas été renseignée
                myRec.AddNew
                myRec.Fields("PABX_Type") = xlsht.cells(12, "A")
                myRec.Update
                xl.Save ("D:\Users\abouzid\Documents\Automation\Sharepoint\Site1\AG06W01A CHATEAUNEUF SUR LOIRE.XLS")
                
            Else
                xl.Save ("D:\Users\abouzid\Documents\Automation\Sharepoint\Site1\AG06W01A CHATEAUNEUF SUR LOIRE.XLS")
                xl.Delete ("D:\Users\abouzid\Documents\Automation\Mail\Site1\AG06W01A CHATEAUNEUF SUR LOIRE.XLS")
            End If
    
       Set xl = Nothing
    Merci infiniment pour votre aide, j'ai le sentiment d'avoir épuisé toutes mes ressources, et de n'avoir aucune autre piste à explorer...

    -----
    Dernière modification par JPL ; 27/05/2019 à 14h20. Motif: Ajout de la balise Code (#) pour garder l'indentation

  2. #2
    invite6ed96264

    Re : Remplir un champs d'un formulaire Access à partir d'un fichier Excel

    pourquoi tu fais pas un simple lien vers ta feuille excel ?

  3. #3
    invite3df46c33

    Re : Remplir un champs d'un formulaire Access à partir d'un fichier Excel

    Merci pour ta réponse @shodan447. Désolé, mais je ne vois pas ce que tu veux dire par là. Tu parles de la méthode TransfertSpreadsheet? J'ai déjà jeté un coup d’œil à cette méthode. J'ai cru comprendre qu'elle permet d'importer les valeurs compris dans une Range à définir d'un fichier excel, dans une table Access. Cependant, je la trouve inappropriée pour mon utilisation pour 2 raisons principales.

    - Tout d'abord, je ne souhaite en extraire qu'une cellule, et non un grande range de données.
    - Deuxiemement, le résultat est stocké dans une table. À moins qu'il y ait un moyen pour supprimer la table une fois la données copiée, je trouve cette méthode trop gourmande en espace...

  4. #4
    invite6486d7bd

    Re : Remplir un champs d'un formulaire Access à partir d'un fichier Excel

    Ce qui me parait curieux dans un premier temps, c'est cette partie du code :
    Code:
    Set myRec = CurrentDb.OpenRecordset("T_Configuration")              If PABX_Type = "" Then 'Change la valeur du champs PABX_Type uniquement pour les sites où cette valeur n'a pas été renseignée             myRec.AddNew             myRec.Fields("PABX_Type") = xlsht.cells(12, "A")             myRec.Update             xl.Save ("D:\Users\abouzid\Documents\Automation\Sharepoint\Site1\AG06W01A CHATEAUNEUF SUR LOIRE.XLS")                      Else             xl.Save ("D:\Users\abouzid\Documents\Automation\Sharepoint\Site1\AG06W01A CHATEAUNEUF SUR LOIRE.XLS")             xl.Delete ("D:\Users\abouzid\Documents\Automation\Mail\Site1\AG06W01A CHATEAUNEUF SUR LOIRE.XLS")         End If
    La variable PABX_Type n'a pas été définie(ce qui est certes valable en VBA si l'option "explicit" n'est pas indiquée)
    Vous auriez du probablement remplacer ce bout de code par
    Code:
    if myRec.Fields("PABX_Type") = "" then ....


    Ensuite, pour ce qui est de la tâche à accomplir, je ne vois pas très bien ce que vous voulez faire.
    Vous faites une copie de sauvegarde du fichier xls récupéré dans le mail dans un dossier pour regrouper les données brutes initiales, mais vous ne manipulez pas vraiment la table access.
    Normalement, vous devriez jouer sur le positionnement (le curseur) dans la table pour mettre à jour, "dans" le fichier table (qu lui ne sera pas recréé à chaque mise à jour).
    Il vous manque donc probablement quelque-chose à votre algorithme.

    Je pense que vous devriez jeter un oeil à ce tutoriel, vous avoir une idée commet employer les fonctions d'écriture dans la table access pour arriver à faire les mises à jour de celle-ci (en fonction de ce que vous voulez faire, vous ne nous l'avez pas explicement précisé).
    https://warin.developpez.com/access/dao/?page=partie_5

  5. A voir en vidéo sur Futura
  6. #5
    invite3df46c33

    Re : Remplir un champs d'un formulaire Access à partir d'un fichier Excel

    Bonjour et merci pour votre réponse @LeMulet

    Merci pour le bout de code, cela me semble plus correct (je vais tester Lundi au boulot)

    Concernant la deuxième partie du message, je ne vais pas te cacher que moi même je ne comprends pas réellement ce que mon code effectue... Mes connaissances en VBA sont très basiques, et je n'ai quasiment rien compris au recordset. D'ailleurs, merci pour le lien, il semble riche en information. Je vais essayer de me renseigner un maximum, et reviendrai vers vous pour plus d'info

    Merci encore

  7. #6
    invite3df46c33

    Re : Remplir un champs d'un formulaire Access à partir d'un fichier Excel

    Bonjour,

    Je suis finalement parvenu au résultat recherché. Merci à tous pour votre aide (le lien envoyé par @LeMulet s'est avéré très utile, je vous le préconise si vous avez des question quant aux Recordset). Ci-dessous le code. J'ai essayé de commenter au mieux même si certaines choses ne sont pas très claires

    Code:
    Public Function getPABX_type_save()
    
    'Intégrer le cas d'erreur
    
        Dim rs As DAO.Recordset
        Dim odb As DAO.Database
        Dim xl As Object
        Dim xlsht As Excel.worksheet
        Dim xlWrkBk As Excel.workbook
        Dim strCritere As String
        Dim str As String
        
        Set odb = CurrentDb
        
        Set xl = CreateObject("Excel.Application")
        Set xlWrkBk = GetObject("D:\Users\abouzid\Documents\Automation\Mail\Site1\AG06W01A CHATEAUNEUF SUR LOIRE.XLS")
        Set xlsht = xlWrkBk.Worksheets(1)
        str = xlsht.cells(12, "A")  ' Information que l'on cherche à exporter se situe dans la cellule A12 du fichier excel
        strCritere = "ID_Site = 971" 'Critère que j'ai ajouté pour tester l'import sur l'enregisstrement donc l'ID vaut 971
        
           
        Set rs = odb.OpenRecordset("T_Configuration", dbOpenDynaset, dbSeeChanges) 'This line of code instantiates the recordset object, this means that we have opened up a recordset and can access its values using the rs variable.
    
        rs.FindLast (strCritere)
        rs.Edit
        rs.Fields("PABX_type").value = str 'je modifie la valeur du champ PABX_type par la valeur de str (qui correspond à ce qui se trouve dans la cellule A12)
        rs.Update
        If rs.NoMatch Then MsgBox "Aucun enregistrement n'a été trouvé"
        
       
        
    rs.Close
    odb.Close
    Set rs = Nothing
    Set odb = Nothing

  8. #7
    invite6486d7bd

    Re : Remplir un champs d'un formulaire Access à partir d'un fichier Excel

    Félicitation !

    Maintenant, si je puis me permettre quelques "conseils" d'un autre ordre.
    Vous venez d'automatiser une tâche répondant à un besoin, c'est parfait.
    La question, puisqu'on est en entreprise, c'est ensuite de pérenniser votre travail.

    Dans l'état, votre code, certes, "fait le job", mais il manque "ce qui va autour".
    La documentation.

    Celle-ci doit comprendre un résumé de la problématique qui vous a amené à produire votre système, ainsi que les grandes lignes de son fonctionnement.
    Savoir par qui elle est employée, et dans quel but, ainsi qu'un petit mode d'emploi, aussi simple que possible détaillant les opérations que devra produire "l'opérateur" (puisqu'il est important que ce ne soit pas nécessairement vous qui devrez lancer la "moulinette")
    ce mode d'emploi doit être le moins technique possible, et au mieux pourrait être lancé par n'importe qui (çà peut être un commercial, un stagiaire, un intérimaire qui vient d'arriver hier, etc) sachant lire et suivre des instructions.
    L’intérêt, en entreprise, c'est à minima de pouvoir prendre des congés, et surtout de pouvoir déléguer les tâches pour vous concentrer sur ce que vous savez apparemment faire le mieux (et probablement pas d'autres), à plus grande échelle.
    Sinon, ce que vous venez de faire, c'est bien, mais ça vous rajoute une tâche qui ajoutée aux autres, vont petit à petit empiéter sur d'autres activités (et bientôt vous serez débordé).

    De plus, l’intérêt est mutuel, et pour une entreprise, "se rendre indispensable" et ce d'autant plus que vos créations auront de l’intérêt pour le bon fonctionnement de l'entreprise (et c'est qui arrivera si vous continuez à produire d'autres automatisations sans fournir également la documentation adaptée) est "une menace" ou mieux dit une épée de Damoclès qui va planer au dessus de l'entreprise.
    Et normalement, aucun DRH digne de cette fonction ne peut permettre que cette situation s'établisse.

    Plus la documentation est "pratique" et plus votre création aura de la valeur pour l'entreprise.
    A vous de voir tous les points de détails qui peuvent enrayer la machine et quels sont les actions à mener dans tel ou tel cas (c'est un peu comme faire un programme, mais là on est au niveau des process d'entreprise)
    Par exemple, je rajoute souvent le titre de la personne à contacter en cas de défaillance (ça peut être un fournisseur externe), ou la personne chargée de l'installation.
    Cette documentation peut également, petit à petit, s'enrichir des situations ayant mené à des dysfonctionnements ainsi que les bonnes pratiques ayant permis de régler le problème).
    Cette documentation est en quelque-sorte une portion d'une base de connaissance qui décrit les applications.

    Pour bien faire, vous devriez regrouper dans un dossier, comprenant les sous-dossiers de chaque application (maison ou pas), les sources, les fichiers permettant les installations, et la documentation.
    On appelle ça "un référentiel" et ça fait partie du capital de l'entreprise : On appelle ça d'ailleurs "capitaliser" (conserver l'expérience).
    A noter que les différentes documentations ne doivent pas se limiter aux applications maisons, mais doivent aussi exister pour toutes le tâches que le système informatique effectue (et dans le meilleur des mondes, chaque service devrait procéder de cette manière également).
    Montrer l'exemple au niveau du service informatique, bien organisé, a des effets vertueux sur l'organisation des autres services.

    Si la taille de l'entreprise dépasse un certain seuil, il est même possible d'inclure ce référentiel aux compétences du Service Qualité.
    Il peut alors vérifier l'évolution de ce référentiel et assurer la pérennité de l'instrument de production à "l'employeur" (ou le propriétaire).

  9. #8
    Ikhar84
    Animateur Informatique

    Re : Remplir un champs d'un formulaire Access à partir d'un fichier Excel

    Parfaitement dit.

    Mais il faudrait déjà que le processus ait été réfléchi et défini en amont: des clients qui envoient des mails avec un objet bien formaté et un fichier joint excel qui contient une seule donnée "interressante" isolée dans une cellule particulière qui doit être "transférée" dans une base Access... on a déjà dit qu'on avait là une vrai usine à gaz et cela se confirme...

    Une vrai solution pérenne aurait été bien plus productive et aurait apporté un vrai capital à l'entreprise: un formulaire web associé à une vrai base de données. Ou une application maison "partagée" avec les clients (base de données "centralisée").

    Et n'aurait pas demandé beaucoup plus de travail et d'investissement...
    J'ai glissé Chef !

  10. #9
    invite3df46c33

    Re : Remplir un champs d'un formulaire Access à partir d'un fichier Excel

    Bonjour,

    Merci pour vos messages

    @LeMulet : Je ne te cacherai pas que je n'étais pas du tout familier avec ce genre de pratique, et les vertus de ce "référentiel" me semblent évidente. Je suis stagiaire donc je manque énormément de professionnalisme mais j'y travaille. Après je tiens quand même à vous préciser que ce code est encore dans un état embryonnaire, car il fait partie d'une moulinette encore plus large. De plus il n'est toujours pas prêt à l'usage, étant donné que les informations sont encore codées en dur, sachant que le processus doit être soumis à l'automatisation dans un plus long terme.

    @Ikhar84:Tu soulignes un point très important : Lorsqu'on m'a présenté le projet, j'ai tout de suite pensé au formulaire Web que les client pourront remplir directement. Mais pour certaines raisons, j'ai cru comprendre que le service ne pouvait adopter cette technique. C'est bien dommage parce que l'on a réellement à faire à une "usine à gaz"qui n'est pas pratique à entretenir et à pérenniser.

  11. #10
    Ikhar84
    Animateur Informatique

    Re : Remplir un champs d'un formulaire Access à partir d'un fichier Excel

    Oui du coup c'est les personnes comme toi qui supportent (dans tous les sens) le système en place, jusqu'à son effondrement...
    J'ai glissé Chef !

  12. #11
    invite6486d7bd

    Re : Remplir un champs d'un formulaire Access à partir d'un fichier Excel

    Citation Envoyé par Ikhar84 Voir le message
    Mais il faudrait déjà que le processus ait été réfléchi et défini en amont: des clients qui envoient des mails avec un objet bien formaté et un fichier joint excel qui contient une seule donnée "interressante" isolée dans une cellule particulière qui doit être "transférée" dans une base Access... on a déjà dit qu'on avait là une vrai usine à gaz et cela se confirme...
    On n'a peut-être pas tous les éléments pour juger de la méthode.
    Déjà, arriver à contraindre le client (ne l'oublions pas que c'est un client...) à insérer une pièce jointe dans un mail, ça a probablement demandé à être négocié (avec un commercial par exemple).
    On ne sait pas pourquoi cette solution (qui ressemble on est d'accord à une "rustine") a été adoptée à un moment donné, plutôt qu'une autre, et il n'est pas évident qu'il soit facile ni opportun de changer le process en place.

    Une vrai solution pérenne aurait été bien plus productive et aurait apporté un vrai capital à l'entreprise: un formulaire web associé à une vrai base de données. Ou une application maison "partagée" avec les clients (base de données "centralisée").
    Probablement.

    i
    Et n'aurait pas demandé beaucoup plus de travail et d'investissement...
    Par contre, si justement vous préconisez une refonte du process, plus de mails mais un genre de forum client par exemple, ça demande au contraire un gros effort initial.
    Juste pour imaginer la solution (sans même la réaliser), ça demande une étude sérieuse.
    Si vous mettez alors en balance les bénéfices de la solution A avec la solution B (actuellement on retape les cellules du fichier excel à la main), on voit assez clairement que l'effort à fournir est disproportionné.
    Penser autrement serait perdre de vue l'objectif et se lancer dans un investissement qui ne sera peut-être même jamais rentabilisé (... et donc in finé qui réduit le capital de l'entreprise au sens propre du terme).

    Si maintenant vous vous retrouveriez au fil du temps avec un ensemble de tâches à effectuer en rapport avec la solution A, il pourrait être intéressant d'agréger les taches manuelles en B sous la solution A.
    Main en attendant, il est je pense préférable de travailler avec des "rustines", qui sont tout à fait gérables et productives si on organise bien les choses.

Discussions similaires

  1. [SCILAB] Remplir un fichier excel avec du texte et des valeurs
    Par invite032bc05b dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 29/05/2012, 13h56
  2. formulaire access 2007
    Par invite0f16d6f2 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 21/06/2010, 19h47
  3. Creation de formulaire à partir d'un base excel
    Par invite44e9cef6 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 08/12/2008, 19h49
  4. Creer une liste sur mathématica à partir d'un fichier excel
    Par invite30fe8374 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 30/05/2008, 18h04