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

Résolu
gui64600 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   -  
Le Pingou Messages postés 12249 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
A voir également:

9 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
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
gui64600 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
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
Le Pingou Messages postés 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
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
Le Pingou Messages postés 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
Bonjour,
Et pourtant ce code fonctionne parfaitement.
Alors mettre une copie de votre code....Merci

0
gui64600 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
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
Le Pingou Messages postés 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
Bonjour,
Je vous le fait volontiers, mettre votre fichier exemple sur https://www.cjoint.com/ et poster le lien reçu.
0
gui64600 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
https://www.cjoint.com/c/JEwlQxeqdXA
avec mes remerciements
0

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

Posez votre question
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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
Le Pingou Messages postés 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
Merci pijaku,
je vais le lui mettre dans son fichier exemple.
Bonne journée.
Salutations.
Le Pingou
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
Je pense qu'il faut rechercher le plus grand, pas le dernier.
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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
Le Pingou Messages postés 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
Merci yg_be,
Je vais en tenir compte dans ma proposition.
0
gui64600 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
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
Le Pingou Messages postés 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
Bonjour,
Voici ma petite contribution, bonne découverte.
Le lien : https://www.cjoint.com/c/JEwqTmw4ZP0
Merci du retour.
0
gui64600 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
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
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > gui64600 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
peux-tu utiliser les balises de code quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

il serait utile que tu nous montres des exemples.
0
gui64600 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   > gui64600 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
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
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > gui64600 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
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
gui64600 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   > yg_be Messages postés 23541 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
gui64600 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
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
Le Pingou Messages postés 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
Merci et sans oublier pijku et yg_be.
pensez à mettre le poste en RESOLU...
Salutations.
Le Pingou
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
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