Générer factures

Bonjour a tous , j'ai besoin de votre aide les amis

je veux automatiser la création des factures a partir d'un modèle Feuille"facture" .. les données sont dans la feuille "Base"..

la macro va alors créer des fichiers Excel a partir du modèle pour chaque chargé projet ( Colonne C dans la feuille Base)

Le numéro de facture doit être incrémenter a partir du no 1334

Pour être clair , j'ai rempli le modèle pour la facture du premier chargé projet.

Espérant que vous pouvez m'aider .

Merci Beaucoup

431facture.zip (10.24 Ko)

Bonjour,

je veux automatiser la création des factures a partir d'un modèle Feuille"facture

Comment penses-tu automatiser ? As-tu une idée ?

Ce que je te propose :

  • Une liste déroulante de tes clients en D12 de ta feuille Factures, qui te permet de choisir le client à facturer.
  • A partir de ce choix on importe les données dans ta feuille Facture à mettre en ligne 19 et suivantes
  • Un bouton sur ta feuille Facture pour confirmer l'édition, remise à 0 des données en feuilles facture et incrémentation du numéro de facture

Ce qu'il faudrait savoir

  • Que fasi-tu des données en feuille BAse une fois la facturation effectuée
  • Comment suis-tu ta facturation une fois l'édition effectuée

A te relire

Je te remercie pour ta réponse rapide ..

ton idée est Excellente !! mais la macro doit faire ça automatiquement sans choisir le client a facturer..

tout les données dans Base doivent être facturées Voila!!

As tu un exemple ? je vais l'adapter a mes besoins .. merci encore une fois

Hello,

Au plus simple et pour commencer voici une macro presque toute faite avec l'enregistreur...

À coller dans un module standard

Sub genereFacture()

    Application.ScreenUpdating = False

    Sheets("Facture").Range("M3").Value = Sheets("Facture").Range("M3").Value + 1

    Cells.Copy
    Workbooks.Add
    Cells.Select
    ActiveSheet.Paste
    Range("A1").Select
    ActiveSheet.Name = "Facture n° " & Range("M3").Text
    Application.CutCopyMode = False

    '==========================================================================================
    'Chemin à adapter -> "C:\Users\" & Environ("username") & "\Desktop\"
     ActiveWorkbook.SaveAs Filename:="C:\Users\" & Environ("username") & "\Desktop\" _
        & Range("L5").Text & " - Facture n° " & Range("M3").Text & " du " & Date & ".xlsx"
    '==========================================================================================

    'Si tu veux fermer de suite le classeur créé, ici tu peux mettre...
    'ActiveWorkbook.Close

    Windows("facture.xls").Activate

    Application.ScreenUpdating = True

End Sub

Elle incrémente la cellule M3 (numéro de facture), copie la feuille, colle la feuille dans un nouveau classeur, renomme la feuille et enregistre le classeur sous le nom du chargé de projet avec le numéro et la date.

Le reste, il faudra saisir le données toi-même... Ou tu veux aussi qu'il fasse ça ?

Excellent!! Merci

Mon probleme est vraiment le reste comment ajouter les donnees a facturer pour chaque charge projet :{

Re,

1)

Il y a une RECHERCHEV pour la plage L5:L9 de la feuille "Facture" qui est créée grâce à la cellule D5 de cette même feuille.

La cellule D5 est elle-même liée à la feuille "Liste client".

2)

Il y a en A2:A1000 de la feuille "Base" une formule qui dit :

Si la cellule Bn = la cellule D5 de la feuille "Facture" alors écrire le numéro de ligne sinon ne rien écrire.

Ensuite, dans la feuille "Facture", en C12:L41 il y a une formule qui dit (en gros et par exemple pour C12) :

Si cellules A2 de la feuille "Base" est pleine amener la ligne pleine avec la colonne 3. Colonne 3 qui est la colonne D, 3ème colonne à partir de la première colonne (A) de la feuille "Base"

Donc, tu dois juste choisir un client dans la cellule D5, mais les données dans les feuilles "Base" et "Liste clients" sont à saisir elles !

Espérant t'avoir aidé et que tu comprennes...

290facture.zip (36.29 Ko)

