Numéro de facture suivant - Actualités

Microsoft Excel propose de nombreux modèles de factures que vous pouvez télécharger. Mais il n'y a pas de moyen intégré pour passer au numéro de facture suivant.

J'ai enregistré cette vidéo montrant comment ajouter quelques lignes de code VBA à votre classeur afin que vous puissiez enregistrer chaque facture dans un nouveau fichier. La macro efface ensuite la facture et ajoute 1 au numéro de facture.

Avec 166K vues et des centaines de commentaires, je constate que les mêmes questions reviennent encore et encore. Il est devenu impossible de demander aux gens de lire 800 commentaires parce que la réponse à leur question a déjà été publiée six fois. Donc - pour les questions courantes, je poste le code ici.

FAQ n ° 1

Pouvez-vous taper le code pour moi car je ne peux pas taper?

Sub NextInvoice() Range("E5").Value = Range("E5").Value + 1 Range("A20:E39").ClearContents End Sub Sub SaveInvoiceWithNewName() Dim NewFN As Variant ' Copy Invoice to a New Workbook ActiveSheet.Copy NewFN = "C:aaaInv" & Range("E5").Value & ".xlsx" ActiveWorkbook.SaveAs NewFN, FileFormat:=xlOpenXMLWorkbook ActiveWorkbook.Close NextInvoice End Sub

FAQ n ° 2

Je souhaite enregistrer la facture au format PDF sur un PC Windows

Remarque

Ce code ne fonctionne que dans les versions Windows d'Excel 2010 ou plus récentes. Il existe un code différent pour un Mac.

Vous devez sélectionner la plage qui contient la facture et faire la mise en page, la zone d'impression, définir la zone d'impression. Si vous sautez cette étape, les boutons utilisés pour exécuter la macro apparaîtront dans votre facture!

Sub SaveInvoiceAsPDFAndClear() Dim NewFN As Variant NewFN = "C:aaaInv" & Range("E5").Value & ".pdf" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=NewFN, _ Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=False Range("E5").Value = Range("E5").Value + 1 Range("A20:E39").ClearContents End Sub

FAQ n ° 3

Je souhaite enregistrer la facture en tant que fichier Excel et PDF dans un dossier différent

Sub SaveInvoiceBothWaysAndClear() Dim NewFN As Variant ' Create the PDF First NewFN = "C:aaaPDFInvoicesInv" & Range("E5").Value & ".pdf" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=NewFN, _ Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=False ' Next, Save the Excel File ActiveSheet.Copy NewFN = "C:aaaInv" & Range("E5").Value & ".xlsx" ActiveWorkbook.SaveAs NewFN, FileFormat:=xlOpenXMLWorkbook ActiveWorkbook.Close ' Increment the invoice number Range("E5").Value = Range("E5").Value + 1 ' Clear out the invoice fields Range("A20:E39").ClearContents End Sub

FAQ # 4

Mon numéro de facture comporte des chiffres et des lettres

Vous devrez adapter le code. Voici quelques exemples. Heidi a un numéro de facture comme SS15001. Quand je regarde ce numéro de facture, c'est un préfixe de deux lettres suivi de 5 chiffres. Le nouveau numéro de facture doit utiliser les touches GAUCHE (, 2) et MID (, 3,5):

Range("E5").Value = Left(Range("E5").Value, 2) & 1 + Mid(Range("E5").Value, 3, 5)

Voici un exemple plus complexe. Le numéro de facture est IN-1234-HA où le IN- signifie Facture. Le 1234 est un nombre séquentiel. Le HA est la première des lettres du nom du client trouvées dans B10.

LeftPart = Left(Range("E5").Value, 3) MidPart = Left(Range("E5").Value, 4, 4) + 1 EndPart = Left(Range("A10").Value, 2) Range("E5").Value = LeftPart & MidPart & EndPart

Vous pouvez simplifier les quatre lignes ci-dessus comme suit:

Range("E5").Value = Left(Range("E5").Value, 3) & Left(Range("E5").Value, 4, 4) + 1 & Left(Range("A10").Value, 2)

FAQ # 5

J'ai d'autres macros dans le classeur (telles que SpellNumber) et j'ai besoin que les macros soient également enregistrées.

Afin de permettre à vos autres macros de s'exécuter afin que la fonction Numbers-to-Words continue de fonctionner, la stratégie est un peu différente. Au lieu de copier uniquement la feuille de facture dans un nouveau classeur et d'utiliser Enregistrer sous, vous (a) vous souviendrez du chemin et du nom de fichier du classeur, (b) utilisez Enregistrer sous pour enregistrer le classeur entier avec le numéro de facture dans le nom, (c ) Supprimez le classeur d'origine. (d) Utilisez Enregistrer sous pour enregistrer le classeur sous le nom d'origine.

Sub SaveInvoiceWithNewName() Dim OrigFN as Variant Dim NewFN As Variant ' Remember the original path and file name OrigFN = ThisWorkbook.FullName NewFN = "C:aaaInv" & Range("E5").Value & ".xlsx" ' Save a copy with the new name ActiveWorkbook.SaveAs NewFN, FileFormat:=xlOpenXMLWorkbook ' Delete the original workbook so you can save without warning On Error Resume Next Kill (OrigFN) On Error Goto 0 ' Save again as the original file name ActiveWorkbook.SaveAs OrigFN, FileFormat:=xlOpenXMLWorkbook NextInvoice End Sub

