Problème lister les fichiers pour numérotation suivante

Résolu/Fermé
hellomargo Messages postés 49 Date d'inscription lundi 20 avril 2020 Statut Membre Dernière intervention 13 février 2023 - 24 oct. 2021 à 15:39
hellomargo Messages postés 49 Date d'inscription lundi 20 avril 2020 Statut Membre Dernière intervention 13 février 2023 - 26 oct. 2021 à 23:33
Bonjour la communauté,
j'utilise un code qui me permet de me donner le numéro de la prochaine facture
exemple: dernière facture 000092 donc dans la cellule C3 de ma feuille 000093, là pas de p
mais je suis à la facture 100 soit 000100 et là le code ne marche plus
en revanche si je remplace 000100 par 0000100 ( soit un zéro de plus) j'ai bien en C3 0000101
alors que je souhaite 000101
une idée, merci a vous

le code en question
Sub listerLesFichiers()
Dim chemin As String
Dim nb As Integer
nb = 0
' On a besoin du chemin absolu du dossier
' Doit se terminer par \
chemin = "C:\Users\moi\Documents\factures\"
' La fonction Dir(chemin, mode) permet de parcourir un dossier
' Ici je rajoute à mon chemin "*.pdf",
' pour ne retrouver que mes fichiers PDF
' vbNormal permet de ne récupérer que des fichiers,
' vbDirectory récupère tout (dossiers et fichiers)
monFichier = Dir(chemin & "*.pdf", vbNormal)
' monFichier n'a récupéré que le premier élément trouvé
' j'ai donc besoin d'un boucle pour les retrouver un à un
Do While monFichier <> ""
extraireValeursNumeriques_DansChaine
If nb < facture Then ' le plus grand nombre
nb = facture
End If
' Permet de passer au fichier suivant
monFichier = Dir
Loop
Sheets("renseignement client").Range("C23").Value = nb + 1
Sheets("renseignement client").Range("C23").NumberFormat = "000000"



End Sub

Sub extraireValeursNumeriques_DansChaine()
Dim i As Byte, nb As Byte
Dim Cible As String, Resultat As String
Dim nombre As Double
Cible = monFichier
'Pour que fonction Val puisse reconnaitre les décimales: Remplacement des
'virgules par des points
Cible = Replace(Cible, ",", ".")
'Pour gérer deux nombres qui se suivent: remplacement des espaces
'par un caractère Alpha
Cible = Replace(Cible, " ", "x")
For i = 1 To Len(Cible)
If IsNumeric(Mid(Cible, i, 1)) Then
nombre = Val(Mid(Cible, i, Len(Cible) - i + 1))
nb = nb + 1
Resultat = nombre
i = i + Len(Str(nombre)) - 1
End If
Next
facture = Resultat
End Sub


Configuration: Windows / Chrome 94.0.4606.81

6 réponses

hellomargo Messages postés 49 Date d'inscription lundi 20 avril 2020 Statut Membre Dernière intervention 13 février 2023 1
24 oct. 2021 à 20:40
personne ?
0
yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 1 538
24 oct. 2021 à 21:10
"cellule C3": es-tu certain?
"pas de p": quelle langue utilises-tu?

tu nous montres un code qui me semble mal écrit, et tu nous expliques qu'il ne fonctionne pas.
tu ne nous expliques pas ce que le code devrait faire: penses-tu que nous pouvons le deviner?
0
hellomargo Messages postés 49 Date d'inscription lundi 20 avril 2020 Statut Membre Dernière intervention 13 février 2023 1
24 oct. 2021 à 21:24
bonjour yg-be,
mea culpa je voulais dire C23
pas de p pour moi c "c'est" français, certes familier mais Français.
En ce qui concerne le code, il marchait jusqu'à 100.
Le code cherche le dernier numéro de facture et ajoute 1 ce qui me donne le numéro de la dernière facture.
Pour 99 la facture est nommée 000099
Jusque là tout va bien, mais pour la 100 je devrais avoir 000100 mais la le code ne marche plus
j'espère être clair mais c'est difficile a expliquer...
0
yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 1 538
24 oct. 2021 à 21:31
que signifie "pas de p"? "p" est-il un mot français?

"le code cherche le dernier numéro de facture". Comme ton code ne fonctionne pas, explique-nous où se trouve ce dernier numéro de facture.

où se trouve la déclaration de
facture
? as-tu bien
option explicit
en début de module?

