Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.
  • Initiateur de la discussion Initiateur de la discussion mikeo
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

mikeo

XLDnaute Occasionnel
Bonjour les amis du forum,

Je cherche à incrémenter un numéro de facture à partir d'une date donnée. Le numéro est composé de 6 chiffres : aa + mm + n° d'ordre.

Si je reviens sur un mois antérieur, je souhaite trouver le dernier numéro (ou le n° maximum) correspondant au mois et l'incrémenter de 1.

Merci pour votre aide.

Mikeo
 

Pièces jointes

Re : numero suivant

Bonjour Hoerwind,

Merci pour ta rapidité.

En fait, je souhaiterais avoir un code VBA car mon fichier est plus compliqué que cela et la liste des dates et numéros se trouve sur un autre onglet (base de données).

Pour préciser, les numéros ont un format nombre avec 6 chiffres : les deux premiers représentent l'année, les deux suivants le mois les deux derniers sont un numéro d'ordre qui s'incrémente. Ce numéro est généré après qu'on inscrit la date.

A+

Mikeo
 
Re : numero suivant

Bonjour le fil 🙂,
En événementielle :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range, I As Long, J As Long, K As Long
If Target.Address <> "$E$28" Then Exit Sub
I = Range("A:A").SpecialCells(xlCellTypeConstants).Row
J = Range("A:A").SpecialCells(xlCellTypeConstants).Rows.Count
For K = I To I + J - 1
If Left(Cells(K, 1), 4) = Format(Range("E28"), "yymm") Then
If Plage Is Nothing Then
Set Plage = Cells(K, 1)
Else
Set Plage = Union(Plage, Cells(K, 1))
End If
End If
Next K
Range("E29") = Application.WorksheetFunction.Max(Plage) + 1
End Sub
Bonne journée 😎
 
Re : numero suivant

Bonjour JNP, et le forum.

La solution correspond tout à fait à ce que je veux et elle marche. Mais même avec le corrigé, je ne comprends pas pourquoi elle marche. J'ai encore des progrès à faire.

Je te remercie beaucoup et je vais essayer de l'adapter à mon problème.


Bonne journée


Mikeo

En fait, j'ai une erreur quand j'ai voulu l'adapter à mon projet. (Les listes sont sur une feuille "bd"). Peut être un problème de select ?

Merci de regarder.

Mikeo
 

Pièces jointes

Dernière édition:
Re : numero suivant

Re 🙂,
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range, I As Long, J As Long, K As Long
[COLOR=red][B]With Sheets("bd")[/B][/COLOR]
If Target.Address <> "$C$28" Then Exit Sub
I = [COLOR=red][B].[/B][/COLOR]Range("A:A").SpecialCells(xlCellTypeConstants).Row
J = [COLOR=red][B].[/B][/COLOR]Range("A:A").SpecialCells(xlCellTypeConstants).Rows.Count
For K = I To I + J - 1
If Left[COLOR=red][B](.Cells(K, 1)[/B][/COLOR], 4) = Format(Range("C28"), "yymm") Then
If Plage Is Nothing Then
Set Plage = [B][COLOR=red].Cells(K, 1)[/COLOR][/B]
Else
Set Plage = Union(Plage, [COLOR=red][B].Cells(K, 1))[/B][/COLOR]
End If
End If
Next K
[COLOR=red][B]End With[/B][/COLOR]
Range("$C$30") = Application.WorksheetFunction.Max(Plage) + 1
End Sub
Les Cells ne pointaient pas sur BD mais sur la feuille active 🙄...
Pour comprendre, je détermine la première cellule utilisée et la dernière, puis je compare dans chacune les 4 premières chiffres avec la cellule de départ formaté 2 digits pour l'année et 2 digit pour le mois. Si c'est OK, je stocke dans un Range qui s'appelle Plage. Il me suffit après de prendre la valeur maximale de Plage et d'ajouter 1 😀.
Bon courage 😎
 
Re : numero suivant

Bonsoir JNP,

Merci beaucoup, je me doutais qu'il y a un problème de feuille mais je ne suis pas encore capable de m'en sortir seul. Heureusement que je ne suis jamais seul avec vous tous.

J'ai appris (je crois) que le point . devant range() etc.. sous entend qu'il faut se rapporter à la feuille with ...

Bonne soirée à toi et à ceux qui te sont chers.

Mikeo
 
Re : numero suivant

Bonjour Forum,

Je reviens sur un ancien post qui a éré résolu par JNP. Mais je me retrouve avec une erreur que je ne suis pas capable de résoudre.

Le problème est que quand on donne une date (sur une facture), excel doit chercher dans un onglet "bd" les numéros de facture correspondant à ce mois et ajouter 1.

