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 :

Algorithme combinaisons en VBA


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 68
    Points : 42
    Points
    42
    Par défaut Algorithme combinaisons en VBA
    Bonjour,

    Je me suis lancé dans le développement d'un programme de rapprochement comptable sur Access et je me demande si je n'ai pas fait une erreur en choisissant cette solution.

    Dans mon programme, je dois trouver les combinaisons possibles de factures qui pourraient matcher avec les montant de relevés bancaires.
    1 montant relevé = X factures.

    Je me suis lancé dans un algorithme sur VBA qui me retourne toutes les combinaisons possibles avec ces factures. Je fais ensuite une sélection sur l'égalité avec le montant du relevé. Je laisse ensuite l'utilisateur choisir les combinaisons de factures (il peut évidemment y en avoir plusieurs possibles).

    Dans mon algorithme, qui repose sur la récursivité, tout est OK lorsque je suis à 10 factures environ... mais lorsque cela va au delà, le nombre de combinaisons explose et le logiciel est inexploitable (car temps réponse interminable).
    Je me demande donc si Access est la solution.

    Avez-vous un avis sur le problème rencontré ?
    Est-ce qu'à votre avis, il y a une solution Access pour répondre à ce besoin ou bien je dois utiliser un langage de programmation plus performant...

    Merci pour votre aide.

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 095
    Points : 5 211
    Points
    5 211
    Par défaut
    Bonjour,

    VBA n'est pas un langage particulièrement lent, tout dépend de l'algorithme et au vu du problème on comprend bien que les combinaisons explosent avec le nombre de factures surtout si elles sont toutes envisagées !
    Quelques pistes :
    - le SQL d'access est lent s'il est en DAO : utiliser ADO et/ou une base de données non access pour déléguer les requêtes au serveur (particulièrement si on est en multiposte)
    - faire une seule requete et tout le calcul en mémoire ou sur des tables locales
    - si ce n'est pas le cas, commencer par identifier le tiers concerné et filtrer les factures de ce tiers


    A titre d'exemple j'ai un calcul de besoins qui produit les demandes d'achat pour une entreprise en fonction des commandes en cours ou envisagé. Le temps d'exécution est de l'ordre de
    - 15' en transact-sql sur le serveur
    - 20' en VBA + ADO sur le serveur
    - 40' en VBA + ADO sur un PC client en réseau ethernet
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  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 604
    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 604
    Points : 34 277
    Points
    34 277
    Par défaut
    Salut,

    j'ai eu un cas similaire à faire sous Excel, avec du lettrage à effectuer, pour un client en 2021. J'avais réussi avec l'aide d'un membre de DVP, à avoir des traitements très rapides sur des volumes de transactions jusque 25 éléments à lettrer.

    Les cas avec plus d'éléments étaient plus longs.

    La contrainte initiale est qu'on a l'identifiant du client, le reste passait plutôt bien.

    Le fait d'utiliser VBA n'est pas nécessairement un bloquant.

    J'ai essayé une piste avec du python, ca fonctionnait aussi, mais pour la maintenance, pas tip top.
    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 du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 68
    Points : 42
    Points
    42
    Par défaut
    Bonjour,
    Merci d'avoir pris le temps de me répondre.
    La solution ADO n'a pas résolu le problème, le traitement n'est pas viable en l'état.
    Mais j'ai réalisé une chose plutôt inquiétante, les combinaisons possibles pour 30 factures dépassent le milliard (sauf erreur de ma part)! C'est un nombre qui m'oblige à revoir la stratégie de rapprochement.
    @jean-philippe : Est-ce que dans ton traitement, tu devais aussi lister toutes les combinaisons possibles avec les factures avant de faire le lettrage ?

    Merci encore.

  5. #5
    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 604
    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 604
    Points : 34 277
    Points
    34 277
    Par défaut
    Salut,

    en fait avant de faire toutes les combinaisons possibles, utilise plutôt une approches avec une fonction récursive pour générer tous les groupes de p valeurs prises parmi n valeurs de l'ensemble. C n, p


    Pour réduire ton temps de traitement, il faut être capable de sortir le plus tôt possible d'une série de tests, lorsque par exemple aucune valeur de ton ensemble n'est négative, il n'est pas possible de faire une somme nulle.

    J'ai retrouvé des bouts de codes, et le NB_MAX_LIGNES était de 18.
    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

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 68
    Points : 42
    Points
    42
    Par défaut
    Oui tu as raison.
    Je vais trouver un moyen de proposer le rapprochement de ce qui est déjà évident, cela limitera les factures sélectionnables dans les combinaisons puisqu'elles seront déjà rapprochées.
    Merci pour votre aide.

  7. #7
    Membre éprouvé Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    853
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 853
    Points : 1 002
    Points
    1 002
    Par défaut
    Bonjour,
    En comptabilité, on apure généralement les plus anciennes factures en premier au fur et à mesure des versements reçus du client pour prendre en compte les délais de paiement dans l'application des pénalités.
    .
    Diviser c'est régner : United we stand, Divided we fall
    .

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 68
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par star Voir le message
    Bonjour,
    En comptabilité, on apure généralement les plus anciennes factures en premier au fur et à mesure des versements reçus du client pour prendre en compte les délais de paiement dans l'application des pénalités.
    .
    Bonjour star,
    Ces actions doivent être faites tous les mois.
    J'ai une règle de gestion posée qui m'oblige, à partir de la date remise de la banque, de regarder les factures des 3 jours qui précèdent pour être sûr de pouvoir sélectionner toutes les factures concernées.
    J'ai paramétré ce nombre de jours et je laisse l'utilisateur le modifier.
    Ils vont donc débuter le travail de lettrage en positionnant 1 jour au départ ce qui va éliminer environ 80% des factures et donc va alléger les combinaisons de factures suivantes. Ils positionneront ensuite le nombre de jours à 2 puis 3 pour terminer la totalités des occurrences.
    Je ne suis pas un spécialiste de la compta mais c'est ce que j'ai compris du besoin.

    Le logiciel est donc utilisable dans ces conditions.

    Merci

Discussions similaires

  1. Algorithme combinaison denombrement
    Par Mohammed_S dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 21/04/2011, 17h55
  2. Algorithme combinaisons d'éléments d'une liste
    Par smallbean dans le forum Langage
    Réponses: 2
    Dernier message: 17/11/2010, 16h11
  3. Algorithme combinaisons différentes
    Par fdfdfd dans le forum Mathématiques
    Réponses: 7
    Dernier message: 25/06/2009, 18h31
  4. Algorithme : combinaisons uniques
    Par Mainman dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 24/02/2009, 18h06
  5. Algorithme combinaisons mots à partir de lettres
    Par micfont999 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 16/01/2007, 00h53

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