Question Facturier

Bonjour à tous,

Voir ci-joint la façon dont se présente mon facturier.
L'onglet Juillet rassemble toutes les heures de formation que je vais donner en Juillet.
En ligne 2, à partir de la colonne F mes différents clients : Dupont, Ferrand, etc...
Puis les différentes lignes, par jour, des heures de formation.

Je veux ensuite générer une facture, par client qui synthétise toutes les heures de formation du mois de Juillet, voir l'onglet Facture.
En exemple, j'ai pris le client Dupont. J'ai fait la facture en copiant/collant les données. C'est ce que je veux obtenir.
Je souhaite trouver les formules, à partir de la ligne 15 de la facture, qui ramènent automatiquement les données du client choisi en D4.
La problématique est qu'il y a des lignes vides entre chaque données (il n'y a pas de formation tous les jours, on ne veut pas ramener ces lignes vides).

Si vous pouviez m'aider à trouver cette fameuse formule !

En attente de vos solutions,

A bientôt,

Dadams

Bonjour Dadams51,

Voyez si la solution proposée dans le fichier joint peut vous vous convenir

1) Ajout d'une colonne (de AE4 à AE69) dans la feuille Juillet pour répérer les dates facturées au client considéré en utilisant la formule :

=SI(ESTNUM(INDIRECT(ADRESSE(LIGNE();EQUIV($Facture.$D$4;$A$2:$AD$2;0));1));LIGNE();"")

2) Ajout d'une fonction en AE1 dans la feuille Juillet :

=NB.SI(AE4:AE69;">1")

3) Dans la feuille facture de A15 à B27 (données toujours dans les mêmes colonnes) en s'appuyant sur la formule suivante :

=SI(LIGNE()-14>$Juillet.$AE$1;"";INDIRECT(ADRESSE(PETITE.VALEUR($Juillet.$AE$4:$AE$69;LIGNE()-14);COLONNE()+3;4;1;"Juillet");1))

Pour les données dans des colonnes variables en fonction du client

4) Dans la feuille facture de C15 à C27

=SI(LIGNE()-14>$Juillet.$AE$1;"";INDIRECT(ADRESSE(PETITE.VALEUR($Juillet.$AE$4:$AE$69;LIGNE()-14);EQUIV($Facture.$D$4;$Juillet.$A$2:$AD$2;0)+0;4;1;"Juillet");1))

5) Dans la feuille facture de D15 à D27

=SI(LIGNE()-14>$Juillet.$AE$1;"";INDIRECT(ADRESSE(PETITE.VALEUR($Juillet.$AE$4:$AE$69;LIGNE()-14);EQUIV($Facture.$D$4;$Juillet.$A$2:$AD$2;0)+1;4;1;"Juillet");1))

6) Dans la feuille facture de E15 à E27

=SI(LIGNE()-14>$Juillet.$AE$1;"";INDIRECT(ADRESSE(PETITE.VALEUR($Juillet.$AE$4:$AE$69;LIGNE()-14);EQUIV($Facture.$D$4;$Juillet.$A$2:$AD$2;0)+2;4;1;"Juillet");1))

Bonjour njhub,

Bravo, c'est très impressionnant cette maitrise des formules !

Mais une question me viens, je veux garder l'onglet facture et faire référence à d'autres mois par la suite (Août, Septembre, etc).
Pourrait-on mettre l'onglet du mois voulu en variable ? Pour pointer le mois voulu à partir de de l'onglet facture ?

Salutations,

Dadams

Bonjour Dadams51,

Pourrait-on mettre l'onglet du mois voulu en variable ?

Vous avez dans votre feuille facture, en E11 une rubrique "Période de prestation :"

il faudrait y insérer une liste déroulante des mois et modifier quelque peu les formules en remplaçant "Juillet" par $Facture.$E$11, à vérifier...

Bonjour à tous

Une autre approche : synthèse par PowerQuery (intégréà Excel) puis formules qui réalisent la facture au choix du nom dans sa cellule D4

Quand la source évolue, Actualiser la Synthèse (clic droit dans le tableau)

RE

Pourrait-on mettre l'onglet du mois voulu en variable ? Pour pointer le mois voulu à partir de de l'onglet facture ?

Choix du mois (de 1 à 12, libellé automatique) puis actualiser

Bonjour Dadams51,

Voyez si la solution proposée dans le fichier modifié joint peut vous vous convenir

Bonjour njhub, 78chris,

Les 2 propositions (Power Q et formules) sont aussi bonnes l'une que l'autre mais comme il faut choisir je prend les formules proposées par njhub pour mon application finale.

Pour améliorer ma compréhension de ces formules pouvez-vous m'expliquer pourquoi on trouve "juillet" écrit "en dur" dans les formules en colonnes C, D et E de l'onglet Facture ? Car dans bien des cas, le résultat de ces formules n'a rien à voir avec l'onglet 'juillet".

