Modifier un fichier de facturation / macro

Bonjour,

J'ai un fichier de facturation qui marche, mais qui ne correspond pas à mes besoins.

Actuellement, la génération de facture ouvre un nouveau classeur avec la création d'une feuille pour chaque facture...

Je souhaiterai que toutes les factures soient les unes après les autres sur une seule feuille (en gardant la mise en page pour l'impression).

D'autre part quelle serait le script (en gros, je peux le modifier si je comprends la logique) de la macro qui me permettrait de voir une seule facture, si je selectionne une personne (une ligne) dans le fichier de facturation, et que je clique sur la macro, je génére seulement un nouveau classeur avec la facture de la personne considérée.

Merci d'avance pour toute aide et tout conseil !

Bonjour,

Utiliser un service de hosting qui te pourrit la vie avec des mots de passe et autres joyeusetés n'est pas une bonne méthode pour obtenir une réponse...

A+

Bonjour,

Ok merci pour l'info

Et ci dessous le script de la macro, que je souhaite modifier :

Private Sub CommandButton2_Click()
Do While Cells(nombre_resident + 4, 2) <> Empty
 nombre_resident = nombre_resident + 1
Loop
Workbooks.Add

For resident = 1 To nombre_resident

'recupere info
With Workbooks(1).Worksheets("Facturation")
' mois = Workbooks("restauration").Worksheets("facture").Cells(13, 12)
 studio = .Cells(resident + 3, 1)
 nom = .Cells(resident + 3, 2)
 dej = .Cells(resident + 3, 3)
 pot = .Cells(resident + 3, 4)
 din = .Cells(resident + 3, 5)
 caf = .Cells(resident + 3, 6)
 vin = .Cells(resident + 3, 7)
 prix_dej = .Cells(3, 3)
 prix_pot = .Cells(3, 4)
 prix_din = .Cells(3, 5)
 prix_caf = .Cells(3, 6)
 prix_vin = .Cells(3, 7)
End With

If dej + pot + din + caf + vin <> 0 Then

    Workbooks(1).Worksheets("facture").Copy Before:=ActiveWorkbook.Worksheets(1)
    'ActiveWorkbook.Name = "facture " & mois
    For Each Worksheet In Sheets
    If Worksheet.Name = "facture" & nom Then
     MsgBox ("Erreur : 2 fois le même résident")
     Exit Sub
    End If
    Next Worksheet

    With Worksheets("facture")

    Worksheets(1).Name = "facture " & nom
    .Cells(13, 4) = nom
    .Cells(7, 13) = resident
    '.Cells(13, 12) = mois
    .Cells(14, 4) = "n°" & studio
    .Cells(20, 3) = dej
    .Cells(21, 3) = pot
    .Cells(22, 3) = din
    .Cells(23, 3) = caf
    .Cells(24, 3) = vin

    .Cells(20, 12) = prix_dej
    .Cells(21, 12) = prix_pot
    .Cells(22, 12) = prix_din
    .Cells(23, 12) = prix_caf
    .Cells(24, 12) = prix_vin
    .Cells(20, 13) = dej * prix_dej
    .Cells(21, 13) = pot * prix_pot
    .Cells(22, 13) = din * prix_din
    .Cells(23, 13) = caf * prix_caf
    .Cells(24, 13) = vin * prix_vin

    .Cells(37, 13) = .Cells(20, 13) + .Cells(21, 13) + .Cells(22, 13) + .Cells(23, 13) + .Cells(24, 13)
    .Cells(41, 13) = .Cells(37, 13)

    End With

End If
Next
Application.DisplayAlerts = False
Sheets("Feuil1").Select
    ActiveWindow.SelectedSheets.Delete
Sheets("Feuil2").Select
    ActiveWindow.SelectedSheets.Delete
Sheets("Feuil3").Select
    ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True

End Sub

Merci pour toute aide !

Bonsoir,

Euh... Je te livre ma réflexion. Pas certain que ça te convienne car j'ai pris un peu de liberté par rapport à l'existant :

Selon ma manière de voir les choses, il est parfaitement inutile de créer 75 classeurs avec 75 factures alors qu'il suffit d'archiver (et de figer) chaque mois la feuille Facturation pour rééditer ultérieurement n'importe quelle facture...

La feuille Facture étant un formulaire vierge n'a pas vocation à comporter le lien date : j'ai donc déplacé la référence à la date en cellule A1 de la feuille Facturation de la même manière tu ne devrais pas stocker d'information sur le moyen de règlement sur cette feuille. C'est le rôle de la feuille Facturation de fournir les infos nécessaires (au besoin tu crées une colonne N, O, P... pour chaque moyen de règlement...

Par contre les opérations (multiplication et addition) peuvent bien rester à demeure sur le formulaire vierge. Il n'y a rien à gagner à les faire par VBA.

Aussi je me suis limité à assurer la confection de la facture à chaque fois que tu cliques sur un Total (Colonne M) non nul de la feuille Facturation. Après si tu préfères archiver toutes les factures plutôt qu'une récap mensuelle tu verras bien. Mais je trouve ça un peu dommage.

Nota : J'ai supprimé les lignes vides et les colonnes vides et formatées pour rien dans la feuille facturation : Il en ressort un gain de volume considérable : Si tu formates pour rien 1 millions de ligne et 32000 colonnes, il ne faut pas t'étonner que ton classeur il fasse un peu de cholestérol...

Bonsoir,

C'est parfait !! c'est simple, clair et concis!

Je me suis bien penché sur le script, et je pense l'avoir compris puisque j'ai pu le modifier sans problème en ajoutant des colonnes dans la facturation et ça marche. cf :

Par contre j'ai un message d'erreur si je clique sur les cellules de la colonne nom dans la facturation (colonne B), pourquoi ?

Et effectivement pas besoin d'archivage des factures, pour moi l'interêt c'etait pour l'impression de toutes les factures (si >0€) !

Comment puis je faire pour lancer directement l'impression des factures >O ?

Merci pour le boulot, et c'est vraiment beaucoup plus simple que ce qui existait avant!

Bonsoir,

J'ai modifié l'ensemble pour tenir compte de tes observations.

Utiliser le bouton pour imprimer tout.

Cliquer colonne M pour imprimer une seule facture.

Nota : Actuellement la macro affiche un aperçu avant impression : il faut à chaque fois confirmer pour imprimer vraiment.

Si tu veux lancer directement l'impression sans passer par l'aperçu supprimer Preview:=True dans la macro GenFact

Ok ?

Et bien merci beaucoup pour cette aide.

En plus le script étant assez facile à modifier je vais pouvoir utiliser cette macro pour d'autres fichiers sans problèmes.

Mais j'aurai besoin que tu m'expliques s'il te plaît ce script, pour que je puisse l'adapter au besoin :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim iR%, Z%

If Target.Count = 1 And Target.Column = 13 Then

iR = Target.Row

Z = Target.Value

If Z > 0 Then

GenFact iR

End If

End If

End Sub

Merci bien et bonne soirée.

Vincent

Bonjour,

On appelle cela une macro évènementielle : Exel est capable de détecter une multitude d'évènements.

Par exemple : l'ouverture d'un classeur le changement de feuille, le changement de valeur d'une cellule ou le déplacement du curseur d'une cellule vers l'autre.

A chaque fois qu'un de ces évènements se produit, Excel regarde si par hasard il n'y aurait pas un script lié à cet évènement. Si c'est le cas il exécute le script.

La raison d'être de ce script est donc de s'exécuter à chaque fois que la Sélection change (ce qui peut être fait soit par un clic, soit par action sur le bouton (dont le rôle est précisément de déplacer la sélection) pour imprimer successivement chaque ligne.

On vérifie d'abord que la sélection (Target) couvre une seule cellule de la colonne 13 (M)

If Target.Count = 1 And Target.Column = 13 Then

Si c'est bien le cas on mémorise le numéro de ligne dans une variable

iR = Target.Row

et la valeur de la cellule

Z = Target.Value

Si la valeur de la cellule est >0

If Z > 0 Then...alors on appelle la macro d'impression en lui transmettant le paramètre iR (numéro de ligne)

GenFact iR

Comme ce script s'exécute à chaque fois que la Sélection change en dépit des apparence son maniement n'est peut-être pas aussi aisé qu'il y parait, car il faut bien maitriser la cascade d'évènement qui en découlent et leurs conséquences.

Par exemple précédemment tu avais une erreur quand tu cliquais sur la colonne B parce qu'il est impossible de vérifier si

"client2" est > 0 j'ai donc du modifier le script pour que cette condition (If Z > 0) ne soit évaluée qu'après avoir vérifié qu'on est bien sur la colonne M...

A+

Bonjour,

Ok c'est vraiment intéressant. Je vais me pencher un peu plus la dessus, et ça va m'aider pour d'autres fichiers.

Merci pour les explications.

Vincent

Bonjour le forum,

Je reviens vers vous au sujet de la macro de facturation : j'ai l'impression qu'elle impose un format monétaire à certaines colonnes.

Lorsque je change le format de la colonne pour le format qui me convient, si je ferme et rouvre le fichier, le format monétaire initial revient. J'ai un format de ce type (€7.45) pour les négatif alors que je souhaiterai avoir - 7.75 €.

Je ne comprends pas où cela est codé.

Merci pour toute info à ce sujet

Vincent

Bonjour,

Cela n'est codé nulle part. ça résulte simplement du format de la cellule que tu as choisi :

Le format comptabilité ne supporte pas de nombre négatif (car en comptabilité ça n'existe pas) donc devant cette impossibilité excel essaie de mettre un format mieux adapté.

Il te faut donc choisir parmi l'un des formats proposés ou dans les formats personnalisés. Mais aucun ne supporte l'affichage - € au lieu de 0,00 € en même temps que l'affichage négatif.

Conseil : Utilise l'affichage normal à 2 décimales pour les éléments de détails et garde le format monétaire uniquement pour les Totaux et sous-Totaux.

A+

Rechercher des sujets similaires à "modifier fichier facturation macro"