IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

VBA / Fonction - Incrémentation de n°


Sujet :

Contribuez

  1. #1
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 945
    Points : 28 945
    Points
    28 945
    Billets dans le blog
    53
    Par défaut VBA / Fonction - Incrémentation de n°
    Bonjour,
    Une question récurrente sur les forums Excel et Word est l'incrémentation de numéro en vue de gérer des documents (factures, note d'envoi, courrier etc …).
    Comme d'autres, je me suis penché sur ce problème et il y a des années, j'ai développé une fonction me permettant d'incrémenter un numéro et ce en fonction de plusieurs critères qui me semble fondamentaux dans une numérotation.
    Ces critères sont bien sûr en premier lieu le dernier numéro utilisé, ensuite la date de la dernière utilisation de ce numéro, en effet, si la plupart du temps une remise à zéro du compteur se fait chaque année, pour certains documents il arrive que la remise à zéro se fasse chaque mois ou pourquoi pas à d'autres période.
    J'ai donc développé cette fonction en pensant à ces différents paramètres et tout dernièrement j'ai ajouté un dernier argument qui permet d'introduire une date de travail qui pourrait être différente de la date du jour.
    Je mets donc à disposition de la collectivité cette petite fonction qui fera peut-être des heureux. C'est ce que je souhaite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Function Counter(LastCount, Optional LastDate As Date, Optional PeriodOfChange As String, Optional WorkDay As Date) As Long
      ' Author : Philippe Tulliez
      ' Date   : 2002-05-28
      ' Fonction renvoyant un n° incrémenté en fonction des arguments suivants :
      ' LastCount        ' Ancien n°
      ' ... Arguments Facultatifs ...
      ' [LastDate]        ' Dernière date d'incrémentation du compteur. (Défaut->Date du jour)
      ' [PeriodOfChange] ' Périodicité de remise à zéro compteur. (Continu par défaut)
      ' [WorkDate]       ' Date de travail. (Date du jour par défaut)
      ' Update
      ' v 2.1 - 2011-02-07 
      Dim wFlag As Boolean ' Si vrai RAZ(1) du compteur
      ' Check Arguments
      If LastDate = 0 And Len(PeriodOfChange) Then PeriodOfChange = "C"
      If LastDate = 0 Then LastDate = Date
      If IsMissing(PeriodOfChange) Then PeriodOfChange = "yyyy"
      If WorkDay = 0 Then WorkDay = Date
      ' Calcul différence entre LastDate & WorkDay
      Select Case UCase(Left(PeriodOfChange, 1))
        Case "Y"  ' Périodicité Annuelle
          wFlag = DateDiff("yyyy", LastDate, WorkDay) <> 0
        Case "Q"  ' Périodicité trimestrielle
          wFlag = DateDiff("q", LastDate, WorkDay) <> 0
        Case "M"  ' Périodicité Mensuelle
          wFlag = DateDiff("m", LastDate, WorkDay) <> 0
        Case "W"  ' Périodicité Mensuelle
          wFlag = DateDiff("ww", LastDate, WorkDay, vbMonday) <> 0
        Case "D"  ' Périodicité Journalière
          wFlag = DateDiff("d", LastDate, WorkDay) <> 0
      End Select
      ' Incrémentation ou RAZ(1) du compteur
      If wFlag Then Counter = 1 Else Counter = LastCount + 1
    End Function
    Les questions, remarques et suggestions éventuelles sont bien sûr les bienvenues.
    Très prochainement j'y ajouterai un classeur exemple.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    magasinier
    Inscrit en
    Janvier 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : magasinier
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 62
    Points : 28
    Points
    28
    Par défaut demande exemple
    Bonsoir corona,le forum

    Je viens de decouvrir ce post et je vous demande si vous avez le classeur exemple.
    Merci de votre reponse et bonne soirée

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 945
    Points : 28 945
    Points
    28 945
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voici le classeur illustrant l'utilisation de la fonction Counter.
    Fichiers attachés Fichiers attachés

  4. #4
    Candidat au Club
    Homme Profil pro
    Ingénieur Génie Civil
    Inscrit en
    Septembre 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur Génie Civil
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2020
    Messages : 1
    Points : 3
    Points
    3
    Par défaut
    Bonjour M. THULLIEZ,

    Alors voilà j'ai bien réussi à télécharger votre document mais je ne parviens pas à tout saisir vous trouverez en pièce jointe le document excel que je suis actuellement en train de préparer et effectivement je souhaiterais que le compteur de devis se réinitialise à 001 chaque mois et chaque année? Pourriez-vous m'aider?

    Cordialement,

    Devis.xlsm

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 945
    Points : 28 945
    Points
    28 945
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Qu'est-ce que vous ne comprenez pas ?

    La fonction que j'ai publiée se nomme Counter et a quatre arguments dont un seul est obligatoire et se nomme LastCount (le dernier numéro)

    Donc dans une cellule quelconque d'Excel, il suffit d'écrire =Counter(4) pour obtenir 5. Il est évident que l'on ne travaillera pas avec une constante mais avec une référence de cellule contenant ce dernier numéro.
    Je conseille l'utilisation d'une cellule nommée que l'on placera dans une feuille dédiée aux paramètres. Cette cellule on la nommera par exemple pLastCount. Le préfixe p m'indiquant que ma cellule nommée est un paramètre.
    Nous écrirons donc dans la cellule =Counter(pLastCount)Etant donné que vous souhaitez que le compteur se repositionne à 1 tous les mois, il faudra donc utiliser les deux autres arguments LastDate et PeriodOfChange. PeriodOfChange c'est la période de réinitialisation du compteur donc M et LastDate est la date de la dernière fois où l'on a édité le document

    Ces deux paramètres que l'on nommera par exemple pLastDate et pPeriodOfChange seront placés dans la même feuille que le premier argument et donc dans la cellule où se trouve le compteur, on écrira
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Counter(pLastCount;pLastDate;pPeriodOfChange)
    En sachant que pPeriodOfChange égal M, imaginons que pLastCount vaille 5 et la date du jour 19/09/2020

    La fonction renverra 6 si l'argument pLastCount est une date comprise entre le 1er et le 19 septembre 2020 sinon, elle renverra 1 si la date est un mois antérieur à septembre 2020

    Bien entendu, à partir du moment où le document est édité, il faudra modifier la valeur des deux paramètres pLastCount et pLastDate

    Si l'on souhaite avoir un format pour le compteur du document par exemple D20-09/005, on écrira la formule suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ="D" & TEXTE(AUJOURDHUI();"AA-MM/") & TEXTE(Counter(pLastCount; pLastDate;pPeriodOfChange);"000")

Discussions similaires

  1. [VBA-E] incrémenter des valeurs excel grâce à des boutons
    Par keiserjo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/07/2006, 11h32
  2. [VBA-E]-incrémentation du nommage de fichier txt
    Par VBBBA dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/06/2006, 20h16
  3. [VBA-E] Incrémentation compteur lors du chargement de l'userform
    Par teaRz dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 09/06/2006, 12h19
  4. [VBA-E] incrémentation inversée
    Par Squelet dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/02/2006, 14h20
  5. Réponses: 19
    Dernier message: 04/12/2005, 18h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo