Numérotation automatique de factures

Résolu
Bonjour,
je coince sur une facture que je tente d'automatiser.
d'une part, j'ai une facture et d'autre part, j'ai un historique.
Lorsque je sauvegarde ma facture à l'aide du bouton ad hoc, je voudrais que les renseignements de la dite facture s'inscrivent dans la feuille "Historique_facture", mais quelque chose ne va pas dans mon code.
je vous joins une copie de la facture, ainsi qu'une copie de mon code.
Merci de votre aide.

Sub Archiver()
ligne = Sheets("Historique_facture").Range("A2").End(xlDown).Row + 1
Sheets("Historique_facture").Range("A" & ligne).Value = Sheets("Facture").Range("B10").Value
Sheets("Historique_facture").Range("B" & ligne).Value = Sheets("Facture").Range("B12").Value

Sheets("Historique_facture").Range("C" & ligne).Value = Sheets("Facture").Range("E10&" - "&G10").Value
Sheets("Historique_facture").Range("D" & ligne).Value = Sheets("Facture").Range("E11").Value
Sheets("Historique_facture").Range("E" & ligne).Value = Sheets("Facture").Range("E12").Value

Sheets("Historique_facture").Range("F" & ligne).Value = Sheets("Facture").Range("B11").Value
Sheets("Historique_facture").Range("G" & ligne).Value = Sheets("Facture").Range("G38").Value
Sheets("Historique_facture").Range("H" & ligne).Value = Sheets("Facture").Range("G40").Value

Sheets("Facture").Range("D12:E27").ClearContents
Sheets("Facture").Range("E5:G5").ClearContents

Sheets("Facture").Range("C6").Value = Sheets("facture").Range("C6").Value + 1

End Sub

ce sera plus aisé avec l'exemple de ma facture dans ci joint :

https://www.cjoint.com/c/JEljUZFLIER

5 réponses

  1. Bonjour

    Pas mal d'erreur dans ton code
    Sub Archiver()
    ligne = Sheets("Historique_facture").Range("A" & Rows.Count).End(xlUp).Row + 1
    Sheets("Historique_facture").Range("A" & ligne).Value = Sheets("Facture").Range("B10").Value
    Sheets("Historique_facture").Range("B" & ligne).Value = Sheets("Facture").Range("B12").Value
    
    Sheets("Historique_facture").Range("C" & ligne).Value = Sheets("Facture").Range("E10").Value
    Sheets("Historique_facture").Range("D" & ligne).Value = Sheets("Facture").Range("G10").Value
    Sheets("Historique_facture").Range("E" & ligne).Value = Sheets("Facture").Range("E11").Value
    Sheets("Historique_facture").Range("F" & ligne).Value = Sheets("Facture").Range("E12").Value
    Sheets("Historique_facture").Range("G" & ligne).Value = Sheets("Facture").Range("F12").Value
    
    Sheets("Historique_facture").Range("H" & ligne).Value = Sheets("Facture").Range("E13").Value
    Sheets("Historique_facture").Range("I" & ligne).Value = Sheets("Facture").Range("G38").Value
    Sheets("Historique_facture").Range("J" & ligne).Value = Sheets("Facture").Range("G40").Value
    
    Sheets("Facture").Range("D12:E27").ClearContents
    Sheets("Facture").Range("E5:G5").ClearContents
    Sheets("Facture").Range("C6").Value = Sheets("facture").Range("C6").Value + 1
    End Sub

    Cdlmnt
    1
    1. Merci beaucoup, je vais étudier mes erreurs de plus près.
      0
    2. @simkmilOuf !! j'ai tout corrigé et super , ça fonctionne.
      je vais maintenant remplir une feuille avec les coordonnées des clients et faire cela sous forme de liste déroulante. Pour un marchand de pneus e village, il ne doit pas avoir des centaines de clients.
      ensuite, je verrai si je peux lui faire une petite gestion de stock en indiquant ses entrées et ses sorties.
      Merci infiniment.
      0
  2. Bonjour
    Ci joint ma solution...
    Mais visiblement, tu pars dans tous les sens.
    Stock: as tu une référence à toi ou utilise tu celle des fournisseurs?
    Je te propose: saisi de la référence et le reste se rempli automatiquement
    Saisi nom client si déjà dans ton fichier le reste se rempli automatiquement
    Donc une page entrée, une page sortie, une page stock, une page client
    une page facture et une page historique
    Si ça t'intéresse tu me fais signe...
    https://www.cjoint.com/c/JElnU4wsNbb
    A+ François
    0
    1. Contributeur
      Bonjour
      un exemple- principe différent EN peu de lignes pour résoudre le transfert (attention aux points devant les "[")


      Sub yy()
      With Sheets(1)
      liste = Array(.[B10], .[B12], .[E11]) 'etc....
      End With

      With Sheets(2)
      ligvide = .Columns("A").Find("", .Range("A1")).Row
      .Cells(ligvide, "A").Resize(1, UBound(liste) + 1) = liste
      .Activate
      End With

      End Sub


      0
      1. Magnifique, je vais essayer cela parallèlement à ce que j'ai déjà réussi. Un code plus court, c'est encore mieux.
        Merci beaucoup
        0
    2. C'est vrai que dans la mesure où les cellules cibles forment une plage, la proposition de michel allège nettement le code. Ce qui donne
      Sub Archivage()
      Dim liste(), ligvide As Long
      With Sheets("Facture")
        liste = Array(.[B10], .[B12], .[E10], .[G10], .[E11], .[E12], .[F12], .[E13], .[G38], .[G40])
      End With
      With Sheets("Historique_facture")
        ligvide = .Columns("A").Find("", .Range("A1")).Row
        .Cells(ligvide, "A").Resize(1, UBound(liste) + 1) = liste
        .Activate
      End With
      End Sub

      https://mon-partage.fr/f/08C75kEO/

      Bonne soirée
      0
      1. Contributeur
        Merci, CCM ;o)
        cordialement
        0
      2. je viens d'essayer, en effet très bien avec un code bcp plus court. Une seule chose : la numérotation ne s'incrémente pas, mais je pense qu'il suffit que j'ajoute la ligne:
        Sheets("Facture").Range("B10").Value= Sheets("Facture").Range("B10").Value+1
        et cela incrémentera mes factures.

        Un tout grand merci.
        0
      3. @SimKmilBonjour,
        Eh bien non car votre numérotation et en texte..
        Je vous propose cette ligne de code:
        Sheets("Facture").Range("B10").Value = Left(Range("b10"), 5) + Format(CInt(Right(Range("b10"), Len(Range("b10")) - 5)) + 1, "000")

        Salutations
        Le Pingou
        0
    3. Merci (un peu tard !) mais je n'étais plus revenu ici depuis . Grand lmerci pour votre aide.
      0