Problème de numérotation automatique de plusieurs feuilles

Bonsoir à tous

Est-ce qu'une bonne âme, serait dispo, car là, je seche ! Je suis encore très novice en VBA

Dans mon classeur, ci joint, j'ai récupéré un vba pour la numérotation automatique.

source du code

Celui-ci fonctionne de telle façon, qu' il va enregistrer le dernier numéro d'une cellule donné dans un fichier texte.

Pour qu'à la prochaine ouverture il puisse récupérer ce numéro et faire +1

Pour info: ce code, à l'origine, n'a été écrit que pour un fichier texte.

Mon soucis est, que je dois faire fonctionner cette dernière étape sur deux fichiers texte!

Après plusieurs modifications et tests et Malgré l'absence de messages d'erreurs par VBA, il ne récupère et utilise les données que d' un fichier texte.

Je pense que mon erreur doit être quelque part ici, dans les premières lignes.

Private Sub Workbook_Open()[attachment=0]Boutique1.zip[/attachment]
Dim chemin_fichier(1, 2) As String: Dim numero As String

chemin_fichier1 = ThisWorkbook.Path & "\numco.txt"
chemin_fichier2 = ThisWorkbook.Path & "\numfa.txt"

Open chemin_fichier1 For Input As #1
Line Input #1, numero
Close #1

Open chemin_fichier2 For Input As #2
Line Input #2, numero
Close #2

Range("H4").Value = numero
End Sub

Après si vous avez d'autres proposition de code "plus simple" que l'utilisation de fichiers externe, je suis preneur

Déjà, merci pour la lecture

16boutique1.zip (435.65 Ko)

Bonjour,

Si tu veux récupérer 2 numéros, il te faut utiliser deux stockages différents donc deux variables. Petite précision qui n'a rien à voir, comme tu fermes le premier fichier avant d'ouvrir le second, tu peux utiliser le même numéro à savoir 1 :

Private Sub Workbook_Open()

    Dim chemin_fichier1 As String
    Dim chemin_fichier2 As String
    Dim numero1 As String
    Dim numero2 As String

    chemin_fichier1 = ThisWorkbook.Path & "\numco.txt"
    chemin_fichier2 = ThisWorkbook.Path & "\numfa.txt"

    Open chemin_fichier1 For Input As #1
        Line Input #1, numero1
    Close #1

    Open chemin_fichier2 For Input As #1
        Line Input #1, numero2
    Close #1

    Range("H4").Value = numero1
    Range("H5").Value = numero2

End Sub

Bonjour Theze,

Je te remercie pour ta contribution

L'appel des deux variables que tu as corrigé, ne me donne qu'un résultat aléatoire!

Parfois il arrive à lire "chemin_fichier1" et incrémente de 1 la cellule "H4" de la feuille "commande" et parfois c'est le "chemin_fichier2" qu'il lit et incrémente "H5" de la feuille "facture" ou bien il ne se focalise que sur un des deux chemins !!

voici le code du "ThisWorkbook" (celui que tu as corrigé )

Private Sub Workbook_Open()

    Dim chemin_fichier1 As String
    Dim chemin_fichier2 As String
    Dim numero1 As String
    Dim numero2 As String

    chemin_fichier1 = ThisWorkbook.Path & "\numco.txt"
    chemin_fichier2 = ThisWorkbook.Path & "\numfa.txt"

    Open chemin_fichier1 For Input As #1
        Line Input #1, numero1
    Close #1

    Open chemin_fichier2 For Input As #1
        Line Input #1, numero2
    Close #1

    Range("H4").Value = numero1
    Range("H5").Value = numero2

End Sub

Ne faudrait-il pas dans cette partie, lui précisez sur qu'elle feuille il doit inscrire le numéro?

Range("H4").Value = numero1
Range("H5").Value = numero2

et ceux qui ce trouve dans un module:

Sub numerotationCOMMANDE()
Dim chemin_fichier1 As String: Dim numero1 As Integer
Dim objet_fichier1: Dim le_fichier1
''voir tuto https://www.bonbache.fr/numerotation-automatisee-de-factures-excel-en-vba-208.html
numero1 = Int(Range("H4").Value) + 1
chemin_fichier1 = ThisWorkbook.Path & "\numco.txt"
Set objet_fichier1 = CreateObject("scripting.filesystemobject")
Set le_fichier1 = objet_fichier1.getfile(chemin_fichier1)
le_fichier1.Attributes = 0

Open chemin_fichier1 For Output As #1
Print #1, Replace(numero1, " ", " ")
Close #1

'le_fichier1.Attributes = 3
End Sub
Sub numerotationFACTURE()
Dim chemin_fichier2 As String: Dim numero2 As Integer
Dim objet_fichier2: Dim le_fichier2
numero2 = Int(Range("H5").Value) + 1
chemin_fichier2 = ThisWorkbook.Path & "\numfa.txt"
Set objet_fichier2 = CreateObject("scripting.filesystemobject")
Set le_fichier2 = objet_fichier2.getfile(chemin_fichier2)
le_fichier2.Attributes = 0

Open chemin_fichier2 For Output As #1
Print #1, Replace(numero2, " ", " ")
Close #1

'le_fichier2.Attributes = 3
End Sub

Pour rappel:

L'enregistrement du numéro fonctionne très bien, il n'y a que la lecture qui pose problème!

