Numerotation automatique avec remise à zero par année.

Résolu
agri63 -  
agri63 Messages postés 6 Statut Membre -
Bonjour,
Me revoilà, je suis agriculteur; J' ai fait une trame pour réaliser mes factures.
Gràce à internet, j 'ai réussi à mettre en place une macro pour l' impression en PDF.
Le soucis c 'est le numéro de facture... Il me faut qu' il soit automatique avant chaque impression et une remise à zéro chaque année civile...
Le format que je souhaite utiliser est 16001, 16002...., 17001,17002..., 18001,18002...
16 correspond à 2016, 17 à 2017, etc...

Merci par avance de votre aide...

6 réponses

  1. Gyrus Messages postés 3360 Statut Membre 526
     
    Bonjour,

    Il faut que tu définisses un emplacement pour ce numéro de facture (exemple : cellule A1)
    Ensuite, tu saisis le numéro initial (exemple : 16001).

    Et pour incrémenter le numéro de facture :
    Sub Test()
    Dim Année As Integer
        Année = Format(Date, "yy")
        If Année = Left(Range("A1").Value, 2) Then
            Range("A1") = Année & Format(CInt(Right(Range("A1").Value, 3)) + 1, "000")
        Else
            Range("A1") = Année & "001"
        End If
    End Sub
    

    A+
    1
    1. agri63 Messages postés 6 Statut Membre
       
      Merci, sa marche. et toute les année au premier 1 janvier il y a une remise à zéro?

      Une autre petite question bête. Comment je peux verrouiller ma cellule, afin de ne pas changer accidentellement le N°... et donc de respecter la chronologie durant toute l' année.
      Encore merci
      Agri63
      0
    2. Gyrus Messages postés 3360 Statut Membre 526 > agri63 Messages postés 6 Statut Membre
       
      A chaque changement d'année, le numéro d'ordre est réinitialisé à 001.

      Pour verrouiller la cellule, il faut protéger la feuille.
      Voici un lien avec quelques exemples et explications :
      http://boisgontierjacques.free.fr/pages_site/protection.htm

      A+
      0
    3. Utilisateur anonyme > agri63 Messages postés 6 Statut Membre
       
       
      Bonjour agri63,

      Sur ta feuille où il y a le N°, tu dois faire ceci pour toutes les cellules où tu dois
      saisir des données : clic droit dessus, choisis dans le menu contextuel :
      « Format de cellule » => fenêtre du même nom ; choisis le dernier onglet :
      « Protection » et décoche la 1ère case : ☐ Verrouillée

      Bien sûr, pour une plage de cellules contigües, sélectionnes cette plage entière ;
      tu peux même utiliser < Ctrl > pour sélectionner des cellules non adjacentes.

      Notes que par défaut, toutes les cellules de la feuille sont : ☑ Verrouillée
      ce pour quoi tu n'as besoin de t'occuper que des cellules à déverrouiller,
      donc celles où tu saisis des données.

      Quand tu auras terminé ce travail préparatoire, il te restera une seule chose
      à faire pour que ça soit effectivement pris en compte : protéger la feuille de
      calcul ; pour cela : onglet Révision, groupe Modifications (le dernier à droite),
      cliques sur « Protéger la feuille » ; pour une protection simple, c'est inutile
      de mettre un mot de passe ; sinon mets-en un (qui sera bien sûr à confirmer,
      et attention : lettres majuscules différentes des lettres minuscules ! à noter
      de préférence si tu risques de l'oublier, car sinon tu seras coincé ! et à
      cacher et à mettre en lieu sûr : dans le coffre de ta banque si tu veux.  😉).
      Dans la fenêtre, ne fais rien d'autre et valide par OK.

      Fait : toutes les cellules verrouillées de ta feuille sont protégées contre un
      écrasement accidentel, et tu peux saisir uniquement dans les cellules
      déverrouillées (ce qui était bien le but recherché).

      Le « Protéger la feuille » de l'onglet Révision est devenu « Ôter la protection
      de la feuille ». Si tu cliques dessus, ça le fait tout de suite si tu n'avais pas mis
      de mot de passe, sinon, ça te le demande, et il va de soi que la feuille sera
      déprotégée seulement si tu saisis le bon mot de passe (d'où l'intérêt évident
      de ne pas l'avoir oublié !).

      Pour ta 1ère question, je te laisse voir ça avec Gyrus (que je salue).

      Cordialement.  😊
       
      0
    4. agri63 > Utilisateur anonyme
       
      Merci, j' ai quand même un problème, Je voulais verrouiller la cellule du n° numéro de facture, parce que avec la macro de Gyrus , qui fonctionne a merveille, je lui dit encore merci, mais rien ne m' empêche de changer le numéro initial ... accidentellement ou pas.
      Or en verrouillant la cellule la macro ne peut plus créditer de 1 le numéro précédent...
      Alors comment faire??? il faut que je te dise que j' ai intégré cette macro dans le même bouton que l' export en PDF. Cela me permet de retoucher la facture jusque l' export. et j 'ai 'une manipe pour crédit le nouveau numéro et export.
      0
    5. Utilisateur anonyme > agri63
       
       
      Bonjour agri63,

      Je te propose ce code VBA (qui est une adaptation du code de Gyrus) :

      
      Option Explicit
      
      
      Sub Test()
        Dim Année As Integer: Année = Format(Date, "yy"): ActiveSheet.Unprotect
        If Année = Left$([A1], 2) Then
          [A1] = Année & Format(CInt(Right$([A1], 3)) + 1, "000")
        Else
          [A1] = Année & "001"
        End If
        ActiveSheet.Protect
      End Sub
      
      

      Donc si tu verrouilles ta cellule A1 et que tu protèges la feuille, ça marchera
      bien quand même, et à condition que ta feuille soit la feuille active : tu dois
      être dessus avant de lancer la macro.

      Sinon, si ta cellule A1 est sur Feuil3 (par exemple) utilises ce code VBA :

      
      Option Explicit
      
      
      Sub Test()
        Dim Année As Integer: Année = Format(Date, "yy")
        With Worksheets("Feuil3")
          .Unprotect
          If Année = Left$(.[A1], 2) Then
            .[A1] = Année & Format(CInt(Right$(.[A1], 3)) + 1, "000")
          Else
            .[A1] = Année & "001"
          End If
          .Protect
        End With
      End Sub
      
      

      Merci de me dire si ça a marché ou non.

      Cordialement.  😊
       
      0
  2. Gyrus Messages postés 3360 Statut Membre 526
     
    Bonjour,

    Essaie avec :
        'export en pdf
        info1 = Sheets("facture").Range("F9")
        info2 = Sheets("facture").Range("H4")
        nom = info1 & "-" & info2 & "-"
        ThisWorkbook.Save
        ThisWorkbook.SaveAs (nom & ".xls")
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "J:\IBRYAGRI\Facture\" & nom & ".pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        From:=1, To:=1, OpenAfterPublish:=True


    A+
    1
  3. Gyrus Messages postés 3360 Statut Membre 526
     
    En prenant pour exemple un prix unitaire de 25€, la formule en F18 sera =25*SI($G$2="Avoir";-1;1)

    A+
    1
  4. agri63
     
    Merci beaucoup à tout les deux.

    Est-ce-que je peux profiter de vos connaissance encore un peu.

    J' ai une macro pour enregistrer mais facture en PDF.
    Cela fonctionnement bien.Mais mon problème n 'enregistre pas sur mon disque " j ", mais sur le " C " dans le dossier utilisateur, Mes document.
    Voici la macro :
    'export en pdf

    info1 = Sheets("facture").Range("F9")
    info2 = Sheets("facture").Range("H4")
    nom = info1 & "-" & info2 & "-" & ".xls"
    ThisWorkbook.Save
    ThisWorkbook.SaveAs (nom)
    ThisWorkbook.Activate
    ChDir "J:\IBRYAGRI\Facture"
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Quality:= _
    xlQualityStandard, includeDocProperties:=True, IgnorePrintAreas:=False, _
    From:=1, To:=1, openAfterPublish:=True


    Merci Pour vos lumières
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. agri63
     
    Ok sa fonctionne je suis très content. Merci Gyrus
    Une petite dernière, juste pour la route...

    Si dans une cellule par exemple "G2" j'écris "Avoir" à place de "facture".
    Connais tu une formule pour que ma colonne "prix unitaire" exemple de F18 à F28 passe en négatif automatiquement?
    Encore merci
    0
  7. agri63
     
    Merci la pour la formule, j' ai intégré ma recherche verticale et "erreur si" pour revenir à une cellule blanche, si il y a pas article sur les lignes.
    Sa fonctionnement très bien
    Un Très grand merci Gyrus
    Bonne journée
    0