re,

ton idée est Excellente !! mais la macro doit faire ça automatiquement sans choisir le client a facturer..

Vois le fichier joint avec une proposition. Cliue sur le bouton qui se trouve sur ta feuille BASE

Attention qu'il faut savoir ou tu veux sauver le fichier. De base j'ai adapté le lien tel que donné par Hulk.

Le code :

Sub Facturation()
'Macro Dan pour rghanmi le 18/02/2013
Dim i As Integer
Dim dlg As Byte
Dim cli
Dim primaddress As Range
Application.ScreenUpdating = False

Sheets("Facture").Range("M10").Value = Sheets("Facture").Range("M10").Value + 1

With Sheets("Base")

    .Range("B1:B9").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("R1"), Unique:=True
    For i = 2 To .Range("R" & Rows.Count).End(xlUp).Row
        Sheets("Facture").Range("C19:I48").ClearContents
        Sheets("Facture").Range("D12") = .Range("R" & i)
        dlg = Sheets("Facture").Range("C" & Rows.Count).End(xlUp).Row + 1

        Set cli = .Range("B2:B" & Range("B" & Rows.Count).End(xlUp).Row).Find(.Range("R" & i), LookIn:=xlValues)
        If Not cli Is Nothing Then
        premAddress = cli.Address
        Do
            Sheets("Facture").Range("C" & dlg) = .Range("A" & cli.Row)
            Sheets("Facture").Range("D" & dlg) = .Range("F" & cli.Row)
            Sheets("Facture").Range("E" & dlg) = .Range("G" & cli.Row)
            Sheets("Facture").Range("F" & dlg) = .Range("K" & cli.Row)
            Sheets("Facture").Range("G" & dlg) = .Range("M" & cli.Row)
            Sheets("Facture").Range("H" & dlg) = .Range("N" & cli.Row)
            Sheets("Facture").Range("I" & dlg) = .Range("L" & cli.Row)
            dlg = dlg + 1
            Set cli = .Range("B2:B" & Range("B" & Rows.Count).End(xlUp).Row).FindNext(cli)
        Loop While Not cli Is Nothing And cli.Address <> premAddress
        End If

Sheets("Facture").Copy
'==========================================================================================
'Chemin à adapter -> "C:\Users\" & Environ("username") & "\Desktop\"
ActiveWorkbook.SaveAs Filename:="C:\Users\" & Environ("username") & "\Desktop\" _
    & "Facture" & Range("M10").Text & "_" & Date & ".xls"
'==========================================================================================

ActiveWorkbook.Close
    Next
.Columns("R").Delete
End With
Application.ScreenUpdating = True
End Sub

Si ok, clique sur le V vert à coté du bouton EDITER lors de ta réponse pour cloturer le fil

Amicalement

472facture.zip (17.81 Ko)

Wow Super !! mais comment faire pour incrémenter le numéro de la facture !!!

j'ai essayé de mettre Sheets("Facture").Range("M10").Value = Sheets("Facture").Range("M10").Value + 1 dans la boucle .. ça marche pas !!

Le chargé de projet doit être aussi coller dans M12 dans la facture ..

Je vous remercie les amis Thanks Million !!!

Re

remplace le code que je t'ai donné par celui-ci

Sub Facturation()
'Macro Dan pour rghanmi le 18/02/2013
Dim i As Integer
Dim dlg As Byte
Dim cli
Dim primaddress As Range
Application.ScreenUpdating = False

