Historiser facture

Bonjour,

Je voudrais créer un macros qui me permette en un clique:

  • d'aller sur les feuilles CALCUL REVIENT et MARGE afin de prendre toutes les donnés qui me permettent de remplir le tableau HISTORISATION (copier et coller des valeurs)
  • d’insérer une ligne après chaque enregistrement de commande
La requête ne doit afficher que les lignes ou il y a un produit dans le fichier d'historisation.

Merci d'avance pour votre aide

29historisation.xlsx (12.81 Ko)
20calcul-revient.xlsx (18.02 Ko)
18marge.xlsx (26.17 Ko)

Bonjour,

Pourquoi dans le fichier Calcul Revient y a-t-il 15 lignes et dans historisation il n'y a que 12 lignes ?

En fait il doit y avoir autant de ligne sur HISTORISATION que sur CALCUL REVIENT

J'ai remplis le fichier pour donné un exemple du format que je souhaitais avoir

Cdt

Bonsoir,

Une proposition à tester.

Je n'ai pas commenter la procédure VBA je le ferai après si c'est nécessaire.

Il faut que les trois fichiers soient ouverts

28historisation.xlsm (35.05 Ko)

Bonjour Robjam,

J'ai testé ta proposition mais la macro reprend a chaque fois les entêtes du fichier alors que cela est déjà défini.

De plus je voudrais avoir le nombre de produits qui se trouve sur le fichier CALCUL REVIENT (exactement)

Merci pour ta proposition

Cdt

NDS

Bonjour,

Je ne comprends pas ceci

la macro reprend a chaque fois les entêtes du fichier alors que cela est déjà défini

Quant à la Quantité cela ne se trouvait pas sur l'exemple.

Dans quelle colonne de Calcul revient se trouve la quantité. Dans DD colonne E?

Expliquez moi ce que veux dire 'Les entêtes du fichier'

Et dites moi aussi si c'est ce que vous vouliez. A part la Quantité. Je m'en occuperai dès réception de votre réponse.

Bjr,

En PJ j'ai mis le résultat du test de votre macro

lorsque je dis "la macro reprend à chaque fois les entêtes du fichier alors que cela est déjà défini" je parle du fait que lors de l'historisation j'ai encore "Désignation, IR HTVA, PR HTVA etc " qui revient alors c'est déjà prédéfini en entête.

Concernant les quantités, ils sont à extraire dans un autre fichier que je n'ai pas fini d'élaborer mais que je rajouterai après.

En outre je voudrais avoir le nombre de produits qui se trouve sur le fichier CALCUL REVIENT (exactement)

Merci de ta prompte réponse

NDELLA


j'ai oublié de joindre le fichier

Encore merci

14historisation.xlsm (35.57 Ko)

Re,

Chez moi je n'ai pas ce défaut de répétition des entêtes.

Il faudrait me renvoyer les deux autres fichier Calcul Revient et Marges car c'est que quelques choses a changer dans ces fichiers. N'avez vous pas modifier un de ces deux fichiers entre temps.

Dans calcul revient dans quelle colonne se trouve le nbre de produits?

Chez moi voilà ce que j'obtiens. Voir fichier joint.

21historisation.xlsm (37.11 Ko)

Je vous renvois les fichiers pour que vous puissiez vérifié

Quand je dis le nombre de produits c'est parce-que lors de l’exécution de la commande chez moi ne s'affiche qu'un seul produit.

En fait je veux parlé de la liste des produits qui se trouve dans la colonne A.

15marge.xlsx (26.17 Ko)
20historisation.xlsm (37.27 Ko)
19calcul-revient.xlsx (18.02 Ko)

Re,

Si je comprends bien dans la commande 12072 il y a 15 produits.

Où faut-il placer cette valeur dans Historisation ?

on est bien dans la commande 12072 et il y a bien 15 produit et se que j’essaie de t'expliquer c'est que je voudrais que quand il y a 20 produits ne s'enregistre que les 20, s'il y a 100 historisation des 100 et s'il y a n donc les n produits

Je reprécise encore chez moi ne s'affiche qu'un seul produit quand je teste la macro

Re,

Je sais pourquoi vous avez ce problème. Dans la colonne A du fichier Calcul Revient de la ligne 26 à 54 on pourrait croire que les cellules de A26 à A54 sont vides or quand on regarde de plus près il y a des espaces (invisibles) dans ces cellules ce qui fausse le calcul de la dernière ligne renseignée au lieu de 25 normalement, à cause de ces espace on obtient 10 ce qui fausse toute la macro.

