comment crée un numéro de fascture automatique

patrick965

XLDnaute Impliqué
bonjour les ami(e)s
je fais des recherches mais en vain
je recherche a faire sur ma fiche Excel que je joint un numéro de facture qui lorsque j'ouvre une nouvelle feuille vierge un nouveau numéro de facture sera automatiquement inscrit .
j'aimerais que dans ce numéro de facture on y retrouve la date du jour. exemple ; j'ouvre une nouvelle facture et par exemple in est inscrit 140620140001 lorsque j'ouvre une nouvelle le même jour elle inscrira par exemple 140620140002
si par exemple 2 jour passe et Jai une nouvelle facture a crée j'ouvre ma nouvelle page et il sera inscrit 160620140003 .
je veux que la date du jour change mais aussi le numéro a la fin 0001 augmente de 1 a chaque nouvelle ouverture d'une nouvelle facture .
je veut par exemple que lorsque l'année change le numéro 0001 par exemple recommence a 0001

mais....
je veux que lorsque jais enregistrer ma facture dans une fiche client je veux que la date et le numéro ne change plus a chaque jour ou chaque ouverture .


merci beaucoup...
 

Pièces jointes

  • FACTURATION LA SOLUTIONPAT HABITATION TEST.xlsx
    50.6 KB · Affichages: 74

job75

XLDnaute Barbatruc
Re : comment crée un numéro de fascture automatique

Re,

Bonsoir R@chid, désolé de ne pas t'avoir salué plus tôt.

Dans ma dernière solution j'ai complètement zappé le passage à la nouvelle année.

Je verrai ça demain.

Bonne nuit.
 

patrick965

XLDnaute Impliqué
Re : comment crée un numéro de fascture automatique

Bonsoir je vien de tester le toute et je ne cest pas ce que je fais de pas correcter mais exemple jais entrer toute mais donner clien ensuite je les les enregistrer en cliquant sur enregistrer soue et ensuite jais enregistrer dans le dossier du client ensuite lorsque je réouvre une nouvelle feuille de facture cest le meme chiffre de numéro de facture qui y est inscrit et pourtant les macroo son activer ou est mon erreur .

Merci davance
 

job75

XLDnaute Barbatruc
Re : comment crée un numéro de fascture automatique

Bonjour patrick965, le forum,

Pour créer une nouvelle facture il faut simplement :

- rouvrir le fichier modèle

- remplir la facture

- cliquer sur le bouton standard du ruban pour l'enregistrement, pas besoin d'Enregistrer sous.

Cela dit avec le fichier du post #14 l'ouverture du fichier prendra beaucoup trop de temps s'il y a des milliers de factures.

Voici une autre solution qui stocke le numéro de la dernière facture dans un fichier qui se crée automatiquement :

Code:
Sub EnregistrerModifications()
'Alt+F8 pour exécuter la macro (la feuille doit être vierge)
'évite de déclencher la macro Workbook_BeforeSave
Application.EnableEvents = False
Me.Save
Application.EnableEvents = True
End Sub

Private Sub Workbook_Open()
Dim chemin$, nomfich$, n As Variant
Sheets("Facture de service").Activate 'au cas où...
'---date du jour---
[F5] = Date
'---numéro de facture---
chemin = Me.Path & "\" 'chemin du dossier à adapter
nomfich = Dir(chemin & "Numero_Facture.xls*")
If nomfich <> "" Then
  n = ExecuteExcel4Macro("'" & chemin & "[" & nomfich & "]Feuil1'!R1C1")
  n = IIf(Left(n, 4) = CStr(Year(Date)), Val(Mid(n, 9, 4)), 0)