With Sheets("Base")

    .Range("B1:C9").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("R1"), Unique:=True
    For i = 2 To .Range("R" & Rows.Count).End(xlUp).Row
        Sheets("Facture").Range("C19:I48").ClearContents
        Sheets("Facture").Range("D12") = .Range("R" & i)
        Sheets("Facture").Range("L12") = .Range("R" & i).Offset(0, 1)
        dlg = Sheets("Facture").Range("C" & Rows.Count).End(xlUp).Row + 1

        Set cli = .Range("B2:B" & Range("B" & Rows.Count).End(xlUp).Row).Find(.Range("R" & i), LookIn:=xlValues)
        If Not cli Is Nothing Then
        premAddress = cli.Address
        Do
            Sheets("Facture").Range("C" & dlg) = .Range("A" & cli.Row)
            Sheets("Facture").Range("D" & dlg) = .Range("F" & cli.Row)
            Sheets("Facture").Range("E" & dlg) = .Range("G" & cli.Row)
            Sheets("Facture").Range("F" & dlg) = .Range("K" & cli.Row)
            Sheets("Facture").Range("G" & dlg) = .Range("M" & cli.Row)
            Sheets("Facture").Range("H" & dlg) = .Range("N" & cli.Row)
            Sheets("Facture").Range("I" & dlg) = .Range("L" & cli.Row)
            dlg = dlg + 1
            Set cli = .Range("B2:B" & Range("B" & Rows.Count).End(xlUp).Row).FindNext(cli)
        Loop While Not cli Is Nothing And cli.Address <> premAddress
        End If

Sheets("Facture").Copy

'==========================================================================================
'Chemin à adapter -> "C:\Users\" & Environ("username") & "\Desktop\"
ActiveWorkbook.SaveAs Filename:="C:\Users\" & Environ("username") & "\Desktop\" _
    & "Facture" & Range("M10").Text & "_" & Date & ".xls"
'==========================================================================================

ActiveWorkbook.Close
Sheets("Facture").Range("M10").Value = Sheets("Facture").Range("M10").Value + 1
    Next
.Columns("R:S").Delete
End With
Application.ScreenUpdating = True
End Sub

Au fait évite de mettre des couleurs dans des cellules qui ne comporte pas de données. cela ne fait qu'alourdir le fichier inutilement. Je parle bien entendu de la couleur jaune dans ta feuille base qui est dans toute ta colonne C.

Si ok oublie pas de cloturer..

Amicalement

Génial ... Vous êtes des génies Merci !!!

Une seule chose me reste a voir lorsque le nombre de lignes dans la facture dépasses la ligne 48

La macro doit prendre le reste et les mettre dans une nouvelle facture ( le même numéro ou un nouveau numéro ce n'est pas grave)

J'ai essai mais je n'arrive pas .. ça sera la dernière chose que je demande de l'aide SVP..

Merci mes amis Merci Excel Pratique

re,

Hum, il va falloir revoir le code là...

Soit tu refais quelques lignes plus bas un modèle facture en dessous du modèle existant, soit on crée une deuxième feuille en cours de code pour continuer.

Quelques questions :

  • A quoi sert la lettre A devant le numéro que tu attribues à ta facture.
  • si tu as deux factures, le total tu le vois comment ? Par facture ou global sur la dernière facture ?

Pour le numéro de facture, si tu as deux documents de facture, il faudra un indice dans le numéro puisqu'au final tu auras deux fichiers. PAr contre si tu ne veux qu'un fichier de sauvegarde, il faudra faire toute ta facture sur une seule feuille avec l'option de créer un deuxième modèle de facture en dessous de l'existant

Merci de me donner tes infos sur le sujet

Amicalement

Merci pour ta reponse rapide.

Nos clients exigent le A dans les factures alors cest juste pour la forme pas plus..

Si jai 2 ou plus factures ilya aura un total et numero de facture dans chaque facture...

Merci pour ton aide

ton aide sera vraiment apprécie .. Merci

c'est quoi la plus simple idée pour toi ? merci

re

Je vais y réfléchir mais il me semble que le plus simple serait d'avoir tout sur la même feuille.

Par exemple le nouveau modèle de facture quelques lignes en dessous du premier. Cela permettrait d'avoir facilement un seul fichier lors de la sauvegarde.

Je reviens vers toi dès que j'ai terminé d'adapter le code si tu es d'accord sur cette proposition

Amicalement

Je suis d accords bien sur

Mais serait il possible de faire un truc pour facturer meme si les lignes excedent le 2eme modele en dessous..

Un code qui gere un nombre infini des lignes a facturer...

Merci pour ton aide

Re,

Ok s'il faut tenir compte de plusieurs factures éventuelles, je vais adapter ton code pour le faire

Je reviens vers toi sous peu

Amicalement

Merci

as tu des nouvelles ? je te remercie énormément!

Rechercher des sujets similaires à "generer factures"