Il faut absolument effacer le contenu des cellules de A26 à A54 pour que ça fonctionne correctement..

Pour les nombres de produits je ne comprends toujours pas ce que vous voulez ni où doit s'afficher ce nombre dans Historisation.

Si vous parlez du nombre de lignes à historiser la macro ne transfère que le nombre de ligne de la commande. Faite un essai créer une nouvelle commande 12073 par exemple avec 3 lignes et vous verrez qu'il ne sera transférer que trois lignes.

Mille merci Robjam

vous m'avez rendu un énorme service

Parcontre il y a des parties du code que je ne comprend pas parceque j'utile VBA depuis peu, serai t_il possible d'avoir certaine explications?

Encore merci

Re,

Dites-moi ce qui est difficile pour vous et je vous répondrai.

Bonjour R.J

Cette partie de la commande je ne la comprend pas

'Lecture ligne par ligne

For Each cel In Range(Cells(PremLig, 1), Cells(DerLig, 1))

Libellé = cel

Quantité = cel.Offset(0, 4)

Indice1 = cel.Offset(0, 5)

PMPR1 = cel.Offset(0, 6)

Indice2 = cel.Offset(0, 11)

PMPR2 = cel.Offset(0, 12)

merci

NDS

Bonjour,

J'ai ajouter quelques commentaires dans la procédure (surlignés)

'Activation de Calcul Revient
Workbooks("Calcul Revient.xlsx").Activate
'Déterminer la 1ère et dernière ligne concernant la commandePremLig = 11
DerLig = Range("A54").End(xlUp).Row ' vaut 25 dans la commande 12072
'Lecture des données fixes de la commandeRefCde = Range("H2")
DateCde = Range("H3")
'Lecture ligne par ligne du nom du produit dans la colonne A de Calcul Revient
'Si on traduit la ligne For each cel in Range(cells(PremLig,1),Cells(DerLig,1)
'Pour cahque cellule de la plage A11:A25 on exécute les instructions entre For.... et Next cel mais une ligne à la fois
'On inscrit les valeurs lues dans des variables Libellé, Quantité, Indice1, PMPR1 etc
'Cel se trouve en colonne A cel.Offset(0,6) permet de lire la valeur dd la même ligne que cel d'où le 0 le 6 veux dire qu'il faut lire 6 cellules
'plus loin que A soit en colonne G ou ce trouve le PR HTVA qui sera écrit en tant que PMPR dans Historisation

For Each cel In Range(Cells(PremLig, 1), Cells(DerLig, 1))
    Libellé = cel
    Quantité = cel.Offset(0, 4)
    Indice1 = cel.Offset(0, 5)
    PMPR1 = cel.Offset(0, 6)
    Indice2 = cel.Offset(0, 11)
    PMPR2 = cel.Offset(0, 12)
'Puis on doit lire dans le fichier Marge
    'Lecture Indice1 et Indice2 dans Marge    
Workbooks("MARGE.xlsx").Activate
    PrLig = 6
    DrLig = Range("A" & Rows.Count).End(xlUp).Row
    Marge1 = "": Marge2 = ""
    For Each cel2 In Range(Cells(PrLig, 1), Cells(DrLig, 1))
        If Left(cel2, Len(cel2) - 5) = Libellé And cel2.Row Mod 2 = 0 Then
            Marge1 = cel2.Offset(0, 5)
        Else
            If Left(cel2, Len(cel2) - 5) = Libellé Then Marge2 = cel2.Offset(0, 5)
        End If
        If Marge1 <> "" And Marge2 <> "" Then Exit For
    Next cel2

  'Copie dans Historisation   
 Workbooks("HISTORISATION.xlsm").Activate
   'Recalcule du dernier n° de ligne renseignée    
Lig1 = Range("A" & Rows.Count).End(xlUp).Row
   'Copie des données lues dans calcul revient    
Cells(Lig1 + 1, 1) = DateCde
    Cells(Lig1 + 1, 2) = RefCde
    Cells(Lig1 + 1, 5) = Libellé
    Cells(Lig1 + 1, 7) = Indice1
    Cells(Lig1 + 1, 8) = PMPR1
    Cells(Lig1 + 1, 9) = Marge1
    Cells(Lig1 + 1, 10) = Indice2
    Cells(Lig1 + 1, 11) = PMPR2
    Cells(Lig1 + 1, 12) = Marge2
  'Retour dans calcul revient    Workbooks("Calcul Revient.xlsx").Activate

Next cel

Je pense qu'il faut que je continu a apprendre le langage VBA parce que je pense que mon niveau ne me permet pas de comprendre certaine ligne.

Merci quand même pour ton aide

