Ouvrir la dernière facture(+1) en ouvrant le model

  • Initiateur de la discussion Initiateur de la discussion besoin d'aide en excel
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

B

besoin d'aide en excel

Guest
Bonjour,

J'ai réalisé une facture sous excel avec un peut de VBA afin que chaque facture se voit attribuer un numéro de facture automatiquement. dès que je clic sur un boutton ma facture s'enregistre (dans le même dossier que le model) et je passe à la facture suivante à remplir. J'aimerais lorsque j'ouvre ma facture intitulé "model", que le fichier qui souvre soit automatiquement ma dernière facture enregistrée (+1). Exemple: dans mon dossier facture la dernière facture enregistré s'appel "Facture 123". j'aimerais qu lorsque je clic sur mon fichier "model" que se soit la "Facture 124" qui s'ouvre.

Merci d'avance car je suis complètement perdu.
 
Re : Ouvrir la dernière facture(+1) en ouvrant le model

bonjour besoin d'aide en excel,

voici un début de piste :
Code:
Dim pathDossierFactures As String, noFactureMax As Integer, tmpNoFacture As String, myFso As Object, dossierFactures As Object, fichier As Object

'définir le chemin du dossier contenant les factures
pathDossierFactures = ThisWorkbook.Path

'récupérer le dossier de factures
Set myFso = CreateObject("Scripting.FileSystemObject")
Set dossierFactures = myFso.GetFolder(pathDossierFactures)

noFactureMax = 0
'bouler sur tous les fichiers du dossier
For Each fichier In dossierFactures.Files
    'si le fichier commence par "Facture " et fini par ".xls"
    If UCase(fichier.Name) Like "FACTURE *.XLS" Then
        'récupérer le nom du fichier épuré de "Facture " et ".xls"
        tmpNoFacture = Replace(Replace(UCase(fichier.Name), "FACTURE ", ""), ".XLS", "")
        'si le reste du nom du fichier est numérique
        If IsNumeric(tmpNoFacture) Then
            noFactureMax = IIf(noFactureMax > Int(tmpNoFacture), noFactureMax, Int(tmpNoFacture))
        End If
    End If
Next fichier

'afficher le numéro de la dernière facture
MsgBox "numéro de la dernière facture : " & noFactureMax

'détruire les objets
Set myFso = Nothing: Set dossierFactures = Nothing

ce code récupère le numéro maxi des fichiers "Facture numéro.xls" (contenus dans le même dossier que le classeur contenant cette macro) et affiche le résultat.

a+
 
Re : Ouvrir la dernière facture(+1) en ouvrant le model

Bonjour le fil,
Si tu effectuais un suivi de ta facturation (listing), tu retrouverais facilement tes petits et de fait le dernier numéro enregistré.Il faudrait l'intégrer dans ta macro d'enregistrement.
A+
kjin
 
Re : Ouvrir la dernière facture(+1) en ouvrant le model

Bonjour nromain,
en faite je n'y connais rien en excel ni en programmation. J'ai copier ton code dans mon vba et le seul changement que j'ai pu voir c'est qu'il y a une fenêtre qui s'ouvre en plus. Lorsque je clic sur le bouton une nouvelle fenêtre vba apparait en disant "numéro de la dernière facture : 0" alors que j'ai plusieurs factures qui existe déjà.

Voici ci-dessous mon code VBA sur lequel j'ai rajouté le tien. si tu peux m'éclairer ce serais cool. J'y ai apporté des modifications, j'ai renomé au format .XLSM et j'ai modifié noFactureMax = Range("B10"). Range ("B10") est la cellule ou se trouve le numéro de facture.


Merci d'avance

Sub effacertout()
'
' effacertout Macro
'

Dim pathDossierFactures As String, noFactureMax As Integer, tmpNoFacture As String, myFso As Object, dossierFactures As Object, fichier As Object

'définir le chemin du dossier contenant les factures
pathDossierFactures = ThisWorkbook.Path

'récupérer le dossier de factures
Set myFso = CreateObject("Scripting.FileSystemObject")
Set dossierFactures = myFso.GetFolder(pathDossierFactures)

noFactureMax = Range("B10")
'bouler sur tous les fichiers du dossier
For Each fichier In dossierFactures.Files
'si le fichier commence par "Facture " et fini par ".xls"
If UCase(fichier.Name) Like "FACTURE *.XLSM" Then
'récupérer le nom du fichier épuré de "Facture " et ".xls"
tmpNoFacture = Replace(Replace(UCase(fichier.Name), "FACTURE ", ""), ".XLSM", "")
'si le reste du nom du fichier est numérique
If IsNumeric(tmpNoFacture) Then
noFactureMax = IIf(noFactureMax > Int(tmpNoFacture), noFactureMax, Int(tmpNoFacture))
End If
End If
Next fichier

'afficher le numéro de la dernière facture
MsgBox "numéro de la dernière facture : " & noFactureMax

'détruire les objets
Set myFso = Nothing: Set dossierFactures = Nothing

If MsgBox("Voulez vous enregistrer la facture N°" & Range("B10") & " ?", vbQuestion + vbYesNo, "Enregistrement de la facture") = vbNo Then _
Exit Sub

Dim var As String
var = "C:\Documents and Settings\Mes documents\"
ActiveWorkbook.SaveAs ActiveWorkbook.Path & "\facture " & Range("B10")
'
Range("B9,A14:A24,E14:E24").ClearContents
Range("B10") = Range("B10") + 1
Range("B9").Select
End Sub
 
Re : Ouvrir la dernière facture(+1) en ouvrant le model

Bonsoir besoin d'aide en excel, mromain, kjin,

