Numéro suivant sous excel 2019

Résolu/Fermé
Signaler
Messages postés
42
Date d'inscription
lundi 20 avril 2020
Statut
Membre
Dernière intervention
26 octobre 2021
-
Messages postés
42
Date d'inscription
lundi 20 avril 2020
Statut
Membre
Dernière intervention
26 octobre 2021
-
Bonjour a tous,
je cherche le moyen de renseigner le numéro de la prochaine facture dans une cellule a partir d'un dossier existant nommé facture
les factures ce présentent sous la forme 000012,000013,000014 ETC....

merci


Configuration: Windows / Chrome 86.0.4240.193

12 réponses

Messages postés
16575
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
8 décembre 2021
782
Messages postés
42
Date d'inscription
lundi 20 avril 2020
Statut
Membre
Dernière intervention
26 octobre 2021

merci whismeril pour la reponse,
mon idée est d'aller chercher le numéro du dernier devis (au format pdf) qui est placé dans un dossier et y ajouter 1
Messages postés
7623
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
9 décembre 2021
673
Bonjour,

Ce n'est possible que si ton fichier PDF est nommé que de chiffres comme ceci:

000012,000013,000014 ETC....

Se mettre sur la feuille concernée et faire Alt F11 pour accéder à l'éditeur.

Dans le ruban: Insertion - Module et mettre ce code:

Option Explicit
Sub ouvrir()
Dim fileToOpen As Variant
Dim nomfic
fileToOpen = Application _
 .GetOpenFilename("PDF Files (*.pdf), *.pdf")
If fileToOpen <> False Then
nomfic = Dir(fileToOpen)
nomfic = Split(nomfic, ".")(0)
Range("A1").Value = nomfic + 1
Range("A1").NumberFormat = "000000"
End If
End Sub


Pour lancer la macro tu peux mettre un bouton, un raccourci clavier ou mettre le curseur sur

ouvrir et appuyer sur la touche F5 du clavier

ensuite tu enregistres le classeur sous: Classeur prenant en charge les macros

Voilà
Messages postés
42
Date d'inscription
lundi 20 avril 2020
Statut
Membre
Dernière intervention
26 octobre 2021

bonjour cs_le pivert,
j'ai trouvé quelque chose qui ressemble a peu près a ce que je souhaite faire

https://forums.commentcamarche.net/forum/affich-36389108-if-sous-repertoire-contient

mais je n'arrive pas a l'adapter a mon"problème"
pour rappel je cherche a faire dernier numero facture +1
MERCI
Messages postés
7623
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
9 décembre 2021
673
As-tu essayé mon code?

Car il ouvre une boite de dialogue qui te permet de chercher ton fichier!
Messages postés
42
Date d'inscription
lundi 20 avril 2020
Statut
Membre
Dernière intervention
26 octobre 2021

oui j'ai essayé
mais je cherche a renseigner directement la cellule A1 avec le dernier numero de facture
Messages postés
7623
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
9 décembre 2021
673
et cette ligne que fait-elle?


Range("A1").Value = nomfic + 1
Messages postés
42
Date d'inscription
lundi 20 avril 2020
Statut
Membre
Dernière intervention
26 octobre 2021

Range("A1").value= vide
Messages postés
7623
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
9 décembre 2021
673
comment sont nommés tes pdf?
Messages postés
42
Date d'inscription
lundi 20 avril 2020
Statut
Membre
Dernière intervention
26 octobre 2021

Facture 000014 acompte monsieur le pivert Paris
Messages postés
7623
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
9 décembre 2021
673
il faut extraire la valeur numérique

voir ceci

https://silkyroad.developpez.com/VBA/ManipulerChainesCaracteres/#LI-P

@+
Messages postés
42
Date d'inscription
lundi 20 avril 2020
Statut
Membre
Dernière intervention
26 octobre 2021

merci cs_le pivert
j'ai essayé d'adapter un code et j'en suis là:

Option Explicit
Sub aaaaaaaaaaa()
Dim n°Facture As String

n°Facture = NumeroFacture
'MsgBox n°Facture

End Sub

Private Function NumeroFacture() As String
Dim dossier As String
Dim sousDos As String
Dim nomPrenom As String
Dim cherche As String
Dim n°Facture As Integer
Dim maximum As Integer
Dim t() As String
Dim i As Long