serai t-il possible que je t'envoie un message privé si j'ai un autre soucis de ce genre

Cdt NDELLA

Bjr,

je reviens sur ce poste car j'ai un nouveau fichier avec a peu prés le meme tableau mais pas tout a fait le meme format

je voudrais enregistrer l'historique des calculs de revient, j'ai voulu adapter par rapport a ce qui a été déja fait mais c'est assez confus

je vous met en PJ les 2 fichiers le calcul des revient et l'historique

le code

Dim cel As Range, cel2 As Range

Sub Transfert()

Dim PremLig As Integer, DerLig As Integer, PrLig As Integer, DrLig As Integer, Lig1 As Integer

Dim Libllé, Indice1, Prixrevient1, Indice2, Prixrevient2, Tauxmarque1, Tauxmarque2, Frs, Unité, RefarticleCP, Qté, Prixunitaire, DD, Prixvente1, Prixvente2, Tauxmarge1, Tauxmarge2, Coef1, Coef2

Dim DateCde As Date, RefCde As Long

Application.ScreenUpdating = False

'Activation de Calcul Revient

Workbooks("liste15.xlsx").Activate

'Déterminer la 1ère et dernière ligne

PremLig = 11

DerLig = Range("A70").End(xlUp).Row

'Lecture des données fixes

Frs = Range("C2")

RefCde = Range("C3")

DateCde = Range("C4")

Nature = Range("C5")

'Lecture ligne par ligne

For Each cel In Range(Cells(PremLig, 1), Cells(DerLig, 1))

Libellé = cel

Frs = cel.Offset(0, 4)

Unité = cel.Offset(0, 5)

RefarticleCP = cel.Offset(0, 6)

Qté = cel.Offset(0, 7)

Prixunitaire = cel.Offset(0, 8)

DD = cel.Offset(0, 9)

Indice1 = cel.Offset(0, 10)

Prixrevinet1 = cel.Offset(0, 11)

Prixvente1 = cel.Offset(0, 12)

Tauxmarge1 = cel.Offset(0, 13)

Coef1 = cel.Offset(0, 14)

Tauxmarque1 = cel.Offset(0, 15)

Indice2 = cel.Offset(0, 16)

Prixrevinet2 = cel.Offset(0, 17)

Prixvente2 = cel.Offset(0, 18)

Tauxmarge2 = cel.Offset(0, 19)

Coef2 = cel.Offset(0, 20)

Tauxmarque2 = cel.Offset(0, 21)

Nature = cel.Offset(0, 22)

'Copie dans Historisation

Workbooks("HISTORISATION4.xlsx").Activate

Lig1 = Range("A" & Rows.Count).End(xlUp).Row

Cells(Lig1 + 1, 1) = RefCde

Cells(Lig1 + 1, 2) = DateCde

Cells(Lig1 + 1, 5) = LibellearticleCP

Cells(Lig1 + 1, 7) = Frs

Cells(Lig1 + 1, 8) = Unité

Cells(Lig1 + 1, 9) = RefarticleCP

Cells(Lig1 + 1, 10) = Qté

Cells(Lig1 + 1, 11) = Prixunitaire

Cells(Lig1 + 1, 12) = DD

Cells(Lig1 + 1, 13) = Indice1

Cells(Lig1 + 1, 14) = Prixrevient1

Cells(Lig1 + 1, 15) = Prixvente1

Cells(Lig1 + 1, 16) = Tauxmarge1

Cells(Lig1 + 1, 17) = Coef1

Cells(Lig1 + 1, 18) = Tauxmarque1

Cells(Lig1 + 1, 19) = Indice2

Cells(Lig1 + 1, 20) = Prixrevient2

Cells(Lig1 + 1, 21) = Prixvente2

Cells(Lig1 + 1, 22) = Tauxmarge2

Cells(Lig1 + 1, 23) = Coef2

Cells(Lig1 + 1, 24) = Tauxmarque2

Cells(Lig1 + 1, 25) = Nature

Workbooks("liste15.xlsx").Activate

Next cel

Application.ScreenUpdating = True

Workbooks("HISTORISATION4.xlsx").Activate

'Insertion d'une ligne vide à la fin en plaçant un ' invisible dans la 1ère cellule vide la colonne A

Cells(Lig1 + 2, 1) = "'"

End Sub

7liste15.xlsx (26.14 Ko)
10historisation4.xlsx (33.18 Ko)

Bonjour,

Testez ceci

13historisation4.xlsx (34.66 Ko)
14liste15.xlsm (42.27 Ko)
Rechercher des sujets similaires à "historiser facture"