Dans la solution de JNP, qui marche bien, j'ai une erreur quand il n'y a aucune facture correspondant au mois. Par exemple, si j'ai à faire une facture pour novembre 2010, je voudrais qu'excel me génère un numéro 101101 s'il n'y a aucune facture sur novembre 2010.

Merci pour votre aide.

A+
 

Pièces jointes

Re : numero suivant

Bonjour les amis,

Un petit up pour compléter la formule de JNP ci-après :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range, I As Long, J As Long, K As Long
With Sheets("bd")
If Target.Address <> "$C$28" Then Exit Sub
I = .Range("A:A").SpecialCells(xlCellTypeConstants).Row
J = .Range("A:A").SpecialCells(xlCellTypeConstants).Rows.Count
For K = I To I + J - 1
If Left(.Cells(K, 1), 4) = Format(Range("C28"), "yymm") Then
If Plage Is Nothing Then
Set Plage = .Cells(K, 1)
Else
Set Plage = Union(Plage, .Cells(K, 1))
End If
End If
Next K
End With
Range("$C$30") = Application.WorksheetFunction.Max(Plage) + 1
End Sub

Pour moi, il faut ajouter : si le mois n'existe pas dans la liste, le créer à partir du numéro 1. Mais en VBA, pas en français.

Merci
 
Re : numero suivant

Sans avoir tout relu ... est-ce-que cela ressemble à ta demande

Code:
If Plage Is Nothing Then
    Range("$C$30") = "10" & Format(Range("C28"), "mm") & "01"
Else
    Range("$C$30") = Application.WorksheetFunction.Max(Plage) + 1
End If

A +
 
Re : numero suivant

Bonjour James007,

Merci pour ta réponse, mais je comprends qu'il est chiant de se replonger dans un problème avec plein d'explications. Voilà, je réécris ce que je comprends de la solutions de JNP, avec peut être, une proposition que je ne sais pas formuler en VBA. Sinon je crois qu'il n'y a pas à modifier ce que JNP a écrit auparavant.

Private Sub Worksheet_Change(ByVal Target As Range) 'a faire chaque fois qu'on modifie la feuille
Dim Plage As Range, I As Long, J As Long, K As Long
If Target.Address <> "$C$28" Then Exit Sub
With Sheets("bd") ' aller voir la feuille bd
I = .Range("A:A").SpecialCells(xlCellTypeConstants).Row ' je pose i = la première ligne remplie(?) dans la colonne A
J = .Range("A:A").SpecialCells(xlCellTypeConstants).Rows.Count ' je pose j = le nombre de lignes remplies dans la colonne A
For K = I To I + J - 1 ' aller de la première ligne à la dernière ligne remplie
If Left(.Cells(K, 1), 4) = Format(Range("C28"), "yymm") Then 'si les 4 premiers chiffres ressemblent à la cellule C28
If Plage Is Nothing Then ' s'il n'y a rien dans le tableau "plage"
Set Plage = .Cells(K, 1) ' alors on le considère comme le premier terme du tableau
Else ' sinon
Set Plage = Union(Plage, .Cells(K, 1)) 'on 'ajoute à la suite dans le tableau
End If
End If
Next K
End With

'j'aurais mis ici en VBA :" s'il n'y a toujours rien dans le tableau, on prend dans la cellule C28 l'année (2chiffres)& le mois (2 chiffres & 01 pour dire que c'est la première facture de ce mois

Range("$C$30") = Application.WorksheetFunction.Max(Plage) + 1 ' on revient à la cellule C30 et on lui affecte le plus gros numéro + 1
End Sub 'fin

A plus
 
Re : numero suivant

Bonjour James 007,

Merci infiniment, c'est exactement ce que je voulais.

Pour dire :
" s'il n'y a toujours rien dans le tableau, on prend dans la cellule C28 l'année (2chiffres)& le mois (2 chiffres & 01"

il suffit d'écrire tout simplement :
Code:
[COLOR="red"]If Not Plage Is Nothing Then
    Range("$C$30") = Application.WorksheetFunction.Max(Plage) + 1
Else
    Range("$C$30") = Format(Range("C28"), "yy") & Format(Range("C28"), "mm") & "01"[/COLOR]
[COLOR="red"]End If[/COLOR]

La prochaine fois je le saurais.

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
8
Affichages
650
A
Réponses
20
Affichages
3 K
ababi
A
H
  • Question Question
Réponses
1
Affichages
1 K
N
Réponses
2
Affichages
2 K
N
Réponses
1
Affichages
1 K
S
Réponses
0
Affichages
1 K
samia89
S
C
Réponses
2
Affichages
2 K
C
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…