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.
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
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
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