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 et VBA Excel Discussion :

Lecture d'un classeur fermé comme BDD : quelle est la meilleure solution ? [XL-365]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Chargé d'affaires commerciales
    Inscrit en
    Janvier 2018
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargé d'affaires commerciales
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2018
    Messages : 62
    Points : 100
    Points
    100
    Par défaut Lecture d'un classeur fermé comme BDD : quelle est la meilleure solution ?
    Bonjour à tous !

    Gros projet de développement pour mon entreprise en ce moment : ni plus ni point qu'un "logiciel" de gestion commerciale, avec de la création de proposition commerciale sur mesure et/ou prédéfinie.
    Ma logique de développement est là, l'interface et la structuration de l'outil également et ma maquette a été validée par mes N+X.

    Ayant entamé le développement je me pose une question cruciale, j'espère que certains pourront m'aiguiller. Je dois faire appel quasi systématiquement à une base de données, qui est ni plus ni moins qu'un fichier excel (l'installation d'une BDD Access, MysQL ou autre ne peut pas être envisagée pour des raisons techniques).

    De ce fait, je me pose une question sur la méthode de lecture/écriture dans cette base de données Excel, sachant que j'ai très peu de temps pour développer l'outil (je suis sur le départ de la boite, mais l'aboutissement de ce projet me tient à coeur).

    J'ai donc plusieurs solutions :

    - Faire un import de la BDD dans une feuille du fichier utilisateur à chaque démarrage, puis export à chaque fermeture du fichier. Ici, on travaille "en local" mais on se met à jour de la BDD à chaque lancement de l'outil.
    - Ouvrir la BDD en lecture seule à chaque fois qu'on en a besoin en lecture, et ouvrir normalement à chaque fois qu'on a besoin d'écrire. La probabilité pour que deux utilisateurs écrivent en même temps est infime.
    - Ouvrir la BDD en lecture seule à chaque ouverture du fichier et la fermer en écrasant la BDD existante si on détecte du changement lors de la fermeture du fichier principal.
    - Utiliser une connexion ADO pour exécuter des requêtes SQL en écriture et en lecture dès qu'on en a besoin. C'est sans doute la solution idéale, mais étant plus bidouilleur que développeur, j'ai peur de manquer de temps pour m'engager sur cette solution.

    Je viens donc à vous pour avoir vos avis sur ces différentes méthodes et les problèmes que je pourrais rencontrer à l'usage (lenteur d'exécution, problèmes de synchronisation évidents auxquels je n'aurais pas pensé, problèmes de compatibilité entre versions Excel, etc ...)

    Merci par avance à tous !

    Matt

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 222
    Points : 1 794
    Points
    1 794
    Par défaut
    Salut,

    quelques pistes:
    1) Travailler par import / Export pose des problèmes de synchronisation et de gros risques de perte de données (que faire si l'utilisateur a importé à 13h00, exporté à 14h00, et l'utilisateur B à importé à 13h00 et exporté à 19h00 ?).
    2) Peut être la meilleur solution, attention à relire les données sources avant de procéder à une mise à jour histoire de s'assurer que l'on a bien des données fraîche entre les mains (tu ne veux pas faire de mise à jour avec des données périmées).
    Ca peut sembler lourdingue en premier abord, mais avec une bonne architecture logicielle, ca passe crème.
    3) Le temps d'ouverture du fichier est égale au temp d'utilisation du logiciel ? Si oui, ce n'est pas viable, car cela interdit les mises à jour, sauf pour le 1er utilisateur (1er arrivé, 1er servi).
    4) Attaquer les fichiers SQL via ADO fonctionne super bien en lecture (requêtes SELECT) et mise à jour (requête UPDATE), par contre l'insertion (requête INSERT) et la suppression (requête DELETE), ca fait coin-coin. Ce n'est donc pas une option viable.

  3. #3
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 434
    Points : 2 194
    Points
    2 194
    Par défaut
    Bonjour,
    Tu peux accéder à un fichier excel partager via ADO mais sache que la suppression d'enregistrement {lignes} reste impossibles avec ADO.

    Il te faudra faire un update de ton enregistrement en mettant une valeur signifive pour ensuite supprimer en ouvrant phisiquement ta bdd pour supprimer les lignes flaguées.

    Vue que pour des raisons techniques tu ne peux pas utiliser Access qui te dit que tu pourras utiliser ADO pour Excel qui utilise les mêmes drivers ?

  4. #4
    Membre régulier
    Homme Profil pro
    Chargé d'affaires commerciales
    Inscrit en
    Janvier 2018
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargé d'affaires commerciales
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2018
    Messages : 62
    Points : 100
    Points
    100
    Par défaut
    Salut à tous les deux et merci pour vos retours !

    2) Peut être la meilleur solution, attention à relire les données sources avant de procéder à une mise à jour histoire de s'assurer que l'on a bien des données fraîche entre les mains (tu ne veux pas faire de mise à jour avec des données périmées).
    Ca peut sembler lourdingue en premier abord, mais avec une bonne architecture logicielle, ca passe crème.
    Cette réflexion me rassure, c'était ma solution "instinctive" avant que je commence à réfléchir à la question. Ce qui me fait peur effectivement c'est de perdre en temps d'exécution avec toutes les ouvertures/fermeture du fichier. Mais effectivement, si j'arrive à créer une architecture correcte, ça devrait être jouable. Je vais très certainement creuser cette piste.

    Tu peux accéder à un fichier excel partager via ADO mais sache que la suppression d'enregistrement {lignes} reste impossibles avec ADO.

    Il te faudra faire un update de ton enregistrement en mettant une valeur signifive pour ensuite supprimer en ouvrant phisiquement ta bdd pour supprimer les lignes flaguées.
    Vous semblez tous les deux d'accords sur ce point que j'ignorais. Effectivement, ça retire de la viabilité à la solution !

    Vue que pour des raisons techniques tu ne peux pas utiliser Access qui te dit que tu pourras utiliser ADO pour Excel qui utilise les mêmes drivers ?
    Mes raisons techniques ne sont pas les drivers, mais la licence Access que la boîte ne possède pas d'une part, et surtout la pérenité du code. Des manipulations spécifiques seront à effectuer par un opérateur externe sur la BDD, pour y renseigner des paramètres sur les enregistrements( non controlables depuis l'outil). Malheureusement, à ma connaissance dans l'entreprise personne n'est formé sur du Access et plus globalement de la requête SQL et je n'aurai pas le temps avant mon départ de créer un utilitaire tiers pour agir sur les enregistrements.
    C'est donc dans un soucis de pérenité que je bannis volontairement cette option, afin qu'une personne connaissant un minimum Excel puisse effectuer ces opérations en se passant de moi .

    Merci encore pour ces précisions !

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur .net - Office - Quadiant
    Inscrit en
    Février 2020
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur .net - Office - Quadiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2020
    Messages : 586
    Points : 1 081
    Points
    1 081
    Par défaut
    Bonjour,

    Cette lecture devrait t'aider

    https://silkyroad.developpez.com/VBA/ClasseursFermes/

    ONTAYG

  6. #6
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 434
    Points : 2 194
    Points
    2 194
    Par défaut
    Il me semble que la première question a se poser est... Y a-t-il une personne susceptible de reprendre mon travail et qu'elle technologie metrise-t-il pour adapter ma solution à ses compétences !

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 222
    Points : 1 794
    Points
    1 794
    Par défaut
    Alternative, avec ADO seul il est possible de créer une BDD Access, par contre il faut se palucher la création des tables, des clefs primaires, des indexes, des relations via code (requêtes SQL).

    La fonction ci dessous fait le café (testé sur un PC où Access n'a jamais été installé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Sub Create_AccessDatabase(ByVal Path As String)
       Dim catalog As Object        '// ADOX.Catalog
     
       Set catalog = CreateObject("ADOX.Catalog")
       catalog.Create "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Path
    End Sub

  8. #8
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 977
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 977
    Points : 9 339
    Points
    9 339
    Par défaut
    Hello,
    Citation Envoyé par mattgui Voir le message
    Bonjour à tous !
    l'installation d'une BDD Access, MysQL ou autre ne peut pas être envisagée pour des raisons techniques).
    Je rejoins ce qu'a dit deedolith, dans VBA, avec ADOX on peut très bien créer une base de données Access et l'exploiter avec ADO sans que Access soit installé.
    Quelle est la complexité de la base de données que tu veux créer ? nombre de tables ? nombre de champs ? des relations entre les tables ?
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  9. #9
    Membre régulier
    Homme Profil pro
    Chargé d'affaires commerciales
    Inscrit en
    Janvier 2018
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargé d'affaires commerciales
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2018
    Messages : 62
    Points : 100
    Points
    100
    Par défaut
    Merci à vous pour vos idées !

    Il me semble que la première question a se poser est... Y a-t-il une personne susceptible de reprendre mon travail et qu'elle technologie metrise-t-il pour adapter ma solution à ses compétences !
    Effectivement la question de la pérenité du projet et de mon successeur s'est posée en premier lieu, c'est pour ça que je souhaite faire relativement simple. Disons que j'ai un successeur qui arrive à se dépatouiller avec des lignes de codes et une architecture déjà créées.

    Citation Envoyé par jurassic pork Voir le message
    Quelle est la complexité de la base de données que tu veux créer ? nombre de tables ? nombre de champs ? des relations entre les tables ?
    Ami calmant, J.P
    C'est une base de données assez simple : une table avec une trentaine de champs et une table avec deux champs. Aucun lien direct entre les tables.

    Je vais essayer de partir sur la solution que je privilégiais jusque là pour ne pas me rajouter de la complexité avec des méthodes que je maitrise pas, mais je suis tout de même ouvert à vos idées en ce qui concerne ADOX, ne serait-ce que pour mes futurs projets !

    Matt

  10. #10
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 434
    Points : 2 194
    Points
    2 194
    Par défaut
    Bonjour,
    Tu peux convertir tes feuilles excel en dbase.

    https://support.microsoft.com/fr-fr/...C3%A9mentaires

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 222
    Points : 1 794
    Points
    1 794
    Par défaut
    Seulement 2 tables ?
    ADOX + BDD, ca ne devrait pas être compliqué.

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

Discussions similaires

  1. [AJAX] A votre avis : quelle est la meilleure solution ?
    Par tavarlindar dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 15/03/2008, 11h57
  2. Quelle est la meilleure solution pour un tchat ? (couleur, smiley)
    Par Coussati dans le forum Composants VCL
    Réponses: 4
    Dernier message: 10/02/2008, 15h45
  3. Quelle est la meilleure solution ?
    Par sinasquax dans le forum C++
    Réponses: 15
    Dernier message: 25/12/2007, 02h43
  4. Quelle est la meilleure solution pour créer des Web Services?
    Par Flipmode dans le forum Services Web
    Réponses: 1
    Dernier message: 26/04/2007, 15h12
  5. Quelles est la meilleur solution?
    Par le lotus dans le forum Flash
    Réponses: 2
    Dernier message: 31/01/2006, 14h53

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