End If
[F4] = "'" & Format(Date, "yyyymmdd") & Format(n + 1, "0000")
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)
Dim nom$, chemin$, wb As Workbook
Cancel = True 'rend impossible l'enregistrement manuel
With Sheets("Facture de service")
  nom = Application.Trim(Mid(.[C10].Value, 5)) 'à partir du 5ème caractère...
  If nom = "" Then
    MsgBox "Le nom n'a pas été entré..."
    .[C10].Select
  Else
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    chemin = Me.Path & "\" 'chemin du dossier à adapter
    '---création du fichier facture---
    Set wb = Workbooks.Add(xlWBATWorksheet)
    .Copy After:=wb.Sheets(1)
    wb.Sheets(1).Delete
    wb.Sheets(1).Name = .[F4]
    On Error Resume Next
    wb.SaveAs chemin & .[F4] & " " & nom 'enregistrement
    wb.Close
    '---mémorisation du numéro de facture---
    Set wb = Workbooks.Add(xlWBATWorksheet)
    .[F4].Copy wb.Sheets(1).[A1]
    wb.Sheets(1).Protect "TOTO" 'mot de passe à adapter
    wb.SaveAs chemin & "Numero_Facture" 'enregistrement
    wb.Close
  End If
End With
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Me.Saved = True 'évite l'invite
End Sub
Lisez bien le code VBA, il faut que vous compreniez ce que fait chaque macro.

La macro EnregistrerModifications permet de faire des modifications sur le fichier modèle vierge.

Fichier joint.

A+
 

Pièces jointes

  • Création d'une facture(1).xls
    108 KB · Affichages: 39
  • Création d'une facture(1).xlsm
    59.9 KB · Affichages: 36
Dernière édition:

job75

XLDnaute Barbatruc
Re : comment crée un numéro de fascture automatique

Re,

Relisant votre post #19 je vois que vous utilisez un dossier par client.

Ce serait peut-être possible mais ce serait bien trop compliqué.

Non, toutes les factures doivent rester dans le même dossier que le fichier modèle.

Ce que l'on peut faire c'est mettre le nom en tête pour que les fichiers se classent par ordre alphabétique des clients :

Code:
Sub EnregistrerModifications()
'Alt+F8 pour exécuter la macro (la feuille doit être vierge)
'évite de déclencher la macro Workbook_BeforeSave
Application.EnableEvents = False
Me.Save
Application.EnableEvents = True
End Sub

Private Sub Workbook_Open()
Dim chemin$, nomfich$, n As Variant
Sheets("Facture de service").Activate 'au cas où...
'---date du jour---
[F5] = Date
'---numéro de facture---
chemin = Me.Path & "\" 'chemin du dossier à adapter
nomfich = Dir(chemin & "0Numero_Facture.xls*")
If nomfich <> "" Then
  n = ExecuteExcel4Macro("'" & chemin & "[" & nomfich & "]Feuil1'!R1C1")
  n = IIf(Left(n, 4) = CStr(Year(Date)), Val(Mid(n, 9, 4)), 0)
End If
[F4] = "'" & Format(Date, "yyyymmdd") & Format(n + 1, "0000")
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)
Dim nom$, chemin$, wb As Workbook
Cancel = True 'rend impossible l'enregistrement manuel
With Sheets("Facture de service")
  nom = Application.Trim(Mid(.[C10].Value, 5)) 'à partir du 5ème caractère...
  nom = Application.Proper(nom) 'majuscule en tête pour le classement
  If nom = "" Then
    MsgBox "Le nom n'a pas été entré..."
    .[C10].Select
  Else
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    chemin = Me.Path & "\" 'chemin du dossier à adapter
    '---création du fichier facture---
    Set wb = Workbooks.Add(xlWBATWorksheet)
    .Copy After:=wb.Sheets(1)
    wb.Sheets(1).Delete
    wb.Sheets(1).Name = .[F4]
    On Error Resume Next
    wb.SaveAs chemin & nom & " " & .[F4] 'enregistrement
    wb.Close
    '---mémorisation du numéro de facture---
    Set wb = Workbooks.Add(xlWBATWorksheet)
    .[F4].Copy wb.Sheets(1).[A1]
    wb.Sheets(1).Protect "TOTO" 'mot de passe à adapter
    wb.SaveAs chemin & "0Numero_Facture" 'enregistrement
    wb.Close
  End If
