Incrémentation numéro de devis


#1

Bonjour à tous,
Voici mon nouveau problème du jour :slightly_smiling_face:

Ma formule :
=SI(ESTVIDE(J1);“Q-”;SI(J1=11;CONCATENER(“Q-”;DROITE(ANNEE(B13);2);“0”;MOIS(B13);“00”;J1;"-01");CONCATENER(DROITE(ANNEE(B13);2);“0”;MOIS(B13);“00”;J1;"-01")))

Mon numéro de devis est donc fonction de la date (année, mois) et du client.

EN J1 : CODE CLIENT (saisi manuellement à la réalisation du devis)
EN B13 : =AUJOURDHUI()
MON PROBLÈME : Existe-t-il un moyen d’incrémenter ce chiffre de 1 à chaque nouveau devis pour un même client avec redémarrage auto à 1 tous les mois ?

Merci d’avance de votre aide.

Fred


#2

Bonjour,
J’ai bien peur pour vous qu’il fasse passer par du VBA pour cette opération :thinking:


#3

Hey bonsoir Mimimathy,
Il va vraiment falloir que je prenne des cours VBA intensifs alors car malheureusement mes connaissances en la matière sont plus que limitées.:wink:


#4

Bonjour FRED,
Je propose undebut de solution (fonction matricielle encore :confused: encore,mais je crois la SOMMEPROD peut le faire), ca permet de resoudre beaucoup de cas compliqués avant de passer aux macros.
Si cela convient on peut l’inserer dans ta fonction existante.

Ci-joint un fichier avec une fonction qui increment un numéro par client par mois.
La fonction analyse les lignes de la 1ere jusqu’à la ligne courante puis compte le nome de fois que le client apparait, dans le meme mois.
Exemple: renvoi 1 à chaque ligne(du début, a la ligne 6) correspondante au client en G6 et le mois en H6.
{=SOMME(($G$2:G6=G6)*(MOIS($H$2:H6)=MOIS(H6)))}

La formule analyse les 2 colonnes Mois et client.

Exemple : Inrementation par client par mois.xlsx (9,6 Ko)


#5

Bonsoir WildDigiSoft,
Merci de ta réponse. Je vois que ta solution fonctionne (même si je ne comprends rien à la formule, eh oui c’est grave je sais) mais je n’ai pas la moindre idée où l’insérer dans ma formule.
Je te joins mon fichier exemple pour que ce soit plus clair pour toi.DEVIS INTERNATIONAL_EX.xlsx (18,1 Ko)


#6

ok, je regarde dès que j’ai un moment, ceci dit il te faut la liste des commandes à fin de calculer l’increment.
Ton Fichier est lié à un autre chose

Produit un fichier plus complet avec quelques données bidons.


#7

OK Merci WildDigiSoft.
Le classeur de réf en question sert juste à aller récupérer les infos sur les clients (Nom, Adresse, Prix de base) qui vont s’inscrire automatiquement en F4, F5, F6, F7 et D26 mais il ne sert pas pour la formule en question qui ne fait que reprendre le contenu de J1.
Fred


#8

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)


#9

Mais alors ça c’est trop génial. Merci MimiMathy :slight_smile:
J’ai deux questions (bah oui sinon c’est pas drôle !)
1- Avant de faire des bêtises, est-ce qu’il me suffit de copier ta feuille 2 et les macros du classeur exemple dans mon fichier original pour que ça marche ?
2- Si mon nombre de clients augmente est-ce qu’il me suffit de remplacer le 18 en target par 100 (par exemple) ?

Merci 10000 fois de ton aide si précieuse.

Fred


#10

Bonjour,
Ah, ben oui, c’est moins drôle pour toi pas pour moi :grin:

Alors dans la macro Worksheet_Change (qui se trouve dans ma feuil1)
il faut modifier le Target supérieur à 100 ou plus
If Target = "" Or Target < 10 Or Target >18 Then 'si la cellule J1 est vide ou non compris entre 10 et 18
Modifier le nom des feuilles (Feuil1 et Feuil2) par le nom de tes feuilles

Ensuite tu copies la feuille2 de mon exemple dans ton classeur à toi
et tu colles aussi la macro qui s’y trouve

Dans la feuille que tu as copié, tu rajoutes en col A le N° des clients jusqu’à la même valeur de la target
tu peut même en mettre plus, sur la Target et sur la colonne A et idem pour la colonne C, ou tu place des 0 (zéro)
et logiquement, c’est bon

Vérifie que les formules des cellules E1 & F1 de la feuille 2 soit bien présentent (surtout, qu’elle ne fasse pas référence à mon classeur avec la copie)

Si soucis, je suis là
Au boulot !! :wink:


#11

Re,

Un petit oubli,
Si tu as déjà des devis effectués sur des clients, tu peut mettre le N° du dernier devis effectué en Février dans la colonne D de la feuille 2 en regard du N° de client et le mois (2) en colonne B
Cela se mettra en route automatiquement avec le N° de devis +1 automatiquement lors de la prochaine saisie.


#12

Trop sympa. Je vais me pencher la dessus plus tard cet après-midi (c’est bien beau de faire des devis mais après faut bosser quand même :slight_smile:) et je reviens très vite vers toi pour te dire si tout marche bien.
Merci merci merci encore
Fred


#13

Re bonjour Mimi,

Juste pour te confirmer que tout fonctionne nickel ! Merci
À bientôt lors de ma prochaine prise de tête :upside_down_face: et excellent week-end à toi !
Fred


#14

Re,

Ok
N’oublie pas de passer ton post en RESOLU
A la prochaine