Incrémentation numéro facture(je sais encore...mais bon)

Résolu
gui64600 Messages postés 26 Statut Membre -  
Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
je voudrais pouvoir incrémenter en appuyant sur un bouton un numéro de facture.
j'ai une liste de numéro de facture en colonne A d'un fichier.
Ces factures commencent soit par la lettre F, soit par lettre A.
je voudrais créer un bouton qui incrémente sur une cellule définie les factures qui commencent par la lettre F. Et un autre bouton qui incrémente la même cellule les factures (avoir) qui commencent par la lettre A.
en gros j'ai ma colonne A qui contient les valeurs suivantes:
F0001
F0002
A0001
F0003
F0010
A0004

je voudrais quand je clique sur le bouton "Numéro facture" avoir la valeur F0011 qui s'affiche dans une cellule D6 (par exemple) et si je clique sur le bouton "numéro avoir" avoir la valeur A0004 qui s'affiche dans la même cellule D6.

Merci de votre aide

9 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour, est-ce toujours en D6?
    pourrais-tu expliquer quelle logique fait qu'il faut obtenir F0011 et A0004?
    les factures sont-elles triées dans la colonne A, ou est-ce un hasard dans ton exemple?
    0
    1. gui64600 Messages postés 26 Statut Membre
       
      Bonjour,
      Oui le résultat se trouvera toujours enD6.
      F0011 correspond au résultat trouvé, en déclenchant la macro numérotation facture, puisque le plus grand dernier numéro de facture était F0010.
      Idem pour les avoirs si j'active la macro numérotation avoir.
      Et enfin non les numéros ne sont pas forcements triés.
      Merci ton interet
      0
  2. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Au passage vous récupérer le dernier n° de facture, soit ‘F0010 et A0003’ que vous mettez en ‘D6 ? et vous appliquez ceci pour incrémentée en ‘D6 :
    Sheets("ma feuille").Range("D6").Value = Left(Range("D6"), 1) + Format(CInt(Right(Range("D6"), Len(Range("D6")) - 1)) + 1, "0000")

    Salutations
    Le Pingou

    0
  3. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Et pourtant ce code fonctionne parfaitement.
    Alors mettre une copie de votre code....Merci

    0
    1. gui64600 Messages postés 26 Statut Membre
       
      Bonjour,
      étant vraiment novice en code je n'ai rien à copier malheureusement...mais peut être pourriez vous faire quekque chose avec cette explication??
      Sélectionner la plus grande des valeurs se situant en colonne A et commençant par la lettre F et l'incrémenter de 1 et positionner le résultat dans la cellule D6.
      merci
      0
  4. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Je vous le fait volontiers, mettre votre fichier exemple sur https://www.cjoint.com/ et poster le lien reçu.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Code à insérer dans un Module (sous VBE Insertion/Module) :
    Option Explicit
    
    Const NF As String = "Feuil1" '********* A ADAPTER LE NOM DE LA FEUILLE CONTENANT LES N° DE FACTURES ET AVOIRS
    
    Public Function NumeroFacture() As String
    Dim num As Integer
        num = CInt(RechercheDernier("F")) + 1
        NumeroFacture = "F" & Right("0000" & num, 4)
    End Function
    Public Function NumeroAvoir() As String
    Dim num As Integer
        num = CInt(RechercheDernier("A")) + 1
        NumeroAvoir = "A" & Right("0000" & num, 4)
    End Function
    Function RechercheDernier(Quoi As String) As String
    Dim R As Range
        Set R = Sheets(NF).Columns(1).Cells.Find(Quoi, After:=Sheets(NF).Range("A" & Rows.Count), LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
        If Not R Is Nothing Then
            RechercheDernier = Right(R.Value, 4)
        Else
            RechercheDernier = "0001"
        End If
    End Function
    


    A utiliser directement dans la cellule D6, comme ceci :
    =NumeroFacture()
    ou
    =NumeroAvoir()

    On peut également associer les deux...
    0
    1. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
       
      Merci pijaku,
      je vais le lui mettre dans son fichier exemple.
      Bonne journée.
      Salutations.
      Le Pingou
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Je pense qu'il faut rechercher le plus grand, pas le dernier.
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Bonjour,

      Le Pingou : de rien, si ça peut aider.
      yg_be : Ben oui. Après s'il a envie de tout mélanger au lieu d'enregistrer ses numéros de factures dans l'ordre, forcément ça va déconner.
      Mais bon, mieux vaut ranger, ordonner les données non?...
      0
  7. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Merci yg_be,
    Je vais en tenir compte dans ma proposition.
    0
    1. gui64600 Messages postés 26 Statut Membre
       
      bonjour, merci pour la réponse
      mais en effet yg_be à raison c bien le grand et non pas le dernier.

      Merci de votre aide
      0
  8. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Voici ma petite contribution, bonne découverte.
    Le lien : https://www.cjoint.com/c/JEwqTmw4ZP0
    Merci du retour.
    0
    1. gui64600 Messages postés 26 Statut Membre
       
      Bonjour,

      Il ya quelques temps déjà vous m'aviez aider en me fournissant le code suivant qui est parfait.
      Aujourd'hui j'ai besoin de la même chose avec en plus l'année en cours à la suite de la numérota, c'est là que le bas blesse, l'incrémentation ne fonctionne plus

      Sub plusgdvaltexte(FA As Variant)
      Dim pg As Long, c As Range, nu As Variant
      pg = 0
      With Sheets("Numéro facture")
      For Each c In .Range("A2:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
      If Left(c, 1) = FA Then
      nu = Right(c, Len(c) - 1)
      If pg < nu Then pg = nu
      End If
      Next c
      End With
      Range("D6") = FA & Format(pg + 1, "000")
      End Sub


      Aujourd'hui j'ai besoin de la même chose avec en plus l'année en cours à la suite de la numérotation, c'est là que le bas blesse, l'incrémentation ne fonctionne plus, voilà le code modifié que j' ai réalisé mais évidemment ça ne suffit pas.


      Sub plusgdvaltexte(FA As Variant)
      Dim pg As Long, c As Range, nu As Variant
      pg = 0
      With Sheets("Numéro facture")
      For Each c In .Range("A2:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
      If Left(c, 1) = FA Then
      nu = Right(c, Len(c) - 1)
      If pg < nu Then pg = nu
      End If
      Next c
      End With
      Range("D6") = FA & Format(pg + 1, "000") & "/" & Format(Date, "yyyy") 'numéro plus / et l'année
      End Sub

      Merci de ton aide
      0
    2. gui64600 Messages postés 26 Statut Membre > gui64600 Messages postés 26 Statut Membre
       
      Merci de ton intérêt.
      A ce jour je n'avais besoins que de la numérotation suivante qui fonctionne très bien avec le code fourni :
      F0001
      F0002
      F0003
      ETC

      Sub plusgdvaltexte(FA As Variant)
      Dim pg As Long, c As Range, nu As Variant
      pg = 0
      With Sheets("Numéro facture")
      For Each c In .Range("A2:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
      If Left(c, 1) = FA Then
      nu = Right(c, Len(c) - 1)
      If pg < nu Then pg = nu
      End If
      Next c
      End With
      Range("D6") = FA & Format(pg + 1, "000")
      End Sub



      Maintenant je voudrais ajouter l'année à cette numérotation pour obtenir le résultat suivant :
      F0001/2020
      F0002/2020
      F0003/2020
      ETC
      0
    3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > gui64600 Messages postés 26 Statut Membre
       
      merci de spécifier "basic" dans les balises quand tu partages du VBA.
      peux-tu montrer un exemple au moment où l'année change?
      0
    4. gui64600 Messages postés 26 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Ok pour mes prochains post j'emploierais les bonnes balises (merci pour l'info au passage)

      Au changement d'année je repars du premier Numéro!
      F0001/2020
      F0002/2020
      F0003/2020
      ....
      F0100/2020

      ET en 2021

      F0001/2021
      F0002/2021

      Merci de ton aide
      0
  9. gui64600 Messages postés 26 Statut Membre
     
    Merci beaucoup,
    c'est loin d'être une petite contribution pour moi c top!!
    Ca à l'air de fonctionner du tonnerre
    merci encore
    à la prochaine MONSIEUR le Pingou
    0
    1. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
       
      Merci et sans oublier pijku et yg_be.
      pensez à mettre le poste en RESOLU...
      Salutations.
      Le Pingou
      0
  10. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    ceci va recommencer à 1 chaque année:
    Sub plusgdvaltexte(FA As Variant)
    Dim pg As Long, c As Range, nu As Variant, yr As Integer
    pg = 0
    yr = Year(Now())
    With Sheets("Numéro facture")
        For Each c In .Range("A2:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
            If Left(c, 1) = FA And CInt(Right(c, 4)) = yr Then
                nu = Mid(c.Value, 2, 4)
                If pg < nu Then pg = nu
            End If
        Next c
    End With
    Range("D6") = FA & Format(pg + 1, "0000") & "/" & CStr(yr)
    End Sub
    0