Générer un numéro automatique de commande Excel

Bonjour,

Voilà la problématique :

J'ai un fichier Excel qui est un bon de commande pour des fournitures de bureaux. Le Service informatique envoie ce bon de commande rempli (avec les fournitures dont ils ont besoin) au magasin (lieux de stockage), par mail.

Il y a un fichier "vierge" qui est réutilisé à chaque fois, et pour chaque commande, le service informatique fait "enregistrer sous", crée le bon de commande avec les fournitures demandées et envoie la copie au magasin.

Le responsable du Service Informatique me demande donc que chaque commande ait un numéro automatique. Il faudrait alors que chaque fois qu'un opérateur ouvre le fichier, il y ait un nouveau numéro de commande sur le bon.

Auriez-vous une solution ?

Merci d'avance de votre aide !

Voila le fichier pour mieux comprendre :

107fichier-forum.xlsx (11.66 Ko)

Bonjour,

Il faudrait un fichier d'archive avec l'ensemble des n° crées (ou au moins le dernier).

Dans le fichier d'édition du bon de commande, une macro évenementielle avant enregistrement irait chercher ce dernier numéro et l'incrémenterai d'une unité.

Une proposition à mettre dans le module "ThisWorkbook" de VBA :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

If SaveAsUI = True Then 'Si on ouvre la boite de dialogue "enregistrer sous"
    Workbooks.Open Filename:=ThisWorkbook.Path & "\ListingNo.xlsx" 'Ouverture du fichier archivant les n° de commande
    With ActiveWorkbook
        ThisWorkbook.Sheets(1).Range("H1") = Application.Max(.Sheets(1).Range("A:A")) + 1 'Recherche du N° max
        .Sheets(1).Range("A" & Rows.Count).End(xlUp).Offset(1, 0) = ThisWorkbook.Sheets(1).Range("H1") 'Ajout du nouveau N° dans l'historique
        .Close True 'Ferme le fichier d'archive
    End With
End If

End Sub
56fichier-forum.xlsm (18.39 Ko)

PS : si des erreurs surviennent à cause de l'utilisation de la boite de dialogue "enregistrer sous" sans création d'un nouveau bon de commande, il faudra peut être créer une macro dédiée, déclenchée à partir d'un bouton.

Désolée de la réponse tardive, j'ai eu un imprévu...

Merci pour ton code!

Quand tu parles d'un fichier d'archives, est-ce que ça peut être une feuille dans le même fichier Excel de la commande ?

Désolée de la réponse tardive, j'ai eu un imprévu...

Merci pour ton code!

Quand tu parles d'un fichier d'archives, est-ce que ça peut être une feuille dans le même fichier Excel de la commande ?

Bonjour,

Oui, je te propose un autre code.

Nouveau code (dans un module VBA standard cette fois) :

Sub ExporterBonCommande()

Dim NoCom As Long, WBN As Workbook

With ThisWorkbook.Worksheets(1) 'Tout objet qui commence par "." se rapporte à la 1ère feuille
    NoCom = Application.Max(Sheets("ListingNo").Range("A:A")) + 1 'Recherche du N° max
    Sheets("ListingNo").Range("A" & Rows.Count).End(xlUp).Offset(1, 0) = NoCom 'Ajout du nouveau N° dans l'historique
    .Range("H1") = NoCom 'Ecrit le nouveau n° de commande
    Set WBN = Workbooks.Add 'Crée un fichier vierge
    .Cells.Copy WBN.Sheets(1).Range("A1") 'Copie la feuille bon de commande
    WBN.SaveAs Filename:="BonCommande" & NoCom, FileFormat:=xlWorkbookNormal 'Enregistre le fichier dans le même repertoire
    WBN.Close 'Ferme le fichier
    ThisWorkbook.Save 'Sauvegarde les modifications de ce fichier
End With

End Sub

Le fichier :

Merci beaucoup,

J'ai modifié un peu ton code

Et j'ai mis a chaque fois qu'on ouvrait le fichier ca mettait un nouveau numéro de commande.

Maintenant je voudrais réinitialiser les données dès qu'on ferme le fichier, tu sais comment on fait ?

Maintenant je voudrais réinitialiser les données dès qu'on ferme le fichier, tu sais comment on fait ?

Qu'entend tu par "réinitialiser" ?

Je veux simplement dire effacer les données de la colonne de B10 à B53 à chaque fois qu'on ferme le document

Parce que j'ai mis ca :

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Feuil1.Range("B10:B53").Clear

End Sub

Mais ca m'efface les données du fichier enregistré sous et du fichier de base ^^

Bonjour toutes et tous

coucou Pedro22 merci à toi

@Leabstrn

en essayant ainsi:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
With Sheets("Feuil1")
.Range("B10:B53").ClearContents
End With
End Sub

crdlt,

André

Merci beaucoup de votre aide,

Grâce à vous ma macro fonctionne bien !

Rechercher des sujets similaires à "generer numero automatique commande"