Bonjour le forum,
je viens vers vous afin de vous soumettre mon problème.
Je suis occupé à créer un formulaire pour faire des devis/factures et j'aimerais que les numéros s'incrémente via un bouton.
En cherchant un peux j'ai trouvé quelque petite choses mais rien de concluant pour résoudre mon soucis.
Pour planter le décors voici le fonctionnement de mon fichier :
Dans 1 page je remplis les données du devis ou de la facture (y compris les infos clients).
J'ai ensuite la possibilité en appuyant sur un bouton de sauvegarder mon document avec comme forme
soit pour un devis : "c:/MIKE/NomClient PrenomClient/devis_NomClient PrenomClient_n°devis Date_Heure.xlsm"
soit pour une facture "c:/MIKE/NomClient PrenomClient/facture_NomClient PrenomClient_n°facture Date_Heure.xlsm"
donc chaque client à son propre répertoire...
Le but de la "formule magique VBA" serais d'aller voir dans les différents répertoire pour trouver le dernier numéro de devis ou de facture et d'incrémenter le numéro sur ma page principale de 1.
Donc par exemple si mon dernier devis porte le numéro 33 et ma dernière facture le numéro 18, quand j'appuye sur le bouton et suivant ce que j'encôde (défini dans une cellule de la même page) le numéros de devis me donne 34 ou le numéro de facture me donne 19.
J'ai déjà une bonne partie du code mais il me donne une erreur au niveau de la ligne " intMaxInvoice = WorksheetFunction.Max(intMaxInvoice, Mid(strFile, Len(strFile) - 16, 3))"
suivant que je mette -16 ou -18 il me donne "run time error 6 : Overflow" ou "run time error 1004 : Unable to get the max property of the WorksheetFunction class"
Je tiens a préciser que je n'ai pas fait ce code mais que je l'ai récupéré et adapté. Je ne suis pas un utilisateur expérimenté en VBA.
Voici le code :
je viens vers vous afin de vous soumettre mon problème.
Je suis occupé à créer un formulaire pour faire des devis/factures et j'aimerais que les numéros s'incrémente via un bouton.
En cherchant un peux j'ai trouvé quelque petite choses mais rien de concluant pour résoudre mon soucis.
Pour planter le décors voici le fonctionnement de mon fichier :
Dans 1 page je remplis les données du devis ou de la facture (y compris les infos clients).
J'ai ensuite la possibilité en appuyant sur un bouton de sauvegarder mon document avec comme forme
soit pour un devis : "c:/MIKE/NomClient PrenomClient/devis_NomClient PrenomClient_n°devis Date_Heure.xlsm"
soit pour une facture "c:/MIKE/NomClient PrenomClient/facture_NomClient PrenomClient_n°facture Date_Heure.xlsm"
donc chaque client à son propre répertoire...
Le but de la "formule magique VBA" serais d'aller voir dans les différents répertoire pour trouver le dernier numéro de devis ou de facture et d'incrémenter le numéro sur ma page principale de 1.
Donc par exemple si mon dernier devis porte le numéro 33 et ma dernière facture le numéro 18, quand j'appuye sur le bouton et suivant ce que j'encôde (défini dans une cellule de la même page) le numéros de devis me donne 34 ou le numéro de facture me donne 19.
J'ai déjà une bonne partie du code mais il me donne une erreur au niveau de la ligne " intMaxInvoice = WorksheetFunction.Max(intMaxInvoice, Mid(strFile, Len(strFile) - 16, 3))"
suivant que je mette -16 ou -18 il me donne "run time error 6 : Overflow" ou "run time error 1004 : Unable to get the max property of the WorksheetFunction class"
Je tiens a préciser que je n'ai pas fait ce code mais que je l'ai récupéré et adapté. Je ne suis pas un utilisateur expérimenté en VBA.
Voici le code :
VB:
Sub GetNextInvoiceNumber()
Dim wb As Workbook
Dim ws As Worksheet
Dim rng As Range
Dim strPath As String
Dim strFolder As String
Dim strClient As String
Dim strFile As String
Dim intMaxInvoice As Integer
Dim strInvoice As String
Dim intYear As Integer
Dim strYear As String
' Définir le chemin d'accès
strPath = "C:\MIKE\"
' Choisir le workbook et le worksheet approprié
Set wb = ThisWorkbook
Set ws = wb.Sheets("Maison type") ' Remplacer par le nom de votre feuille
' Récupérer le nom et le prénom du client depuis votre feuille de calcul
strInvoice = ws.Range("M1").Value ' Remplacer A2 par la cellule contenant le type de document (devis ou facture)
' Récupérer l'année en cours
intYear = Year(Date)
strYear = CStr(intYear)
' Nouveau code pour parcourir tous les sous-dossiers
Dim FSO As New Scripting.FileSystemObject
Dim Folder As Scripting.Folder
Dim Subfolder As Scripting.Folder
' Choisir le dossier parent
Set Folder = FSO.GetFolder(strPath)
' Parcourir tous les sous-dossiers
For Each Subfolder In Folder.SubFolders
strFile = Dir(Subfolder.Path & "\" & strInvoice & "_" & "*" & "_*")
' Parcourir tous les fichiers dans le sous-dossier
Do While strFile <> ""
intMaxInvoice = WorksheetFunction.Max(intMaxInvoice, Mid(strFile, Len(strFile) - 16, 3))
strFile = Dir
Loop
Next Subfolder
ws.Range("C3").Value = strYear & Format(intMaxInvoice + 1, "000")
End Sub