Puis-je me permettre une simple suggestion ?

Pour éviter de tripatouiller en VBA, pourquoi ne pas incrémenter une cellule (cachée de préférence) dans la feuille modèle, et d'enregistrer ce modèle à chaque nouvelle facture ?

Me suis-je bien fait compris ?

Cordialement à tous.
 
Re : Ouvrir la dernière facture(+1) en ouvrant le model

bonjour à tous
voilà ce que voulait dire papounet
Code:
Private Sub Worksheet_Activate()
Range("a1").Value = Range("a1").Value + 1
End Sub
à chaque ouverture de la feuille 1 la cellule a1 augmente de 1
à toi d'adapter
 
Re : Ouvrir la dernière facture(+1) en ouvrant le model

Bonjour Pascal21,

J'ai intégré ton code à mon VBA en modifiant
Range("a1").Value = Range("a1").Value + 1
par
Range("B10").Value = Range("B10").Value + 1

Seulement j'ai une fenêtre qui apparait au moment de la compilation qui dit "Erreur de compilation : End Sub attendu" de dois-je faire.
 
Re : Ouvrir la dernière facture(+1) en ouvrant le model

bonjour,
Il semble que tu ignores les réponses qui ne te satisfont peut-être pas mais qui ont le mérite d'exister (cf #3)
Je te recommande de lire [thread=32841]la charte[/thread] avant de poster car un bout de code sorti de son contexte ne veut pas dire grand chose
En outre, je te signale que dans ton code initial, tu incrémentais déjà ton numéro de facture !
Pour ton pb, il semble que tu aies rajouté des lignes après le "End Sub"
A+
kjin
 
Re : Ouvrir la dernière facture(+1) en ouvrant le model

Bonjour Kjin,

J'ai bien lu la charte, le seul problème est que je suis complètement perdu au milieu de tout ça. Je passe mes journées à m'arracher les cheveux dessus et donc plus ça va moins ça va. Dans mon code initial j'incrémente mon numéro de facture afin de passer d'une facture à la suivante lorsque je les saisis en cliquant sur un boutton. Tu pense que ces deux incrémentations rentrent en conflit ? Pour le "End Sub" j'ai essayer de le supprimer car j'en ai déjà un ou même de le mettre en doublon à la fin de mon code mais rien n'y fait. Je ne sais plus quoi faire!
 
Re : Ouvrir la dernière facture(+1) en ouvrant le model

Je ne sais pas si ça a une importance mais pour info je suis sur excel 2007

Voici ci-dessous ma macro complète,


Sub effacertout()
'
' effacertout Macro
'

Private Sub Worksheet_Activate()
Range("B10").Value = Range("B10").Value + 1


Dim pathDossierFactures As String, noFactureMax As Integer, tmpNoFacture As String, myFso As Object, dossierFactures As Object, fichier As Object

'définir le chemin du dossier contenant les factures
pathDossierFactures = ThisWorkbook.Path

'récupérer le dossier de factures
Set myFso = CreateObject("Scripting.FileSystemObject")
Set dossierFactures = myFso.GetFolder(pathDossierFactures)

noFactureMax = Range("B10")
'bouler sur tous les fichiers du dossier
For Each fichier In dossierFactures.Files
'si le fichier commence par "Facture " et fini par ".xls"
If UCase(fichier.Name) Like "FACTURE *.XLSM" Then
'récupérer le nom du fichier épuré de "Facture " et ".xls"
tmpNoFacture = Replace(Replace(UCase(fichier.Name), "FACTURE ", ""), ".XLSM", "")
'si le reste du nom du fichier est numérique
If IsNumeric(tmpNoFacture) Then
noFactureMax = IIf(noFactureMax > Int(tmpNoFacture), noFactureMax, Int(tmpNoFacture))
End If
End If
Next fichier

'afficher le numéro de la dernière facture
MsgBox "numéro de la dernière facture : " & noFactureMax

'détruire les objets
Set myFso = Nothing: Set dossierFactures = Nothing

If MsgBox("Voulez vous enregistrer la facture N°" & Range("B10") & " ?", vbQuestion + vbYesNo, "Enregistrement de la facture") = vbNo Then _
Exit Sub

Dim var As String
var = "C:\Documents and Settings\Mes documents\"
ActiveWorkbook.SaveAs ActiveWorkbook.Path & "\facture " & Range("B10")
'
Range("B9,A14:A24,E14:E24").ClearContents
Range("B10") = Range("B10") + 1
Range("B9").Select
End Sub
 
Re : Ouvrir la dernière facture(+1) en ouvrant le model

Re, bonsoir JCGL 🙂
A défaut de fichier donc, à condition que la facture soit sur une seule feuille...
dans un module standard et à associer à un bouton
Code:
Sub EnregistrerEtIncrémenter()
Dim RepDest As String
Application.ScreenUpdating = False
RepDest = ActiveWorkbook.Path 'repertoire de destination à adapter
If MsgBox("Voulez vous enregistrer la facture N°" & Range("B10") & " ?", vbQuestion + vbYesNo, "Enregistrement de la facture") = vbNo Then
Exit Sub
End If
Sheets("Facture").Copy 'remplace facture par le nom de ta feuille
ActiveSheet.Shapes("MonBouton").Delete 'supprime le bouton sur la copie
ActiveWorkbook.SaveAs RepDest & "\facture" & Range("B10") & ".xlsm"
ActiveWorkbook.Close
Range("B9,A14:A24,E14:E24").ClearContents
Range("B10") = Range("B10") + 1
Application.ScreenUpdating = True

End Sub
Enregistrer le fichier avant utilisation
A+
kjin
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.
Retour