A bientôt,

Dadams

Bonjour Dadams51,

... pouvez-vous m'expliquer pourquoi on trouve "juillet" écrit "en dur"....

Oui, c'est un oubli, après que vous ayez souhaité une amélioration :

... je veux garder l'onglet facture et faire référence à d'autres mois par la suite ...

Félicitations pour avoir décelé cette coquille

Vous pourrez corriger les formules en colonne C, D et E en remplaçant dans ces formules:

EQUIV($Facture.$D$4;$juillet.$A$2:$AD$2;0)

par

EQUIV($Facture.$D$4;INDIRECT(CONCATENER(ADRESSE(2;1;4;1;$E$11);":";ADRESSE(2;30;4;1));1);0)

ce qui donne :

C: =SI(LIGNE()-14>INDIRECT(ADRESSE(1;31;4;1;$Facture.$E$11);1);"";INDIRECT(ADRESSE(PETITE.VALEUR(INDIRECT(CONCATENER(ADRESSE(4;31;4;1;$Facture.$E$11);":";ADRESSE(69;31;4;1));1);LIGNE()-14);EQUIV($Facture.$D$4;$juillet.$A$2:$AD$2;0)+0;4;1;$Facture.$E$11);1))

devient après correction :

=SI(LIGNE()-14>INDIRECT(ADRESSE(1;31;4;1;$Facture.$E$11);1);"";INDIRECT(ADRESSE(PETITE.VALEUR(INDIRECT(CONCATENER(ADRESSE(4;31;4;1;$Facture.$E$11);":";ADRESSE(69;31;4;1));1);LIGNE()-14);EQUIV($Facture.$D$4;INDIRECT(CONCATENER(ADRESSE(2;1;4;1;$E$11);":";ADRESSE(2;30;4;1));1);0)+0;4;1;$Facture.$E$11);1))

D: =SI(LIGNE()-14>INDIRECT(ADRESSE(1;31;4;1;$Facture.$E$11);1);"";INDIRECT(ADRESSE(PETITE.VALEUR(INDIRECT(CONCATENER(ADRESSE(4;31;4;1;$Facture.$E$11);":";ADRESSE(69;31;4;1));1);LIGNE()-14);EQUIV($Facture.$D$4;$juillet.$A$2:$AD$2;0)+1;4;1;$Facture.$E$11);1))

devient après correction :

=SI(LIGNE()-14>INDIRECT(ADRESSE(1;31;4;1;$Facture.$E$11);1);"";INDIRECT(ADRESSE(PETITE.VALEUR(INDIRECT(CONCATENER(ADRESSE(4;31;4;1;$Facture.$E$11);":";ADRESSE(69;31;4;1));1);LIGNE()-14);EQUIV($Facture.$D$4;INDIRECT(CONCATENER(ADRESSE(2;1;4;1;$E$11);":";ADRESSE(2;30;4;1));1);0)+1;4;1;$Facture.$E$11);1))

E: =SI(LIGNE()-14>INDIRECT(ADRESSE(1;31;4;1;$Facture.$E$11);1);"";INDIRECT(ADRESSE(PETITE.VALEUR(INDIRECT(CONCATENER(ADRESSE(4;31;4;1;$Facture.$E$11);":";ADRESSE(69;31;4;1));1);LIGNE()-14);EQUIV($Facture.$D$4;$juillet.$A$2:$AD$2;0)+2;4;1;$Facture.$E$11);1))

devient après correction :

=SI(LIGNE()-14>INDIRECT(ADRESSE(1;31;4;1;$Facture.$E$11);1);"";INDIRECT(ADRESSE(PETITE.VALEUR(INDIRECT(CONCATENER(ADRESSE(4;31;4;1;$Facture.$E$11);":";ADRESSE(69;31;4;1));1);LIGNE()-14);EQUIV($Facture.$D$4;INDIRECT(CONCATENER(ADRESSE(2;1;4;1;$E$11);":";ADRESSE(2;30;4;1));1);0)+2;4;1;$Facture.$E$11);1))

voyez dans le fichier joint, la correction y a été apportée

Bonjour njhub, 78chris,

J'ai presque fini mon application !

Il me reste juste à créer un bouton macro qui enregistre automatiquement l'onglet Facture en un nouveau fichier Excel (un seul onglet).

La difficulté (relative) est qu'il faut enregistrer les valeurs "en dur" et ne pas avoir de formule.

En attente de vos solutions (code vba),

Salutations,

Dadams

Bonjour njhub, 78chris,

J'ai trouvé, ce sujet est résolu, merci pour ce beau travail

dadams

Rechercher des sujets similaires à "question facturier"