Bonjour à tous,
Voici une version en VBA
Une macro en Feuil1 (Facture)
Le fait de modifier le N° client en J1, (N° compris entre 10 et 18), incrémente le N° Facture par client et revient à un en cas de changement de mois
MACRO FEUIL 1:
Private Sub Worksheet_change(ByVal Target As Range)
Application.EnableEvents = False 'activer (true) ou pas (false) les evenements détectés pour eviter que le programme se morde la "queue" .
If Not Application.Intersect(Target, Range("J1")) Is Nothing Then 'sur changement cellule J1
If Target = "" Or Target < 10 Or Target > 18 Then 'si la cellule J1 est vide ou non compris entre 10 et 18
Range("D13") = "Q-" 'renvoie juste l'indicatif du N° Facture
Application.EnableEvents = True
Exit Sub 'Sort de la procèdure
Else 'sinon
Sheets("Feuil2").Activate 'active la feuil 2
Sheets("Feuil2").NoFacture 'lance la macro NoFacture
End If
End If
Sheets("Feuil1").Activate 'active la feuil 1
Range("D13") = Sheets("Feuil2").Range("G1").Value 'colle le Nouveau N°Facture
Application.EnableEvents = True
End Sub
MACRO FEUILLE 2:
Sub NoFacture()
'Déclaration des variables
Dim Dl%, i%
Dl = Range("A" & Rows.Count).End(xlUp).Row 'n° de la dernière ligne non vide de la colonne A
For i = 2 To Dl 'boucle sur les N° de clients
If Cells(1, 6).Value <> "" Then 'Si la cellule F1 n(est pas vide (peut être supprimer vu qu'il y a déjà une sécurité sur l'autre macro
If Cells(i, 1).Value = Cells(1, 6).Value Then 'si la cellue de la colonne A est égal au N° Client
debut:
If Cells(i, 3).Value <> 1 Then 'Vérifie que le client est toujours actif
Cells(i, 4).Value = Cells(i, 4).Value + 1 'incrémente de 1 le compteur pour ce client
Exit For 'comme j'ai trouvé le client, je quiite la boucle et je poursuit après le NEXT i
End If
End If
End If
Next i
If Mid(Cells(1, 5), 4, 2) * 1 = Cells(i, 2).Value Then 'Si le mois de la date d'aujourd'hui est égal à la cellule colonne B du client
'*******************************
'* CREATION DU N° FACTURE
'*******************************
Range("G1").Value = "Q-" & Right(Cells(1, 5), 2) & Mid(Cells(1, 5), 4, 2) & "00" & Cells(i, 1) & "-" & Format(Cells(i, 4).Value, "00")
Cells(i, 2).Value = Format(Mid(Cells(1, 7), 5, 2), "00") ' Renseigne le N° du mois de la facture créée
Else 'si le mois de la date d'aujourd'hui est différent à la cellule colonne B du client
Cells(i, 4).Value = "" 'j'efface l'incrément du client
Cells(i, 2).Value = Mid(Cells(1, 5), 4, 2) 'je renseigne le nouveau N° du mois de la date du jour
GoTo debut 'est je repars à la ligne "debut:" pour remettre un N° d'increment
End If
Cells(i, 2).Value = Mid(Cells(1, 7), 5, 2) * 1 'Je renseigne le N° du mois en colonne B
End Sub
LE PROGRAMME:
DEVIS INTERNATIONAL_EX.xlsm (32,3 Ko)