FAQ # 6

Je dois protéger la feuille de calcul pour que mes employés ne puissent modifier que certaines cellules. Lorsque j'exécute votre macro, j'obtiens "La cellule que vous essayez de modifier est protégée et donc en lecture seule"

Vous pouvez déprotéger la feuille dans la macro, écrire le nouveau numéro de facture, puis protéger la feuille. Cela ne doit être fait que dans la macro NextInvoice. L'autre macro ne modifie aucune cellule. Voici le code si vous utilisez la protection sans mot de passe:

Sub NextInvoice() ActiveSheet.Unprotect Range("E5").Value = Range("E5").Value + 1 Range("A20:E39").ClearContents ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub Here is the code if you have protected the sheet with a password of Tomato. Note that the password appears in this code twice. Change the password to the real password in two places. Sub NextInvoice() ActiveSheet.Unprotect Password:="Tomato" Range("E5").Value = Range("E5").Value + 1 Range("A20:E39").ClearContents ActiveSheet.Protect Password:="Tomato", DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub

FAQ n ° 7

Je ne veux pas que le bouton Enregistrer dans le classeur enregistré

Cela est délicat car le nom de votre forme changera lorsque la feuille de calcul sera déplacée vers un nouveau classeur. Suivez très attentivement ces étapes:

  1. Ouvrez le classeur de macro de facture
  2. Cliquez avec le bouton droit sur l'onglet de la feuille contenant votre facture. Choisissez Déplacer ou Copier.
  3. Dans le menu déroulant Pour réserver:, choisissez Nouveau livre. Cochez la case Créer une copie. Cliquez sur OK. Cette étape 3 simule ActiveSheet.Copy dans le VBA.
  4. Maintenant que vous avez la feuille de calcul de la facture dans un nouveau classeur, cliquez sur la forme à supprimer tout en maintenant la touche Ctrl enfoncée. Ctrl + clic sélectionnera la forme sans exécuter la macro.
  5. Avec la forme sélectionnée, regardez à gauche de la barre de formule. La zone de nom affichera un nom tel que "Rectangle arrondi 1". Construisez très soigneusement une nouvelle ligne de code pour supprimer cette forme comme indiqué ci-dessous juste après ActiveSheet.
Sub SaveInvoiceWithNewName() Dim NewFN As Variant ' Copy Invoice to a New Workbook ActiveSheet.Copy ActiveSheet.Shapes("Rounded Rectangle 1").Delete NewFN = "C:aaaInv" & Range("E5").Value & ".xlsx" ActiveWorkbook.SaveAs NewFN, FileFormat:=xlOpenXMLWorkbook ActiveWorkbook.Close NextInvoice End Sub

Dépannage et messages d'erreur

  1. Les fonctionnalités suivantes ne peuvent pas être enregistrées dans des classeurs sans macro: Projet VB. Réponse: Votre fichier est actuellement enregistré en tant que fichier XLSX. Je suis également ennuyé que Microsoft ait choisi d'utiliser un type de fichier cassé par défaut. Utilisez File, SaveAs et changez le type de fichier en XLSB ou XLSM.
  2. Type Mismatch. Answer: The code expects your invoice number to be a number. If you have SS15001 as an invoice number, you will have to figure out how to adapt your code. See FAQ #4 above.
  3. Compile error Expected line number or label or statement or end of statement on NewFN = “F:RobinusinessPCreceiptsInv” & Range(“H10”).Value & “.xlsx”. Answer: VBA does not like slanted quotation marks (also called Typographers quotes). Type the quotation mark in VBA and you will get "F:RobinusinessPCreceiptsInv" & Range("H10").Value & ".xlsx"
  4. We couldn't find C:UserJelenDocuments" Answer: The file path has to be exact. Are you sure you didn't mean C:UsersJelenDocuments? (Note the "s" at the end of users)
  5. Erreur d'exécution 1004. Document non enregistré. Réponse: Le chemin du fichier doit être exact. Juste avant d'enregistrer le fichier, ajoutez une nouvelle ligne avec MsgBox NewFN. Exécutez le code. Une boîte apparaîtra indiquant le chemin du fichier et le nom du fichier. Assurez-vous qu'il existe un séparateur de chemin entre le chemin et le nom de fichier.
  6. Erreur d'exécution '1004'. La méthode 'SaveAs' de l'objet '_Workbook' a échoué. Réponse: Le FileFormat doit être FileFormat: = xlOpenXMLWorkbook. Lorsque vous le lisez, cela devrait ressembler à "Excel Open XML Workbook". Ce n'est pas un classeur Open XML Ex One. Oui, il est déroutant qu'un chiffre 1 et un L minuscule se ressemblent dans la vidéo. 1l. Changez votre X1OPENXMLWORKBOOK en XLOPENXMLWORKBOOK.

Articles intéressants...