si tu executes ton code en pas à pas, où diverge-t-il du résultat attendu?
0
hellomargo Messages postés 49 Date d'inscription lundi 20 avril 2020 Statut Membre Dernière intervention 13 février 2023 1
Modifié le 24 oct. 2021 à 22:08
re,
le code est dans une macro
ensuite dans la feuille thisworkbook j'ai "listerLesFichiers"
le code marche très bien sauf que pour la facture 100 dans le dossier facture est nommée 0000100,
je souhaiterais qu'il ce nomme 000100 soit un zéro de moins
mais le faite de mettre un zéro de moins le code ne fonctionne plus
C23 ne prend en compte que la numérotation avec quatre zéro


Sinon facture est le nom du fichier ou sont stocké les factures en PDF
0
yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 1 538
25 oct. 2021 à 09:06
où se trouve la déclaration de
facture
? as-tu bien
option explicit
en début de module?

si tu executes ton code en pas à pas, où diverge-t-il du résultat attendu?
0
hellomargo Messages postés 49 Date d'inscription lundi 20 avril 2020 Statut Membre Dernière intervention 13 février 2023 1
25 oct. 2021 à 22:40
bonjour a tous, bonjour yg_be
le plus simple et plus compréhensible le fichier en pièce jointe:

https://www.transfernow.net/en/dltransfer?utm_source=20211025eUVzT65F
0
yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 1 538
26 oct. 2021 à 08:58
suggestion:
Option Explicit
Sub listerLesFichiers()
Dim chemin As String
Dim nb As Long, facture As Long, monFichier As String, NomFichier As String
nb = 0
' On a besoin du chemin absolu du dossier
' Doit se terminer par \
chemin = ThisWorkbook.Path + "\"
' La fonction Dir(chemin, mode) permet de parcourir un dossier
' Ici je rajoute à mon chemin "*.pdf",
' pour ne retrouver que mes fichiers PDF
' vbNormal permet de ne récupérer que des fichiers,
' vbDirectory récupère tout (dossiers et fichiers)
monFichier = Dir(chemin & "*.pdf", vbNormal)
' monFichier n'a récupéré que le premier élément trouvé
' j'ai donc besoin d'un boucle pour les retrouver un à un
Do While monFichier <> ""
    NomFichier = Left(monFichier, InStr(monFichier, ".") - 1)
    facture = Val(NomFichier)
    If nb < facture Then ' le plus grand nombre
        nb = facture
    End If
    ' Permet de passer au fichier suivant
    monFichier = Dir
Loop
Sheets("TEST").Range("A1").Value = nb + 1
Sheets("TEST").Range("A1").NumberFormat = "000000"
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
hellomargo Messages postés 49 Date d'inscription lundi 20 avril 2020 Statut Membre Dernière intervention 13 février 2023 1
26 oct. 2021 à 21:18
bonjour a tous, bonjour yg_be
le souci c'est que les factures ce nomment:
"facture 000101 solde travaux madame dupont paris"
et non 000101
Désolé j'avais oublié ce détail...
0
yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 1 538
26 oct. 2021 à 23:02
réfléchi aux autres détails que tu as choisi de ne pas communiquer.
0
yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 1 538 > yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024
26 oct. 2021 à 23:06
Option Explicit
Sub listerLesFichiers()
Dim chemin As String
Dim nb As Long, facture As Long, monFichier As String, NomFichier As String, morc
nb = 0
' On a besoin du chemin absolu du dossier
' Doit se terminer par \
chemin = ThisWorkbook.Path + "\"
' La fonction Dir(chemin, mode) permet de parcourir un dossier
' Ici je rajoute à mon chemin "*.pdf",
' pour ne retrouver que mes fichiers PDF
' vbNormal permet de ne récupérer que des fichiers,
' vbDirectory récupère tout (dossiers et fichiers)
monFichier = Dir(chemin & "*.pdf", vbNormal)
' monFichier n'a récupéré que le premier élément trouvé
' j'ai donc besoin d'un boucle pour les retrouver un à un
Do While monFichier <> ""
    NomFichier = Left(monFichier, InStr(monFichier, ".") - 1)
    For Each morc In Split(NomFichier, " ")
        facture = Val(morc)
        If nb < facture Then ' le plus grand nombre
            nb = facture
        End If
    Next morc
    ' Permet de passer au fichier suivant
    monFichier = Dir
Loop
Sheets("TEST").Range("A1").Value = nb + 1
Sheets("TEST").Range("A1").NumberFormat = "000000"
End Sub
0
hellomargo Messages postés 49 Date d'inscription lundi 20 avril 2020 Statut Membre Dernière intervention 13 février 2023 1
26 oct. 2021 à 23:33
MERCI yg_be
a première vue ça a l'air de marcher
je passe en résolu et te souhaite une bonne soirée
0