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

IHM Discussion :

Etat pour envoi de facture


Sujet :

IHM

  1. #1
    Membre du Club
    Homme Profil pro
    Directeur Hôtelier
    Inscrit en
    Janvier 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Directeur Hôtelier
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2011
    Messages : 48
    Points : 52
    Points
    52
    Par défaut Etat pour envoi de facture
    Bonjour à toutes et à tous,

    J'ai encore (et oui encore !) un problème avec mon programme de suivi client débiteur.

    En fait que j'explique concrètement ce que je souhaite apprendre à faire:

    • Dans un formulaire j'ai la "liste de tous les clients débiteurs" dans mon établissement. (OK)
    • Lorsque l'utilisateur clique sur le nom d'un client débiteur, un autre formulaire s'ouvre à la place du premier affichant la "fiche client". (OK)
    • Dans le premier formulaire l'utilisateur à la possibilité de créer un nouveau client ou une nouvelle facture pour un client existant (OK)
    • Lorsque l'utilisateur clique sur une facture qui se trouve dans la fiche client un message lui permette de :
      1. Envoyer la facture
      2. relancer le client 1
      3. Relancer le client 2
      4. Relancer le client 3

    • Le tout via un état qui ne prendrait en compte que la facture sur laquelle on clique (Pas ok)
    • Dans l'idée il faudrait également que l'utilisateur sache quelle facture à été relancée et combien de fois (Pas ok)


    Pour être tout à fait honnête avec vous, si je suis bloqué aujourd'hui, c'est surement parce qu'en tant que débutant je n'ai pas pris les choses dans le bon ordre et je ne sais plus trop quoi faire et comment le faire. (je n'ai certainement pas commencé par le début)

    Si certains peuvent m'aider ou m'orienter (si ça demanderait trop d'aide pour un seul topic) vers des tutoriels qui pourraient me remettre sur le droit chemin j'en serais très heureux.

    J'ai, pour que vous compreniez mieux, laissé mon programme en pièce-jointe.

    Petite précision toutefois c'est uniquement par curiosité et envie d'apprendre que j'entreprends ce travail car je fais, pour le moment, mes suivis clients avec cahier, stylo et word

    Cordialement, Nicolas

    PS : Madefemere si vous m'entendez, un coup de main svp

  2. #2
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Smoky184,

    Je vais laisser Mandresy répondre à ce topic

    Si il ne se manifeste pas, je te viendrai en aide

    @ Bientôt

    JimBoLion

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Salut Smoky,

    Smoky, désolé mais comme tu utilises les nouveautés Access 2010, je ne peux lire ta base de chez moi.

    Ne t'en fais pas, comme Jimbolion se propose de t'aider, je pense qu'il va le faire et de la meilleure façon.

    Bonne continuation à vous deux,

  4. #4
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Mandresy,

    Ok je prends le relais !

    J'analyse tout çà ! Je fais un retour sur la situation dès demain

    Jean-Marie

  5. #5
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    madefemere, Smoky184

    Bonjour à tous les deux !

    Je viens donc de reprendre ton projet Smoky184 et donc apporter un certains nombres de correctifs à savoir :

    - La modification d'un client ne fonctionnait pas, j'ai donc optimisé ton code et supprimer cette succession indigeste de if then else,
    - Corriger quelques requetes (notamment les impayés ou 2 tables factures généraient des doublons),
    - Modifier les propriétés des fenêtres (modales et independantes) afin de ne pas masquer l'impression de la facture en arrière plan (nous reviendrons plus tard sur ce point afin de centrer tes forms... mais aucune urgence pour le moment),
    - Sur le suivi des factures rajouter un bouton imprimer,
    - Creer un nouvel Etat Facture et un sous-Etat factures (avec le détail des factures non réglées).

    Donc pour la première partie impression de l'état et après quelques adaptations mineures (à ton goût), c'est ok

    Ensuite il nous faut étudier les règles de relance, et pour cela j'aurai besoin d'un peu plus d'explications. Il serait bon d'avoir à mon idée une alerte sur l'écran principal permettant de relancer automatiquement toutes les lettres plutôt que de pointer chaque client. Donc une table T_SuiviFactures je pense acceptant le numero_facture, la date et le numéro de la relance (1,2, 3) et eventuellement le suivi au delà de cette troisième relance. Quelles sont les règles à appliquer (délai de 15 jours) ? Un texte spécial pour chaque relance...

    Je te laisses à tout çà et me faire part de tes réflexions.

    JimBoLion

    La version corrigée ici : SuiviClient_2014_05_24_08_41_00.zip

  6. #6
    Membre du Club
    Homme Profil pro
    Directeur Hôtelier
    Inscrit en
    Janvier 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Directeur Hôtelier
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2011
    Messages : 48
    Points : 52
    Points
    52
    Par défaut
    Bonjour Jimbolion,

    Tout d'abord je souhaite également remercier Madefemere pour son implication et son aide. Je suis certain que mis à part la version d'Access vous n'auriez pas hésité à partager votre intellect pour me venir en aide. Je pensais qu'ayant certaines connaissances en HTML, Javascipt, Jquery, php et MySQL (apprises sur le tas) j'aurais été capable d'apprendre et de comprendre les subtilités de Access tout seul plus facilement mais tous les logiciels et tous les langage ont leurs subtilités...

    En ce qui concerne vos correctifs Jimbolion, Je trouve le rendu vraiment impeccable. Je vais essayer de déceler et de comprendre TOUTES les modifications apportées (j'aime bien tout comprendre surement pour ça que je démontais tous mes jouets quand j'étais petit et que je cassais tout )

    Bon revenons au principal :
    Citation Envoyé par Jimbolion
    Ensuite il nous faut étudier les règles de relance, et pour cela j'aurai besoin d'un peu plus d'explications. Il serait bon d'avoir à mon idée une alerte sur l'écran principal permettant de relancer automatiquement toutes les lettres plutôt que de pointer chaque client. Donc une table T_SuiviFactures je pense acceptant le numero_facture, la date et le numéro de la relance (1,2, 3) et eventuellement le suivi au delà de cette troisième relance. Quelles sont les règles à appliquer (délai de 15 jours) ? Un texte spécial pour chaque relance...
    Pour les règles de relance, le paiement à la base est à réception de facture.

    Je laisse environ 1 mois (30 jours / fin de mois) à mes clients pour payer de la manière qu'ils ont choisi à la réservation.
    Le mois suivant (le 1er) je relance mes clients (relance 1 = Rappel) en leurs citant quelle(s) facture(s) sont arrivées à échéance, depuis combien de jours et leur donne un relevé complet des factures (arrivées à échéance ou non) en sur-brillant la/les facture(s) à échéances dépassées.
    15 jours plus tard (le 16 du mois) il ont le droit à la relance 2 qui explique que malgré la première relance je n'ai toujours pas de nouvelle de leur part et qu'ils doivent toujours me régler la/les facture(s) qui sont arrivées à échéance (toujours avec le relevé de toutes les factures et la sur-brillance des factures à échéance dépassée)
    Le mois suivant (le 1er) il ont droit au rappel 3 qui explique qu'à défaut de paiement dans les 8 jours ouvrés (C'est la guerre !) ils sont mis en recouvrement et un huissier de justice mandaté par ACCOR se chargera de leur botter les fesses

    En gros :
    • Envoi de la facture
    • à 30J / Fin de mois envoi de rappel 1 (ils ont pu la perdre ou l'oublier)
    • Le 16 du mois suivant envoi de rappel 2 (maintenant qu'ils ont le duplicata de facture faut qu'ils se dépêchent)
    • Le 1er du mois suivant rappel 3 (Faut pas se foutre de moi)


    Pour la suite je ne m'en occupe plus ACCOR prend les choses en main et je suis payé quoi qu'il arrive.

    Ce qui serait bien c'est que les lettres envoyées soient enregistrées (ou comptées) quelque part. Car si on clique sur imprimer mais que pour une raison X ou Y on imprime pas ce serait dommage que Access pense qu'on ai envoyé le rappel. Bon je suis le seul à m'en occuper et je pense qu'à 27 ans je ne suis pas aux portes d’Alzheimer (enfin j'espère).

    J'ai également renommé et rangé les formulaires comme vous l'avez fait pour les états "E_" et "SE_" que je trouve beaucoup plus propre, ce qui aide beaucoup Voici le fichier corrigé
    Fichiers attachés Fichiers attachés

  7. #7
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Smoky184,

    Parfait

    Je te laisse prendre connaissance des éléments fournis et éventuellement des correctifs à fournir !

    Pour la partie Relances je jette un œil (le bon j'espère) , mais je pense avoir ma petite idée !

    Je pense qu'il serait bon d'avoir donc une alerte dès l'ouverture du programme afin d'imprimer l'ensemble des courriers ! je donc... en fonction de mes dispos

    En tout cas bravo pour l'explication, c'est relativement détaillé et non jeté en pâture comme trop souvent le cas...

    A bientôt donc..

    JimBoLion

  8. #8
    Membre du Club
    Homme Profil pro
    Directeur Hôtelier
    Inscrit en
    Janvier 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Directeur Hôtelier
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2011
    Messages : 48
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par jimbolion
    Je pense qu'il serait bon d'avoir donc une alerte dès l'ouverture du programme afin d'imprimer l'ensemble des courriers !
    Je ne compte pas m'arrêter au suivi clients. Pour continuer mon apprentissage et parfaire mes connaissances je vais ajouter, par la suite, au "F_Bienvenue", un bouton "Inventaires" (pas encore d'actualité). L'idée de relance groupée est très bonne mais je la verrais plutôt sur le "F_Clients_en_Compte". Après pourquoi ne pas, dès ouverture du programme, afficher un message ou un "!" pour rappel de dépassement d'échéance.

    Je suis en train de tout retourner pour voir les erreurs que j'ai pu faire et voir les modifications que vous avez apporté. Je n'ai pas encore de réflexes pratique et donc forcément pas les bonnes approches.

    Citation Envoyé par jimbolion
    je donc... en fonction de mes dispos
    Il est vraiment très aimable et agréable de votre part de vous pencher sur mon problème et de m'aider. Sachez avant tout qu'il n'y a aucune urgence et que je n'accepterais pas que vous travaillez à ma place comme certains le demandent sur les forums "d'entraide". Le but premier est tout de même d'apprendre et de comprendre.

    Encore une fois merci.
    Cordialement, Nicolas

  9. #9
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Smoky184,

    Lorsque je propose mon aide, je le fais toujours avec grand plaisir.. sinon je ne le fais pas

    et quand de surcroît je sens que le demandeur est motivé, et non dans l'attente d'une réponse toute faite.. cela m'encourage d'autant plus

    Donc @ bientôt

    JimboLion

  10. #10
    Membre du Club
    Homme Profil pro
    Directeur Hôtelier
    Inscrit en
    Janvier 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Directeur Hôtelier
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2011
    Messages : 48
    Points : 52
    Points
    52
    Par défaut
    Bonjour Jimbolion,

    Bon ca y est je sèche... Je n'arrive pas à calculer limite de relance... (30J/Fin de mois - 16 du mois suivant - fin du mois suivant) Et je ne sais pas si le plus simple est de :
    • le calculer dans ma table facture
    • le calculer dans mon code VBA des états


    J'ai opté pour 1 seul état E_Factures et je change les textes selon le niveau de relance.

    Cordialement, Nicolas





    EDIT : J'ai avancé un petit peu en arrangeant le code de F-leb :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function MAJDate(EDate As Variant) As Variant
       Dim dtintermediaire As Date
       If IsDate(EDate) Then
         dtintermediaire = DateAdd("m", 2,EDate) 'on ajoute 2 mois
         dtintermediaire = DateSerial(Year(dtintermediaire), Month(dtintermediaire), 1) ' on se positionne sur le 1er jour de EDate+2mois
         MAJDate = dtintermediaire - 1 ' on retranche un jour donc on se retrouve à 30J fin de mois
       Else
       MAJDate = Null
       End If
    End Function
    il faut maintenant que je dorme je continu demain.

    Bonne nuit à tous. Nicolas

  11. #11
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Smoky184,

    Mon approche et je te propose quelque chose dans la journée est d'intégrer directement dans la table t_Factures les date théoriques d'échéance.
    Ensuite un script par requête analyse le delta entre la date système et cette date d'échéance en tenant compte de deux conditions : la facture n'a pas été réglée et la relance n n'a pas été envoyée. On reporte ainsi dans ce cas les 4 conditions à savoir envoi relance 1 ou 2 ou 3 ou déclenchement de l'huissier.
    Je te prépare çà dans la journée.

    JimBoLion

  12. #12
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Smoky184,

    Donc mon approche est la suivant, lors de la création de la facture on va envoyer les 4 dates théoriques (date_relance_1, date_relance_2, date_relance_3 et date huissier). Pour la date huissier j'ai choisi 16 jours après la date relance 3 (cette règle peut être modifiée). Donc dans l'enregistrement de ta facture la modification est opérée ici :

    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
    Dte_Echeance = DateAdd("d", Date, 30)
    Dte_Relance_1 = DateSerial(Year(Dte_Echeance), Month(Dte_Echeance) + 1, 1)
    '
    Dte_Relance_2 = DateSerial(Year(Dte_Echeance), Month(Dte_Echeance) + 1, 16)
    '
    Dte_Relance_3 = DateSerial(Year(Dte_Echeance), Month(Dte_Echeance) + 2, 1)
    '
    Dte_Huissier = DateSerial(Year(Dte_Echeance), Month(Dte_Echeance) + 2, 16)
    '
    Dim rs As Recordset
    Set fct = CurrentDb.OpenRecordset("Factures", DB_OPEN_DYNASET)
    fct.AddNew
    fct!Factures_client = Me.Factures_client
    fct!Factures_numero = Me.Factures_numero
    fct!Factures_arrivee = Me.Factures_arrivee
    fct!Factures_depart = Me.Factures_depart
    fct!Factures_montant = Me.Factures_montant
    fct!Factures_mode_reglement = Me.Factures_mode_reglement
    '
    ' Enregistrement des dates théoriques de Relance
    '
    fct!Date_Relance_1 = Dte_Relance_1
    fct!Date_Relance_2 = Dte_Relance_2
    fct!Date_Relance_3 = Dte_Relance_3
    fct!Date_Huissier = Dte_Huissier
    '
    fct.Update
    DoCmd.Close acForm, "F_Nouvelle_Facture"
    DoCmd.OpenForm "F_Clients_en_Compte"
    Pour info, les règles peuvent donc êtres modifiées et ne remettent pas en cause la requête que je te propose. Cette requête agit par condition successive sur les différentes relances et sert de pivot à tout ce que ce on pouvoir mettre en oeuvre (edition des relances / comptage du nombre de relances par type, édition des envois huissier si nécessaire). Dans cette requête en rajoutant une condition, on peut même extraire que les factures nécessitant un traitement.

    La requête R_Relance envoie donc les cas de traitements suivants :
    1 -> envoi d'une relance 1 à établir
    2 -> envoi d'une relance 2 à établir
    3 -> envoi d'une relance 3 à établir
    4 -> Envoi Huissier

    Après édition de chaque état, le pointage dans les champs Relance_1, Relance_2, Relance_3 (à faire sur une requete de type update) permettra alors d'établir les relances supplémentaires lorsque la date d'échéance sera atteinte.
    Toute la partie intelligente est porté par l'utilisation d'un condition vraiFaux ainsi élaborée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Numero_Relance: VraiFaux(CLong([Date_Relance_1])<=CLong(Date()) Et [Factures_Payee]=0 Et [Relance_1]=0;1;VraiFaux(CLong([Date_Relance_2])<=CLong(Date()) Et [Factures_Payee]=0 Et [Relance_2]=0;2;VraiFaux(CLong([Date_Relance_3])<=CLong(Date()) Et [Factures_Payee]=0 Et [Relance_3]=0;3;VraiFaux(CLong([Date_Huissier])<CLong(Date()) Et [Factures_Payee]=0;4;0))))
    J'ai mis manuellement à jour dans la table F_Factures des valeurs afin de valider ma formule, elles ne correspondant pas aux règles imposées mais te permettront d'analyser le résultat.

    Dans l'attente de ta réponse, et de la suite à donner au traitement proposé..

    Ci-joint la version contenant la modification des éléments suivants :

    1. Mise à jour de la structure de table F_Factures,
    2. Modification de l'enregistrement d'une facture (mise en place des règles et insertion des dates d'échéances),
    3. Création de la requête pivot R_Relances

    ici : SuiviClient_2014_05_27_11_13_00.zip

    @ Bientôt

    JimboLion

  13. #13
    Membre du Club
    Homme Profil pro
    Directeur Hôtelier
    Inscrit en
    Janvier 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Directeur Hôtelier
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2011
    Messages : 48
    Points : 52
    Points
    52
    Par défaut
    Bonjour JimboLion,

    Tout est un peu confus pour moi à l'heure actuelle car je trouve cela encore compliqué à mon niveau (ce n'est pas faute d'une explication précise et détaillée).

    J'avais pour ma part, eu, une approche totalement différente (surement dûe à mon niveau de connaissance) mais qui, je le craint, ne débouchera pas sur autant de possibilités que toi. car je n'ai pas réfléchi aux moyens d'enregistrer les relances envoyées ou non.
    Dans mon cas tout se passe sur le E_Factures. Je calcul la date d'échéance à 30jours (+ fin de mois) et en comparant le résultat à la date du jour (sachant que les factures sont éditées et donc datées le jour d'arrivée) et en changeant le texte selon l'écart de jour comme ceci :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    Public Function ECHDate(EDate As Variant) As Variant
       Dim dtintermediaire As Date
       If IsDate(EDate) Then
         dtintermediaire = DateAdd("m", 2, EDate) 'on ajoute 2 mois
         dtintermediaire = DateSerial(Year(dtintermediaire), Month(dtintermediaire), 1) ' on se positionne sur le 1er jour de EDate+2mois
         ECHDate = dtintermediaire - 1 ' on retranche un jour donc on se retrouve à 30J fin de mois
       Else
       ECHDate = Null
       End If
    End Function
     
    Private Sub Report_Load()
    Form.[SF_Liste_Factures].Fnc_ECHDate
    Echeance30FM = ECHDate(Me.Factures_arrivee)
     
    If (Now() - Echeance30FM) < 1 Then
    Me.Texte110 = "Objet : Votre facture N°" & Me.Factures_numero & "."
    Me.Texte108 = "Madame, Monsieur bonjour.<br><br>Veuillez trouver ci-joint votre facture N°" & Me.Factures_numero & " du " & Me.Factures_arrivee & ", correspondant à " & Me.Factures_nombre_nuit & " nuits dans notre établissement.<br>Cette facture devra être payée par " & Echeance30FM & " avant le " & Me.Factures_echeance & ".<br><br>Vous trouverez également ci-dessous les autres factures, qui reste à ce jour, dûes."
     
        If (Me.Factures_mode_reglement = 3) Then
        Me.Texte113 = "En votre aimable règlement par chèque à l'ordre de <b>Ibis Budget</b> à envoyer par courrier à :<br>Ibis Budget<br>Service comptabilité<br>ZA de la Laouve<br>83470 Saint Maximin."
        Else
        If (Me.Factures_mode_reglement = 1) Then
        Me.Texte113 = "En votre aimable règlement par virement sur le compte :<br>Compte N° : <br>Iban : <br>Swift :"
        End If
        End If
    Else
     
    If (Now() - Echeance30FM) > 1 And (Now() - Echeance30FM) < 16 Then
    Me.Texte110 = "RAPPEL : Votre facture N°" & Me.Factures_numero & "."
    Me.Texte108 = "Madame, Monsieur bonjour.<br><br>Sauf erreur ou ommission de notre part, vous ne nous avez toujours pas rélglé la facture N°" & Me.Factures_numero & ". Veuillez trouver ci-joint un duplicata de la facture <b>N°" & Me.Factures_numero & "</b> du " & Me.Factures_arrivee & ", correspondant à " & Me.Factures_nombre_nuit & " nuits dans notre établissement.<br>Cette facture est arrivée à échéance le <b>" & Echeance30FM & "</b>.<br>Vous trouverez également ci-dessous l'état de votre compte client."
     
        If (Me.Factures_mode_reglement = 3) Then
        Me.Texte113 = "En votre aimable règlement par : <b>chèque</b> à l'ordre de <b>Ibis Budget</b> à envoyer par courrier à :<br>Ibis Budget<br>Service comptabilité<br>ZA de la Laouve<br>83470 Saint Maximin."
        Else
        If (Me.Factures_mode_reglement = 1) Then
        Me.Texte113 = "En votre aimable règlement par virement sur le compte :<br>Compte N° : <br>Iban : <br>Swift :"
        End If
        End If
    Else
     
    If (Now() - Echeance30FM) > 16 And (Now() - Echeance30FM) < 30 Then
    Me.Texte110 = "2ème relance : Votre facture N°" & Me.Factures_numero & "."
    Me.Texte108 = "Madame, Monsieur bonjour.<br><br>Malgré notre précédente relance, nous n'avons toujours pas reçu votre règlement de " & Me.Factures_montant & " pour la facture <b>N°" & Me.Factures_numero & "</b> du " & Me.Factures_arrivee & ".<br>Cette facture devait être payée au plus tard le <b> " & Echeance30FM & "</b>.<br>Nous vous informons par la présente qu'à défaut de paiement des pénalités de retard peuvent vous être facturés. Vous trouverez également ci-dessous l'état de votre compte débiteur dans notre hôtel."
     
        If (Me.Factures_mode_reglement = 3) Then
        Me.Texte113 = "Merci d'envoyer au plus vite votre paiement <b>par chèque</b> à l'ordre de <b>Ibis Budget</b> à envoyer par courrier à :<br>Ibis Budget<br>Service comptabilité<br>ZA de la Laouve<br>83470 Saint Maximin."
        Else
        If (Me.Factures_mode_reglement = 1) Then
        Me.Texte113 = "Merci d'envoyer au plus vite votre paiement <b>par virement</b> sur le compte :<br>Compte N° : <br>Iban : <br>Swift :"
        End If
        End If
    Else
     
    If (Now() - Echeance30FM) > 30 Then
    Me.Texte110 = "Dernier rappel : Votre facture N°" & Me.Factures_numero & "."
    Me.Texte108 = "Madame, Monsieur bonjour.<br><br>Malgré nos précédentes relances et la patience dont nous avons fait preuve, nous n'avons toujours pas été payé pour la facture <b>N°" & Me.Factures_numero & "</b> qui vous a été envoyé le " & Me.Factures_arrivee & ".<br>Cette facture est arrivée à échéance le <b>" & Echeance30FM & "</b>. A défaut de paiement sous 8 jours, nous nous verrions dans l'obligation d'entâmer des procécures de recouvrement. Vous trouverez également ci-dessous les autres factures, qui reste à ce jour, dûes."
     
        If (Me.Factures_mode_reglement = 3) Then
        Me.Texte113 = "Merci de nous envoyer, dans le délais supplémentaire qui vous à été accordé, votre règlement <b>par chèque</b> à l'ordre de <b>Ibis Budget</b> à envoyer par courrier à :<br>Ibis Budget<br>Service comptabilité<br>ZA de la Laouve<br>83470 Saint Maximin."
        Else
        If (Me.Factures_mode_reglement = 1) Then
        Me.Texte113 = "Merci de nous envoyer, dans le délais supplémentaire qui vous à été accordé, votre règlement <b>par virement</b> sur le compte :<br>Compte N° : <br>Iban : <br>Swift :"
        End If
        End If
    End If
    End If
    End If
    End If
    End Sub
    Cette méthode par contre ne m'indique pas quelles factures ou relances ont été envoyées. La on pourrait terminer le code de E_Factures sur ton idée d'envoyer un update sur la table Factures (?)
    Je comprend mieux le moyen, comme tu me l'expliquais, d'envoyer toutes les factures/Relances d'un seul visu. On sait alors ce qui à été envoyé (et quand ?).

    J'avais également tenté changement de couleurs de fonds de la liste des factures du F_Suivi_Clients en voulant récupérer cette "public function" (raté). Je n'ai jamais réussi à récupérer la fonction dans mon F_Suivi_Clients. Enfin la on reste dans de l'embellissement des forms (secondaire).

    Qu'en penses-tu ? SuiviClient_27052014_1.rar

    Cordialement, Nicolas

  14. #14
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Smoky184,

    Même si ton approche peut fonctionner, elle limite réellement les possibilités. Dans ton code, je ne perçois pas le numéro de la relance ?

    En établissant une requête tu t'ouvres toutes les possibilités souhaitées et tu agis dessus comme une table.

    En ce qui concerne, la génération des dates de facture, celles-ci te permettront de conserver également un historique des échéances et d'agir également aisément à des recherches spécifiques sur les éléments (nombre de factures envoyées à l'huissier par exemple).

    La requête proposée peut être déclinée en autant de possibilités que voulues (conditions, ajout de colonnes...)

    Je te fourni dans la base ci-dessous 4 exemples de dérivation de la requête initiale. Regarde bien tout est porté par la gestion des conditions expressionnelles et bien plus performant que la gestion par code VBA.

    http://office.microsoft.com/fr-fr/ac...010096297.aspx

    De plus le retour du numero_relance va te permettre très facilement de gérer ton formatage en utilisant les mise en forme conditionnelles :

    http://warin.developpez.com/access/mfc/

    Donc on peut partir sur ton idée si tu la juges plus facile à mettre en oeuvre mais beaucoup plus restrictive que ma technique qui te laisse de nombreuses opportunités !

    La version avec les 4 requetes exemples :

    R_Relance : Numero des relances
    R_Relance_Exemple_2 : Même chose que 1 avec date d'échéance
    R_Relance_Exemple_3 : Même chose que 2 avec uniquement les relances
    R_Relance_Exemple_4 : Même chose que 2 avec uniquement les factures sans relance.

    Le nombre de colonnes peut être augmentées en ajoutant les champs nécessaires à l'élaboration de l'état par exemple.

    La version ici : SuiviClient_2014_05_28_09_13_00.zip

    Jean-Marie

  15. #15
    Membre du Club
    Homme Profil pro
    Directeur Hôtelier
    Inscrit en
    Janvier 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Directeur Hôtelier
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2011
    Messages : 48
    Points : 52
    Points
    52
    Par défaut
    Bonjour jimboLion,

    Désolé pour le retard de ma réponse. J'ai eu pas mal de boulot en cette fin de mois.

    Donc j'ai regardé ta PJ et les tutoriels que tu m'a fourni. je dois avoué que je suis un peu perdu. J'ai en effet compris comment fonctionnent des requêtes et des expressions conditionnelles et la manière de s'en servir pour cibler les factures, mais je ne comprend pas comment elle calculent les champs relance 1 2 3 et Huissier sur la table Factures. (elles ont été rentrées manuellement ?).
    J'ai une préférence pour la requête 2 pour ma part puisqu'elle permet un aperçu de TOUTES les factures non payées.

    Autre question : existe-t-il un moyen d'enregistrer l'impression (réelle) de l'état ou doit on forcément passer par le clique du bouton "imprimer" qui se trouve dans la liste "SF_Liste_Facture"

    Bonne journée, Nicolas

  16. #16
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Smoky184,

    Non les dates on été injectées lors de la création de la facture ! J'ai mis cette fonction dans le code

    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
    Dte_Echeance = DateAdd("d", Date, 30)
    Dte_Relance_1 = DateSerial(Year(Dte_Echeance), Month(Dte_Echeance) + 1, 1)
    '
    Dte_Relance_2 = DateSerial(Year(Dte_Echeance), Month(Dte_Echeance) + 1, 16)
    '
    Dte_Relance_3 = DateSerial(Year(Dte_Echeance), Month(Dte_Echeance) + 2, 1)
    '
    Dte_Huissier = DateSerial(Year(Dte_Echeance), Month(Dte_Echeance) + 2, 16)
    '
    Dim rs As Recordset
    Set fct = CurrentDb.OpenRecordset("Factures", DB_OPEN_DYNASET)
    fct.AddNew
    fct!Factures_client = Me.Factures_client
    fct!Factures_numero = Me.Factures_numero
    fct!Factures_arrivee = Me.Factures_arrivee
    fct!Factures_depart = Me.Factures_depart
    fct!Factures_montant = Me.Factures_montant
    fct!Factures_mode_reglement = Me.Factures_mode_reglement
    '
    ' Enregistrement des dates théoriques de Relance
    '
    fct!Date_Relance_1 = Dte_Relance_1
    fct!Date_Relance_2 = Dte_Relance_2
    fct!Date_Relance_3 = Dte_Relance_3
    fct!Date_Huissier = Dte_Huissier
    '
    fct.Update
    DoCmd.Close acForm, "F_Nouvelle_Facture"
    DoCmd.OpenForm "F_Clients_en_Compte"
    Pour les requêtes j'ai décliné des exemples...

    Autre question : existe-t-il un moyen d'enregistrer l'impression (réelle) de l'état ou doit on forcément passer par le clique du bouton "imprimer" qui se trouve dans la liste "SF_Liste_Facture"
    non çà me semblait le plus logique, mais si tu as une autre idée

    JimBoLion

  17. #17
    Membre du Club
    Homme Profil pro
    Directeur Hôtelier
    Inscrit en
    Janvier 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Directeur Hôtelier
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2011
    Messages : 48
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par JimboLion
    Non les dates on été injectées lors de la création de la facture !
    Désolé je n'ai pas fait de teste donc je n'ai pas fait attention que les date d’échéances s'ajoutaient automatiquement sinon j'aurais pensé à regarder dans les codes de F_Nouvelle_Facture...

    Citation Envoyé par JimboLion
    Pour les requêtes j'ai décliné des exemples...
    Les requêtes c'est ok j'ai bien compris le fonctionnement de celles-ci. elles permettent même de faire un rappel de toutes les factures à échéances dépassées plutôt que de faire une lettre par facture. Franchement c'est génial !


    Concernant le bouton imprimé je parle de celui dans la boîte de dialogue Access pour l’impression et non celui du formulaire F_Liste_Factures.
    Je sais que l'on peut mettre des action sur des bouton "Système" mais je n'ai rien trouvé sur le bouton "imprimer" de cette fameuse boite de dialogue (celle où on peut choisir l'imprimante) Enfin bref c'est pour approfondir mes connaissances.

    J'ai vaguement eu l'impression de t'avoir blasé avec mon dernier message. J'en suis désolé.

    Bonne soirée, Nicolas

  18. #18
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Smoky184,

    J'ai vaguement eu l'impression de t'avoir blasé avec mon dernier message. J'en suis désolé.
    Non, la réponse a été un peu rapide car je devais m'absenter ! Aucun soucis de ce côté là


    Concernant le bouton imprimé je parle de celui dans la boîte de dialogue Access pour l’impression et non celui du formulaire F_Liste_Factures.
    Je sais que l'on peut mettre des action sur des bouton "Système" mais je n'ai rien trouvé sur le bouton "imprimer" de cette fameuse boite de dialogue (celle où on peut choisir l'imprimante) Enfin bref c'est pour approfondir mes connaissances.
    Euh pas savoir d'avoir tout compris, parles-tu de la barre de menu de l'état ? Personnellement j'utilise les rubans personnalisés :

    http://warin.developpez.com/tutoriel...?page=sommaire

    ou

    http://warin.developpez.com/access/ruban/

    ou de manière plus classique

    http://warin.developpez.com/access/t...context1/#L3.2


    Les requêtes c'est ok j'ai bien compris le fonctionnement de celles-ci. elles permettent même de faire un rappel de toutes les factures à échéances dépassées plutôt que de faire une lettre par facture. Franchement c'est génial !
    Oui à partir de ces requêtes, te sens tu capables de générer tes états de relance et afficher une alerte ?
    Tiens moi au courant si tu veux de l'aide sur ce sujet

    JimBoLion

  19. #19
    Membre du Club
    Homme Profil pro
    Directeur Hôtelier
    Inscrit en
    Janvier 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Directeur Hôtelier
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2011
    Messages : 48
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par JimboLion
    Euh pas savoir d'avoir tout compris, parles-tu de la barre de menu de l'état ? Personnellement j'utilise les rubans personnalisés
    En faite je parle de CE bouton là :
    Nom : Imprimer.png
Affichages : 887
Taille : 11,2 Ko

    Citation Envoyé par "JimboLion
    Oui à partir de ces requêtes, te sens tu capables de générer tes états de relance et afficher une alerte ?
    Tiens moi au courant si tu veux de l'aide sur ce sujet
    Je vais d'abord essayer avant de faire appel à vos services. J'apprend plus vite en pratiquant et c'est aussi en faisant des erreurs qu'on s'améliore donc dès que j'aurais essayé je vous montrerais.

    D'ailleurs autre question : Ma question première étant résolue, devrais-je clôturer ce sujet ? je suis en train de bafouer les règles du forum avec cette discussion

    Merci pour toutes ces aides, Nicolas

  20. #20
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 398
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 398
    Points : 20 519
    Points
    20 519
    Par défaut
    salut
    il faut absolument éviter cela
    Il faut donner un nom intelligent aux contrôles lorsqu'on débute je sais que c'est une erreur fréquente
    Si tu as 30 contrôles sur un formulaire après tu seras totalement perdu pour maintenir le code et ça ne sera pas intuitif.
    Donc il faut donner un nom intelligent aux contrôles par exemple txtNomClient,lbListe_Clients etc
    Citation Envoyé par Smoky184 Voir le message
    En faite je parle de CE bouton là :
    je n'ai pas l'aide d'ACCESS avec moi mais pour éviter cette fenêtre il existe certainement une commande VBA du genre report1.print.

    Autre chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    If (Me.Factures_mode_reglement = 3) Then
        Me.Texte113 = "En votre aimable règlement ...n."
        Else
        If (Me.Factures_mode_reglement = 1) Then
        Me.Texte113 = "En votre aimable règlement par virement sur le compte :<br>Compte N° : <br>Iban : <br>Swift :"
        End If
        End If
    c'est mieux d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Select Case Me.Factures_mode_reglement 
     Case 3
     Case 1
    End Select
    '...
    Ce qui serait bien c'est que les lettres envoyées soient enregistrées (ou comptées) quelque part. Car si on clique sur imprimer mais que pour une raison X ou Y on imprime pas ce serait dommage que Access pense qu'on ai envoyé le rappel. Bon je suis le seul à m'en occuper et je pense qu'à 27 ans je ne suis pas aux portes d’Alzheimer (enfin j'espère).
    il suffit de créer un objet Word du genre Dim obj as Object et set obj=CreateObj("word") ; ensuite créer le document en écrivant dedans et enregistrer le document word dans un répertoire
    Autre méthode, créer une table qui enregistre toutes les lignes des courriers clients mais on perd la mise en forme

    Citation Envoyé par Smoky184 Voir le message
    Bonjour Jimbolion,

    Bon ca y est je sèche... Je n'arrive pas à calculer limite de relance... (30J/Fin de mois - 16 du mois suivant - fin du mois suivant) Et je ne sais pas si le plus simple est de :

    le calculer dans ma table facture
    le calculer dans mon code VBA des états
    soit en chargeant les données dans des variables ou des tableaux et faire les calculs sur les dates
    soit en faisant des requêtes SQL et des opérations sur les dates.
    L'avantage de cette dernière est que si tu prends une autre base de données le SQL est un peu plus standard et pas besoin de faire des traitements en plus.

    Ensuite je ne voudrais pas t'embrouiller mais tu indiques que le 16 tu veux faire une relance client,il faudrait créer des "triggers" pour cela or Access ne gère pas ça
    Ce qui fait que pour gérer les clients il va falloir ouvrir la base Access tous les jours et cliquer sur le bouton "relance"

Discussions similaires

  1. Comment faire des etats pour une application web ?
    Par ovh dans le forum Autres outils décisionnels
    Réponses: 6
    Dernier message: 06/07/2021, 03h25
  2. Réponses: 14
    Dernier message: 16/12/2007, 22h26
  3. Ouvrir Lotus Notes pour envoi d'état
    Par nbelg27 dans le forum Access
    Réponses: 1
    Dernier message: 15/09/2005, 21h12
  4. [JDBC] Préparer une chaîne pour envoi à MySQL
    Par calogerogigante dans le forum JDBC
    Réponses: 7
    Dernier message: 15/09/2005, 14h21
  5. Création de comptes pour envoi de newsletter
    Par Skullbox dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/08/2005, 11h30

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