Je re-joint mon dossier

13boutique1v2.zip (930.97 Ko)

avec les modifications effectuées.

Perso, je n'utiliserai pas de fichiers externes au classeur mais plutôt des noms invisibles. Une piste. A chaque appel de la sub "numerotationFACTURE()" ou de la sub "numerotationCOMMANDE()" le nom correspondant sera incrémenté de , de cette façon, les numéros seront intrinsèques au classeur donc pas de risque de suppression des fichiers textes par inadvertance :

Sub numerotationFACTURE()

    Dim Retour As Long

    'retour du numéro de facture dans la variable passée en référence (par défaut)
    NumBon Retour, "Facture"
    Worksheets("COMMANDE").Range("H4").Value = Retour

End Sub

Sub numerotationCOMMANDE()

    Dim Retour As Long

    'retour du numéro de commande dans la variable passée en référence (par défaut)
    NumBon Retour, "Commande"

    Worksheets("FACTURE").Range("H5").Value = Retour

End Sub

Sub NumBon(Retour As Long, TypeFich As String)

    Dim Nom As Name
    Dim NumFact As Long
    Dim NomNum As String

    Select Case TypeFich

        Case "Facture": NomNum = "NumFact"
        Case "Commande": NomNum = "NumCom"

    End Select

    On Error Resume Next 'gestion de l'erreur si le nom n'existe pas
    Set Nom = ThisWorkbook.Names(NomNum)

    'si le nom existe...
    If Err.Number = 0 Then

        'récupère sa valeur, l'incrémente de 1 puis stocke sa nouvelle valeur
        Retour = Right(Nom, Len(Nom) - 1)
        Retour = Retour + 1
        ThisWorkbook.Names.Add NomNum, Retour, False

    'si le nom n'existe pas, le crée avec comme valeur par defaut 1
    Else

        Retour = 1
        ThisWorkbook.Names.Add NomNum, 1, False

    End If

End Sub

Sub RendreVisibleouSuppression()

    Dim Nom As Name

    On Error Resume Next
    Set Nom = ThisWorkbook.Names("NumFact")
    Nom.Visible = True 'rend le nom visible dans le gestionnaire
    'Nom.Delete 'suppression du nom

    Set Nom = ThisWorkbook.Names("NumCom")
    Nom.Visible = True 'rend le nom visible dans le gestionnaire
    'Nom.Delete 'suppression du nom

End Sub

Merci, cela fonctionne

j'ai juste du corriger ceci:

NumBon Retour, "Facture"
    Worksheets("COMMANDE").Range("H4").Value = Retour

par ceci:

NumBon Retour, "Facture"
    Worksheets("FACTURE").Range("H4").Value = Retour

et pareil pour le sub "numerotationCOMMANDE"

Rien de bien méchant, sauf si il y avais une raison!?

Mais quand j’enregistrais ma commande il incrémentait la facture et inversement.

Par contre je ne trouve pas la solution pour remettre le compteur à zéro, car chaque année nous repartirons à zéro!

De plus, j'ai fais de test, donc j'en suis déjà a quelques numéros?

j'ai juste du corriger ceci:

et pareil pour le sub "numerotationCOMMANDE"

Oups, je me suis foutu dedans, c'est bien comme ça :

Sub numerotationFACTURE()

    Dim Retour As Long

    'retour du numéro de facture dans la variable passée en référence (par défaut)
    NumBon Retour, "Facture"
    Worksheets("FACTURE").Range("H5").Value = Retour

End Sub

Sub numerotationCOMMANDE()

    Dim Retour As Long

    'retour du numéro de commande dans la variable passée en référence (par défaut)
    NumBon Retour, "Commande"
    Worksheets("COMMANDE").Range("H4").Value = Retour

End Sub

Pas de soucis, ça arrive

Je ne sais pas si tu as lu ma dernière demande?

Par contre je ne trouve pas la solution pour remettre le compteur à zéro, car chaque année nous repartirons à zéro!

De plus, j'ai fais des test, donc j'en suis déjà à quelques numéros?

Serais-tu m’indiquer la démarche?

Par contre je ne trouve pas la solution pour remettre le compteur à zéro, car chaque année nous repartirons à zéro!

De plus, j'ai fais de test, donc j'en suis déjà a quelques numéros?

Dans la sub "RendreVisibleouSuppression()" ci-dessous, tu peux voir que tu peux afficher les deux noms dans la boite de gestionnaire des noms, dans cette boite, tu peux soit laisser les noms et mettre leur valeur à 0 soit les supprimer ou alors les supprimer avec le code ci-dessous. Pour les supprimer (ils seront re-créés au premier appel) tu peux enlever les apostrophes devant "Nom.Delete" et ils seront supprimés :

Sub RendreVisibleouSuppression()

    Dim Nom As Name

    On Error Resume Next
    Set Nom = ThisWorkbook.Names("NumFact")
    Nom.Visible = True 'rend le nom visible dans le gestionnaire
    'Nom.Delete 'suppression du nom

    Set Nom = ThisWorkbook.Names("NumCom")
    Nom.Visible = True 'rend le nom visible dans le gestionnaire
    'Nom.Delete 'suppression du nom

End Sub

Au top, merci bcp

Rechercher des sujets similaires à "probleme numerotation automatique feuilles"