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 :

Maj d'un fichier Excel en conservant les Maj utilisateurs dans le fichier Excel [AC-2013]


Sujet :

VBA Access

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut Maj d'un fichier Excel en conservant les Maj utilisateurs dans le fichier Excel
    Bonjour à tous,

    Le contexte
    Un fichier Excel est maj par des données acces
    Certains champs du fichier Excel vivent indépendamment des données de maj Access
    Il faut conserver ces données dans excel sachant que le critère de conservation des saisies utilisateurs est une couleur appliquée sur les cellules. Aucun autre moyen d’identifier les saisies à conserver.

    Question
    Quel serait le processus optimal pour la maj du fichier Excel pour conserver les saisies utilisateurs. J’ai pensé aux solutions
    • traitement via SQL
      • Créer une colonne cachée dans Excel dans laquelle est renseignée la couleur du champ par VBA. Cette fonction est appelée dans chaque cellule et est déclarée dans un module Excel (Rng.Interior.ColorIndex) Si pas de couleur alors la valeur est négative. La mise à jour des valeurs dans Excel se fait sur l’évent beforeClose par sheets(1).calculate
      • Charger / lier la feuille excel dans la base Access. Faire une requête qui relie la feuille Excel et la requête par une jointure externe qui permet de sélectionner tous les enregistrements de la requêtes et de récupérer les données utilisateurs dont la colonne cachée dans Excel affiche une valeur positive
    • comparer en VBA la requête avec le fichier
      • traiter sequentiellement la maj du fichier Excel par comparaison avec la requête Access
      • Traiter la suppression des enregistrements dans Excel qui n’existent plus dans la requête de maj
    • Exporter la requête de maj dans un deuxième onglet et faire un traitement séquentiel entre ces deux onglets (bof bof)



    Intuitivement je pencherai pour la seconde mais la 1ère me plait bien également

    Merci pour votre aide
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Ouch... c'est vraiment fragile comme solutions.

    •Créer une colonne cachée dans Excel dans laquelle est renseignée la couleur du champ par VBA.
    Si tu peux avoir une colonne avec la couleur, pourquoi ne pas avoir une colonne qui indique qu'il ne faut pas modifier cette valeur. Ca serai plus fiable a mon avis.
    Les codes de couleur c'est bien mais il faut s'en souvenir.
    Devais-je metre Vert ou Rose et moi qui prefere le jaune pour mettre en evidence les saisie.
    Oh et j'ai oublie de preciser, j'applique un super theme de couleurs de Windows, tout ce qui est vert chez les autres est orange chez moi !.
    Bref te baser sur la couleur n'est peut etre pas la solution la meilleur.

    • Sinon pour la mise a jour, est-ce ligne a ligne, c-a-d que soit toutes la ligne est modifiable par Access, soit non ?
    • Ou est-ce colonne par colonne variable d'une ligne a l'autre (ex : B1, C1, E1. A2, D2, Z2) ?


    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Bonjour marot_r

    Toujours un plaisir d’échanger avec toi.

    Le truc c’est que le fichier Excel doit être mis à jour par le résultat d’une requête Access mais qu’en même temps ice fichier Excel a une vit indépendante i.e. il y a des modifications qui jouent seulement sur la couleur et uniquement en fonction d’une analyse dans un troisième SI.

    Va falloir donc faire et je ne parle que des enregistrements alimentants le fichier Excel :
    Des ajouts
    Des modifications
    Des suppression

    Et dans les modifications i.e. les enregistrements qui exitent dans la requête et le fichier excel, je dois conserver la couleur.

    En même temps que je te te brosse le contexte, tes commentaires me font prendre conscience que la modification est certe due à des données externe au fichier et la requête mais qu'elles peuvent être identifiées lapalissade quand tu nous tiens
    Je pourrai donc ajouter une colonne des différentes actions qui changent les couleurs et en fonction de cette action cela maj la couleur du champ sur laquelle s’applique l’action

    Ce qui me permettrait de charger le fichier dans Access et le rapprocher avec la requête de maj pour identifier facilement les lignes à
    Ajouter
    A modifier

    La suppression ne serait plus à gérer puisque le rapprochement le fait de façon implicite et ensuite mettre à blanc la feuille excel et faire un chargement brut de la requête.
    Et enfin balayer les colonnes actions en vba depuis Access pour mettre a jour les couleurs

    Car sinon reste la possibilité de faire un traitement séquentielle en vba depuis Access en trois passes sur le fichier Excel en parcourant la requête accesss
    Une mise à jour des données existantes dans la requête et le fichier
    L’ajout dès enregistrements présents dans la requête et absents dans le fichier
    La suppression des en registrements absents de la requête et présents dans le fichier

    Ça c’est comme même bien galère

    Une préférence de ton côté marot_r

    Merci encore pour ton aide
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Vu ton contexte, je pense que la solution VBA est la meilleur meme si ce ne sera sans doute pas la plus performante.
    Tu vas avoir un contrôle total de ce qui se passe, ce qui sera beaucoup moins évident avec des requêtes.
    Perso, je copierai les données de Access dans une feuille du classeur.
    Puis je me servirai de cette feuille pour mettre à jour ma feuille de données.
    Ca permet de bien délimiter la frontière entre Access et Excel.
    Une fois tes données dans Excel, Access n'est plus dans le décor.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    marot_r

    Comme l'outil Access génère également d'autres exports Excel, l'outil doit rester ouvert et il est aussi vrai que je préfère centraliser mon code dans la même application. Un parti pris qui peut bien sûr se discuter.

    Encore merci pour tes retours qui m'ont permis de me décider sur la solution à appliquée et qui est de passer par du code VBA.
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Il y plusieurs façons de régler un problème et l'important est que tu en ai une qui te convienne dans ton contexte.

    Juste un point pour tes recherches en Excel, utlise le Find() de Excel, qui est très performant, bien plus qu'un parcourt séquentiel.

    Sinon, si tu veux faire un parcourt séquentiel, assure-toi que tes données à mettre à jour et ta source de mise à jour sont triées sur dans le même ordre.
    Cela te permet de ne parcourir qu'une seule fois les 2 feuilles.
    Avec l'algo suivant :

    1. Les 2 ID sont identiques, tu passes au suivant dans les 2 feuilles.
    2. Le ID de MAJ < ID de Source MAJ, tu passes au MAJ suivant.
    3. Le ID de MAJ > ID de Source MAJ, tu passes au Source MAJ suivant.


    Et évidement tu peux détecter à ce moment les ajouts ou suppressions.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Marot_r

    Je dois lire un recordset dans Access et pour trouver la ligne correspondante dans Excel, j'utilise la fonctionnalité d'autofiltrage qui m'évite de faire des boucles imbriquées de find avec des offset car la correspondance se fait sur plusieurs champs.

    Mon code de Maj est extrêmement léger, de mémoire moins de 10 lignes.

    Encore merci Marot_r pour ton aide
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 01/04/2017, 01h36
  2. récupérer les données stockées dans un fichier excel
    Par ouzayd dans le forum Automation
    Réponses: 20
    Dernier message: 21/05/2015, 10h54
  3. Réponses: 2
    Dernier message: 17/06/2014, 21h54
  4. Réponses: 2
    Dernier message: 28/11/2007, 21h02
  5. Réponses: 5
    Dernier message: 16/03/2005, 22h17

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