Numéro suivant sous excel 2019

Résolu
hellomargo Messages postés 52 Statut Membre -  
hellomargo Messages postés 52 Statut Membre -
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

  1. hellomargo Messages postés 52 Statut Membre 1
     
    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
    0
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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à
    0
  3. hellomargo Messages postés 52 Statut Membre 1
     
    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
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      As-tu essayé mon code?

      Car il ouvre une boite de dialogue qui te permet de chercher ton fichier!
      0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. hellomargo Messages postés 52 Statut Membre 1
     
    oui j'ai essayé
    mais je cherche a renseigner directement la cellule A1 avec le dernier numero de facture
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      et cette ligne que fait-elle?


      Range("A1").Value = nomfic + 1
      0
  6. hellomargo Messages postés 52 Statut Membre 1
     
    Range("A1").value= vide
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      comment sont nommés tes pdf?
      0
  7. hellomargo Messages postés 52 Statut Membre 1
     
    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......
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      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
      0
  8. hellomargo Messages postés 52 Statut Membre 1
     
    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?
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      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
      0
  9. hellomargo Messages postés 52 Statut Membre 1
     
    merci
    c'est exactement ça
    bravo
    0
  10. hellomargo Messages postés 52 Statut Membre 1
     
    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é
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      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
      0
  11. hellomargo Messages postés 52 Statut Membre 1
     
    merci, bonne soiré
    0