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

Macros et VBA Excel Discussion :

Incrémentation discontinue par année [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 18
    Par défaut Incrémentation discontinue par année
    Bonjour,

    Je dois mettre dans un fichier excel des archives papiers. Je voudrais ajouter un ID (Année+numéro incrémenté).
    L’incrémentation doit être reprendre pour chaque année. Cependant, on me ramène les documents non classés.
    J’ai trouvé le code ci-dessous de Philippe Thulliez. J’avoue que je suis perdu.
    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
    Function Counter(LastCount As Long, _
                     Optional LastDate As Date, _
                     Optional PeriodOfChange As String = "C", _
                     Optional WorkDate As Date) As Long
      ' Author : Philippe Tulliez http://philippe.tulliez.be/
      ' Date : 2013-12-18 (first version 2002-05-28)
      ' Version: 3.1
      ' Fonction renvoyant un nombre entier en fonction des arguments suivant :
      ' ... Arguments ... (tous facultatifs sauf le 1er)
      ' LastCount (Long) ' Dernier numéro
      ' [LastDate] (Date) ' Dernière date d'incrémentation du compteur. (Défaut->Date du jour)
      ' [PeriodOfChange] (String) ' Périodicité de reinitialisation du compteur. (Continu par défaut)
      ' (Y) Annuel, (Q) Trimestriel, (M) Mensuel, (W) Hebdomadaire, (D) Jour
      ' [WorkDate] (Date) ' Date de travail. (Date du jour par défaut)
     
      Dim Period As String
      ' Check Arguments
      If LastDate = 0 And Len(PeriodOfChange) = 0 Then Counter = LastCount + 1: Exit Function
      If LastDate = 0 Then LastDate = Date
      If WorkDate = 0 Then WorkDate = Date
      ' Gestion des périodicités (Y)ear, (Q)uarter, (M)onth, (W)eek,(D)ay
      Period = LCase(Left(PeriodOfChange, 1))
      If InStr("yqmwd", Period) = 0 Then Period = "c"
      Select Case Period
        Case "y": Period = "yyyy"
        Case "w": Period = "ww"
      End Select
      Select Case Period
        Case "c": Counter = LastCount + 1
        Case Else: Counter = 1 + LastCount * Abs(DateDiff(Period, LastDate, WorkDate, vbMonday) = 0)
      End Select
    End Function
    Mon tableau structuré est initialement vide. J’utilise un formulaire pour enregistrer les données.
    J’insère la date dans une textbox (TxtDate) et d’autres contrôles.
    Le numéro généré par la dite fonction sera stockée dans une cellule nommée « DerNum ».
    J’avoue être vraiment perdu. En effet, si par exemple je rempli un certain de de ligne pour par exemple 2021,
    ensuite pour 2023 et ensuite d’autres données pour 2021.

    Bien que M. Thulliez ait donné des exemples d'utilisation ce fil, j’ai du mal à comprendre l'utilisation de la fonction. Je n'ai que des erreurs.

    Au besoin, je peux fournir un fichier vide de donner.

    Merci pour votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 437
    Par défaut
    Oui, ce serait mieux avec de disposer d'un fichier exemple.
    Cordialement.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 18
    Par défaut
    Bonjour EricDgn,

    Désolé pour mon retard. Merci beaucoup pour ton intérêt.
    Ci-joint le fichier.

    Bonne journée.

    Classeur1.xlsmClasseur1.xlsm

  4. #4
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 516
    Par défaut
    Bonjour,
    Pour la colonne d'identification par index, je pense qu'il faut aller au plus simple avec une incrémentation de 1. Ensuite libre à toi de créer une colonne Numéro de dossier, bien que je trouve cela redondant.
    Voici un petit exemple de ce que l'on pourrait faire :

    Pièce jointe 652960

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 18
    Par défaut
    Bonjour,

    @Valtrase: Je te remercie beaucoup pour ton fichier. J'ai trouvé plus simple (compter le nombre d’occurrences pour l'année concernée).
    Cependant, Je ne sais encore comment transformer une procédure en fonction.
    Si tu veux Stp me donner un coup de main dans ce sens.
    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
    Option Explicit
    Option Compare Text
    Dim Tb As ListObject
    Dim num As Long, Mondico As Object, Année As Long
     
    Private Sub TxtDate_Change()
       On Error Resume Next
       Année = Year(TxtDate)
       Call NumDossier
       TxtNo = Format(CDate(TxtDate), "yyyy") & Format(num, "#000")
       On Error GoTo 0
    End Sub
     
    Sub NumDossier()
       Dim c As Range
       Set Mondico = CreateObject("Scripting.Dictionary")
       For Each c In Range("TbAnimaux[date]")
          If Year(c.Value) = Année Then
             Mondico(Year(c.Value)) = Mondico(Year(c.Value)) + 1
          End If
       Next c
       If Mondico.Count > 0 Then
          num = Mondico.Item(Année) + 1
         Else
          num = 1
       End If
     Debug.Print num
    End Sub
    Merci par avance.
    Bonne journée.

  6. #6
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 437
    Par défaut
    Bonjour,

    Une proposition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub TxtDate_AfterUpdate()
        If Me.TxtDate = "" Then
            ID = ""
            TxtNo = ""
        Else
            ID = Application.Evaluate("=COUNT(TbAnimaux[ID])") + 1
            TxtNo = Year(TxtDate) & "-" & Format(Application.Evaluate("SumProduct(--(Year(TbAnimaux[Date])=" & Year(TxtDate) & "))") + 1, "0000")
        End If
    End Sub
    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/10/2007, 00h34
  2. Affichage en passant par un buffer...
    Par Sirotilc dans le forum MFC
    Réponses: 5
    Dernier message: 27/05/2002, 21h00

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