End With
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Me.Saved = True 'évite l'invite
End Sub
Nota : le 0 devant le nom du fichier permet qu'il soit toujours en tête de la liste des fichiers classés.

Nouveau fichier joint.

A+
 

Pièces jointes

  • 0Création d'une facture(1).xls
    91.5 KB · Affichages: 30
  • 0Création d'une facture(1).xlsm
    53.8 KB · Affichages: 39
Dernière édition:

job75

XLDnaute Barbatruc
Re : comment crée un numéro de fascture automatique

Re,

Bah non ce n'est pas du tout compliqué de créer un sous-dossier pour chaque client :

Code:
Sub EnregistrerModifications()
'Alt+F8 pour exécuter la macro (la feuille doit être vierge)
'évite de déclencher la macro Workbook_BeforeSave
Application.EnableEvents = False
Me.Save
Application.EnableEvents = True
End Sub

Private Sub Workbook_Open()
Dim chemin$, nomfich$, n As Variant
Sheets("Facture de service").Activate 'au cas où...
'---date du jour---
[F5] = Date
'---numéro de facture---
chemin = Me.Path & "\" 'chemin du dossier à adapter
nomfich = Dir(chemin & "Numero_Facture.xls*")
If nomfich <> "" Then
  n = ExecuteExcel4Macro("'" & chemin & "[" & nomfich & "]Feuil1'!R1C1")
  n = IIf(Left(n, 4) = CStr(Year(Date)), Val(Mid(n, 9, 4)), 0)
End If
[F4] = "'" & Format(Date, "yyyymmdd") & Format(n + 1, "0000")
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)
Dim nom$, chemin$, wb As Workbook
Cancel = True 'rend impossible l'enregistrement manuel
With Sheets("Facture de service")
  nom = Application.Trim(Mid(.[C10].Value, 5)) 'à partir du 5ème caractère...
  nom = Application.Proper(nom) 'majuscule en tête pour le classement
  If nom = "" Then
    MsgBox "Le nom n'a pas été entré..."
    .[C10].Select
  Else
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    chemin = Me.Path & "\" 'chemin du dossier à adapter
    '---création du fichier facture---
    Set wb = Workbooks.Add(xlWBATWorksheet)
    .Copy After:=wb.Sheets(1)
    wb.Sheets(1).Delete
    wb.Sheets(1).Name = .[F4]
    On Error Resume Next
    MkDir chemin & nom 'création du sous-dossier s'il n'existe pas
    wb.SaveAs chemin & nom & "\" & .[F4] 'enregistrement
    wb.Close
    '---mémorisation du numéro de facture---
    Set wb = Workbooks.Add(xlWBATWorksheet)
    .[F4].Copy wb.Sheets(1).[A1]
    wb.Sheets(1).Protect "TOTO" 'mot de passe à adapter
    wb.SaveAs chemin & "Numero_Facture" 'enregistrement
    wb.Close
  End If
End With
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Me.Saved = True 'évite l'invite
End Sub
Fichier (2).

A+
 

Pièces jointes

  • Création d'une facture(2).xlsm
    58.1 KB · Affichages: 30
  • Création d'une facture(2).xls
    91.5 KB · Affichages: 25
Dernière édition:

job75

XLDnaute Barbatruc
Re : comment crée un numéro de fascture automatique

Re,

Ah j'oubliais une chose pour que la numérotation fonctionne toujours bien.

Si le fichier "Numero_Facture" est ouvert, il faut d'abord que la macro le ferme :

Code:
Sub EnregistrerModifications()
'Alt+F8 pour exécuter la macro (la feuille doit être vierge)
'évite de déclencher la macro Workbook_BeforeSave
Application.EnableEvents = False
Me.Save
Application.EnableEvents = True
End Sub

Private Sub Workbook_Open()
Dim chemin$, nomfich$, n As Variant
Sheets("Facture de service").Activate 'au cas où...
'---date du jour---
[F5] = Date
'---numéro de facture---
chemin = Me.Path & "\" 'chemin du dossier à adapter
nomfich = Dir(chemin & "Numero_Facture.xls*")
If nomfich <> "" Then
  n = ExecuteExcel4Macro("'" & chemin & "[" & nomfich & "]Feuil1'!R1C1")
  n = IIf(Left(n, 4) = CStr(Year(Date)), Val(Mid(n, 9, 4)), 0)
End If
[F4] = "'" & Format(Date, "yyyymmdd") & Format(n + 1, "0000")
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)
Dim nom$, chemin$, wb As Workbook
Cancel = True 'rend impossible l'enregistrement manuel
With Sheets("Facture de service")
  nom = Application.Trim(Mid(.[C10].Value, 5)) 'à partir du 5ème caractère...
  nom = Application.Proper(nom) 'majuscule en tête pour le classement
  If nom = "" Then
    MsgBox "Le nom n'a pas été entré..."
    .[C10].Select
  Else
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    chemin = Me.Path & "\" 'chemin du dossier à adapter
    '---création du fichier facture---
    Set wb = Workbooks.Add(xlWBATWorksheet)
    .Copy After:=wb.Sheets(1)
    wb.Sheets(1).Delete
    wb.Sheets(1).Name = .[F4]
    On Error Resume Next
    MkDir chemin & nom 'création du sous-dossier s'il n'existe pas
    wb.SaveAs chemin & nom & "\" & .[F4] 'enregistrement
    wb.Close
    '---mémorisation du numéro de facture---
    Workbooks("Numero_Facture").Close False 'si le fichier est ouvert
    Set wb = Workbooks.Add(xlWBATWorksheet)
    .[F4].Copy wb.Sheets(1).[A1]
    wb.Sheets(1).Protect "TOTO" 'mot de passe à adapter
    wb.SaveAs chemin & "Numero_Facture" 'enregistrement
    wb.Close
  End If
End With
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Me.Saved = True 'évite l'invite
End Sub
Fichier (3).

A+
 

Pièces jointes

  • Création d'une facture(3).xls
    91.5 KB · Affichages: 27
  • Création d'une facture(3).xlsm
    58.2 KB · Affichages: 61
Dernière édition:

job75

XLDnaute Barbatruc
Re : comment crée un numéro de fascture automatique

Re,

Pour peaufiner, et toujours pour une bonne numérotation, on peut interdire toute modification :

- du numéro de facture en F4

- du nom en C10 dès que la facture a été enregistrée.

Ceci grâce à la macro Workbook_SheetChange :

Code:
Dim numero$, NomMemo$ 'mémorisation des variables

Sub EnregistrerModifications()
'Alt+F8 pour exécuter la macro (la feuille doit être vierge)
'évite de déclencher la macro Workbook_BeforeSave
Application.EnableEvents = False
Me.Save
Application.EnableEvents = True
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range)
'interdit la modification du numéro de facture et du nom enregistré
Application.EnableEvents = False
With Sheets("Facture de service")
  .[F4] = numero
  If NomMemo <> "" Then .[C10] = NomMemo
End With
  Application.EnableEvents = True
End Sub

Private Sub Workbook_Open()
Dim n As Variant, chemin$, nomfich$
Sheets("Facture de service").Activate 'au cas où...
'---date du jour---
[F5] = Date
'---numéro de facture---
chemin = Me.Path & "\" 'chemin du dossier à adapter
nomfich = Dir(chemin & "Numero_Facture.xls*")
If nomfich <> "" Then
  n = ExecuteExcel4Macro("'" & chemin & "[" & nomfich & "]Feuil1'!R1C1")
  n = IIf(Left(n, 4) = CStr(Year(Date)), Val(Mid(n, 9, 4)), 0)
