XL 2019 inscrire l'année automatiquement

toffduq

XLDnaute Occasionnel
bonjour à tous
je rentre des numéro de dossier tout les jours dans un fichier Excel en B1
du style : 2022 11 0245 (2022 = année, 11 = mois, 0245 = numéro de dossier
la question est :
comment mettre 2022 automatiquement sans le taper en sachant qu'en 2023 il faudra noté 2023 si le mois est 01
et qu'il sera possible pendant le mois de janvier 2023 il pourra avoir des dossiers avec des année 2022 11 .... et 2022 12 ....

merci
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Une proposition :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim TSpl$(), An As Integer, Mois As Integer, Numéro As Integer
   If Target.Address <> "$B$1" Then Exit Sub
   Select Case VarType(Target.Value)
      Case vbString
         TSpl = Split(Target.Value, " ")
         Numéro = TSpl(UBound(TSpl))
         If UBound(TSpl) >= 1 Then Mois = TSpl(UBound(TSpl) - 1)
         If UBound(TSpl) >= 2 Then An = TSpl(UBound(TSpl) - 2)
      Case vbDouble
         Numéro = Target.Value Mod 10000
         Mois = Int(Target.Value / 10000) Mod 100
         An = Int(Target.Value / 1000000)
      End Select
   If Mois = 0 Then Mois = Month(Date)
   If An = 0 Then An = Year(Date) - Int((Mois - Month(Date)) / 12 + 0.5)
   Application.EnableEvents = False
   Target.Value = Format(An, "0000") & " " & Format(Mois, "00") & " " & Format(Numéro, "0000")
   Application.EnableEvents = True
   End Sub
 

toffduq

XLDnaute Occasionnel
Une proposition :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim TSpl$(), An As Integer, Mois As Integer, Numéro As Integer
   If Target.Address <> "$B$1" Then Exit Sub
   Select Case VarType(Target.Value)
      Case vbString
         TSpl = Split(Target.Value, " ")
         Numéro = TSpl(UBound(TSpl))
         If UBound(TSpl) >= 1 Then Mois = TSpl(UBound(TSpl) - 1)
         If UBound(TSpl) >= 2 Then An = TSpl(UBound(TSpl) - 2)
      Case vbDouble
         Numéro = Target.Value Mod 10000
         Mois = Int(Target.Value / 10000) Mod 100
         An = Int(Target.Value / 1000000)
      End Select
   If Mois = 0 Then Mois = Month(Date)
   If An = 0 Then An = Year(Date) - Int((Mois - Month(Date)) / 12 + 0.5)
   Application.EnableEvents = False
   Target.Value = Format(An, "0000") & " " & Format(Mois, "00") & " " & Format(Numéro, "0000")
   Application.EnableEvents = True
   End Sub
cela fonctionne nickel
et comment inclure B3 dans votre vba
et merci votre aide
 
Dernière édition:

toffduq

XLDnaute Occasionnel
Hi, et en plus, il demande une modification du code de @Dranreb
On vit une époque formidable... :)
désolé mais comme j'avais pas de réponse j'ai demander ailleurs
je suis désolé, j'ai demandé à supprime mon post sur l'autre forum
excuser moi de la gène mais en rien j'ai voulu vous offensé
maintenant si vous voulez me sorti du forum je comprendrez très bien :-(
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Un fonction personnalisée Dossier( texte saisie) qui renvoie le bon n° de dossier:
  • L'année peut-être omise, à quatre chiffres ou à deux chiffres
  • si on fait la saisie en janvier et février et si l'année est omise alors on met l'année précédente suelement si le mois saisi est 11 ou 12 sinon on met l'année courante.
  • le mois est à un chiffre ou deux chiffres
  • le n° d'ordre est de 1 à 4 chiffres
  • le résultat renvoyé par la fonction est sous la forme AAAA MM 9999
VB:
Function Dossier(ByVal x As String)
Dim s, an, mois, ordre
   s = Split(Application.Trim(x))
   If UBound(s) = 1 Then
      an = -1: mois = Val(s(0)): ordre = Val(s(1))
   ElseIf UBound(s) = 2 Then
      an = Val(s(0)): mois = Val(s(1)): ordre = Val(s(2))
   Else
      Dossier = "Format Dossier incorrect": Exit Function
   End If
 
   'vérif mois et détermination de l'année si l'année est omise dans la saisie
   If mois < 1 Or mois > 12 Then Dossier = "mois incorrect": Exit Function
   'année si pas d'année
   If an = -1 Then If Month(Date) <= 2 And mois >=11 Then an = Year(Date) - 1 Else an = Year(Date)
 
   'Vérif année
   If an > 0 And an < 99 Then
      an = 2000 + an
   ElseIf an >= 2000 And an <= 3000 Then
      an = an
   Else
      Dossier = "année incorrecte": Exit Function
   End If
   'vérif n° dossier
   If ordre <= 0 Or ordre > 9999 Then Dossier = "n° d'ordre incorrect": Exit Function
 
   'on renvoie le dossier
   Dossier = Format(an, "0000") & " " & Format(mois, "00") & " " & Format(ordre, "0000")
End Function
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 201
Messages
2 086 166
Membres
103 149
dernier inscrit
Deepkneec