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
Merci d'avance pour votre aide
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
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
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.
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.
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 celJe 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