End If
numero = "'" & Format(Date, "yyyymmdd") & Format(n + 1, "0000")
[F4] = numero
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)
Dim nom$, chemin$, wb As Workbook
Cancel = True 'rend impossible l'enregistrement manuel
With Sheets("Facture de service")
  nom = Application.Trim(Mid(.[C10].Value, 5)) 'à partir du 5ème caractère...
  nom = Application.Proper(nom) 'majuscule en tête pour le classement
  If nom = "" Then
    MsgBox "Le nom n'a pas été entré..."
    .[C10].Select
  Else
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    chemin = Me.Path & "\" 'chemin du dossier à adapter
    '---création du fichier facture---
    Set wb = Workbooks.Add(xlWBATWorksheet)
    .Copy After:=wb.Sheets(1)
    wb.Sheets(1).Delete
    wb.Sheets(1).Name = .[F4]
    On Error Resume Next
    MkDir chemin & nom 'création du sous-dossier s'il n'existe pas
    wb.SaveAs chemin & nom & "\" & .[F4] 'enregistrement
    wb.Close
    NomMemo = .[C10] 'mémorisation
    '---mémorisation du numéro de facture---
    Workbooks("Numero_Facture").Close False 'si le fichier est ouvert
    Set wb = Workbooks.Add(xlWBATWorksheet)
    .[F4].Copy wb.Sheets(1).[A1]
    wb.Sheets(1).Protect "TOTO" 'mot de passe à adapter
    wb.SaveAs chemin & "Numero_Facture" 'enregistrement
    wb.Close
  End If
End With
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Me.Saved = True 'évite l'invite
End Sub
Fichier (4).

A+
 

Pièces jointes

  • Création d'une facture(4).xls
    93.5 KB · Affichages: 27
  • Création d'une facture(4).xlsm
    59.1 KB · Affichages: 35
Dernière édition:

patrick965

XLDnaute Impliqué
Re : comment crée un numéro de fascture automatique

Bonjour job et merci pour tous jais une petite question si je veu modifier les couleur ou apporter des correction a la facture model vierge comment faire pour enregistrer les modification chaque foie que je veu enregistrer ca me dit dentrer le nom meme si je désactive le macro
merci
 

patrick965

XLDnaute Impliqué
Re : comment crée un numéro de fascture automatique

Bonjour je me demandais comment enlever la protection sur le fichier numéro de facture qui ce crée quand en enregistre les factures pour oter la protection il me demande un mot de passe.
Merci
 

patrick965

XLDnaute Impliqué
Re : comment crée un numéro de fascture automatique

SALUT
comment accéder a mes factures après les avoirs enregistrer et fermer si je vais dans le fichier numéro de facture il a les numéro de facture mais quand je clique dessue sa me dit quelle son protéger et par mot de passe comment je fais donc pour accéder a mais facture déjà crée et enregistrer merci.
 

job75

XLDnaute Barbatruc
Re : comment crée un numéro de fascture automatique

Bonjour patrick965,

J'ai vraiment l'impression que vous n'avez pas compris grand-chose.

Bonjour job et merci pour tous jais une petite question si je veu modifier les couleur ou apporter des correction a la facture model vierge comment faire pour enregistrer les modification chaque foie que je veu enregistrer ca me dit dentrer le nom meme si je désactive le macro
merci

Comme je l'ai dit, la macro EnregistrerModifications est faite pour ça.

Bonjour je me demandais comment enlever la protection sur le fichier numéro de facture qui ce crée quand en enregistre les factures pour oter la protection il me demande un mot de passe.
Merci

Vous n'avez qu'à lire le code et les commentaires cher ami, il faut vous fatiguer un peu :rolleyes:

SALUT
comment accéder a mes factures après les avoirs enregistrer et fermer si je vais dans le fichier numéro de facture il a les numéro de facture mais quand je clique dessue sa me dit quelle son protéger et par mot de passe comment je fais donc pour accéder a mais facture déjà crée et enregistrer merci.

Alors ça c'est le pompon, vous ne voyez même pas ce qui est créé :mad:

A+
 

Discussions similaires

Statistiques des forums

Discussions
314 708
Messages
2 112 088
Membres
111 416
dernier inscrit
philipperoy83