Application.Volatile
ReDim t(1 To 1)
dossier = "C:\Users\moi\Documents\facture\"
sousDos = Dir(dossier, vbDirectory)
Do While sousDos <> ""
If sousDos <> "." And sousDos <> ".." Then
If (GetAttr(dossier & sousDos) And vbDirectory) = vbDirectory Then
i = i + 1
ReDim Preserve t(1 To i)
t(i) = dossier & sousDos & "\"
End If
End If
sousDos = Dir
Loop
cherche = Format(123456789, "000000")
For i = LBound(t) To UBound(t)
sousDos = Dir(t(i), vbDirectory)
Do While sousDos <> ""
If sousDos <> "." And sousDos <> ".." Then
If (GetAttr(t(i) & sousDos) And vbDirectory) = vbDirectory Then
If sousDos Like "*" & cherche & "??*" Then
n°Facture = Val(Left(Mid(sousDos, InStr(1, sousDos, cherche) + Len(cherche)), 2))
If n°Facture > maximum Then maximum = n°Facture
End If
End If
End If
sousDos = Dir
Loop
Next
NumeroFacture = cherche & Format(maximum + 1, "00")

End Function



mais dans la cellule j'ai 12345678901
Il doit me manquer un bout......
Messages postés
7623
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
9 décembre 2021
673
Pour ce qui est du code ci-dessus, demande des explications à celui qui l'a posté!

Je continue donc dans ma démarche, bien que j'en constate ton désintéressement.

J'ai donc nommé un fichier pdf : Facture 000014 acompte monsieur le pivert Paris et mis ce code qui fonctionne:

Option Explicit
Dim nomfic As String
Dim facture As String
Sub ouvrir()
Dim fileToOpen As Variant
fileToOpen = Application _
 .GetOpenFilename("PDF Files (*.pdf), *.pdf")
If fileToOpen <> False Then
nomfic = Dir(fileToOpen)
nomfic = Split(nomfic, ".")(0)
extraireValeursNumeriques_DansChaine
Range("A1").Value = facture + 1
Range("A1").NumberFormat = "000000"
End If
End Sub
Sub extraireValeursNumeriques_DansChaine()
    Dim i As Byte, Nb As Byte
    Dim Cible As String, Resultat As String
    Dim Nombre As Double
     Cible = nomfic
    '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


libre à toi de l'utiliser!

Bonne programmation
Messages postés
42
Date d'inscription
lundi 20 avril 2020
Statut
Membre
Dernière intervention
26 octobre 2021

au contraire je te remercie de prendre du temp pour me dépanner
ton code marche
mais (sans vouloir t'offenser) pourquoi ouvrir une fenêtre plutôt que de renseigner directement A1?
Messages postés
7623
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
9 décembre 2021
673
La méthode la plus simple est de mettre le dernier numéro dans la feuille2

Une autre méthode consiste à parcourir tout le dossier où se trouve les PDF et trouver celui dont le numéro est le plus grand.

Je pense que c'est celui là dont tu fais allusion

Voici donc le code:

Option Explicit
Dim monFichier As String
Dim facture As String

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\LePivert\Documents\Nouveau dossier\" ' adapter le chemin
' 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
Range("A1").Value = nb + 1
Range("A1").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


Voilà, si tu préfères cela à toi de voir

@+ Le Pivert
Messages postés
42
Date d'inscription
lundi 20 avril 2020
Statut
Membre
Dernière intervention
26 octobre 2021

merci
c'est exactement ça
bravo
Messages postés
42
Date d'inscription
lundi 20 avril 2020
Statut
Membre
Dernière intervention
26 octobre 2021

juste pour finir. C'est quoi l'astuce pour afficher directement le numéro sans lancer la macro?
j'ai essayé
=facture()

mais cela ne marche pas.....
désolé
Messages postés
7623
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
9 décembre 2021
673
Il faut lancer la macro!

On peut la mettre à l'ouverture du classeur.

A mettre dans ThisWorkbook:

Option Explicit
Private Sub Workbook_Open()
listerLesFichiers
End Sub


@+ Le Pivert
Messages postés
42
Date d'inscription
lundi 20 avril 2020
Statut
Membre
Dernière intervention
26 octobre 2021

merci, bonne soiré