Equation Excel pour le convertir en code VBA
Bonsoir
Salutations à vous tous
S'il vous plaît aidez-moi avec cette équation pour le convertir en code vba Depuis cette équation devient lourde avec moi en feuille excel
{=IFERROR(INDEX(Mvts!$S$2:$S$200000;MATCH(1;IF(Mvts!$A$2:$A$200000=$J2;IF(Mvts!$V$2:$V$200000>0;1));0));"")}Et celui-ci aussi
=SUMPRODUCT($G$2:G2-$I$2:I2;--($B$2:B2=B2);--($U$2:U2=U2))Edit modo : mise en forme demande modifiée, merci d'y faire attention SVP
Bonjour,
si on doit passer par une macro, il faut que tu nous dises dans quelle(s) feuille(s), quelles colonnes et quelles lignes se trouvent tes formules, avec un fichier exemple représentatif de la structure de tes feuilles et quelques données.
bonjour,
une proposition : 2 macros pour remplacer tes fonctions
etatstock pour faire le calcul du stock en colonne V et W de la feuille mvts
majddv pour faire la mise à jour de la date de validité sur la feuille stocks
à monsieur h2so4
Merci
C'est une fonction. Veuillez expliquer l'équation si vous le pouvez
bonjour,
désolé, j'ai oublié de mentionner que l'exécution de ces macros doit être lancée par alt-f8. Il faut sans doute commencer par etatstock et faire suivre par majddv.
à monsieur h2so4
Merci
Je ne veux pas dire comment activer la macro
Je ne veux pas dire comment expliquer l'équation elle-même
bonsoir,
voici quelques explications concernant les macros, si j'ai bien compris ce que tu demandes
Sub majddv()
'mise à jour date de validité
Set ws1 = Sheets("stock") 'ws1 = feuille stock
Set ws2 = Sheets("mvts") 'ws2= feuille mvts
dl1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row 'dl1=dernière ligne stock
dl2 = ws2.Cells(Rows.Count, 2).End(xlUp).Row 'dl2=dernière ligne mvts
ws2.Copy after:=Sheets(Sheets.Count) 'on prend une copie de mvts
Set ws2 = ActiveSheet 'ws2=copie de mvts
ws2.Range("A1").Resize(dl2, 23).Sort key1:=ws2.Range("A1"), order1:=xlAscending, Header:=xlYes 'on trie sur la colonne a
stockcolj = ws1.Range("J1").Resize(dl1, 1) ' table colonne j de stock
mvtscola = ws2.Range("A1").Resize(dl2, 1) 'table colonne a de mvts
mvtscols = ws2.Range("S1").Resize(dl2, 1) 'table colonne s de mvts
mvtscolv = ws2.Range("V1").Resize(dl2, 1) 'table colonne v de mvts
ReDim tabddv(2 To dl1, 1 To 1) 'on dimensionne une table pour contenir les dates de validité trouvées
ptr1 = 2 ' ptr de ligne sur données de stock
ptr2 = 2 'ptr de ligne sur données de mvts
Do
If stockcolj(ptr1, 1) = mvtscola(ptr2, 1) Then 'code lien de stock= code lien de mvts
If mvtscolv(ptr2, 1) > 0 Then 'colonne V de mvts > 0
tabddv(ptr1, 1) = mvtscols(ptr2, 1) 'oui on copie la date de validité dans la table des dates de validité en ligne ptr
ptr1 = ptr1 + 1 'on passe à la ligne suivante de stock
ptr2 = ptr2 + 1 'on passe à la ligne suivante de mvts
Else 'colonne v <= 0
ptr2 = ptr2 + 1 'on passe à la ligne suivante de mvts
End If
ElseIf stockcolj(ptr1, 1) < mvtscola(ptr2, 1) Then 'code lien de sotck < code lien de mvts
tabddv(ptr1, 1) = "" 'on a pas trouvé le lien dans mvts, on met la date à ""
ptr1 = ptr1 + 1 ' on passe à la ligne suivante de stock
Else ' sinon
ptr2 = ptr2 + 1 'on passe à la ligne suivante de mvts
End If
Loop Until ptr1 > dl1 Or ptr2 > dl2 'on boucle jusqu'à ce que on ait atteint la fin de stock ou la fin de mvts
ws1.Range("m2").Resize(dl1, 1) = tabddv 'on copie la table des dates de validité trouvées dans stock
Application.DisplayAlerts = False
ws2.Delete 'on supprime la copie de mvts
Application.DisplayAlerts = True
End Sub
Sub etatstock()
Set ws3 = Sheets("mvts") 'ws3=feuille mvts
dl2 = ws3.Cells(Rows.Count, 2).End(xlUp).Row 'dl2=dernière ligne de mvts
ws3.Copy after:=Sheets(Sheets.Count) 'copie de mvts
Set ws2 = ActiveSheet ' ws2=copie de mvts
ws2.Range("X1") = 1 'on numérote les lignes de mvts en colonne X
ws2.Range("X2") = 2 'on numérote les lignes de mvts en colonne X
ws2.Range("x1").Resize(2, 1).AutoFill Destination:=ws2.Range("X1").Resize(dl2, 1) 'on numérote les lignes de mvts en colonne X
ws2.Range("A1").Resize(dl2, 24).Sort key1:=ws2.Range("A1"), order1:=xlAscending, Header:=xlYes 'on trie les lignes en ordre de croissant sur le lien
ReDim tabcompt(2 To dl2, 1 To 2) 'on prépare un tableau pour recevoir le resultat des colonnes V et W
art = "" 'numéro d'article en cours
For i = 2 To dl2 'on parcourt les lignes de mvts
If ws2.Cells(i, 2) <> art Then ' si art de la ligne est différent de l'article précédent
If art <> "" Then 'si l'article n'est pas ""
tabcompt(lart, 1) = somt 'on écrit la somme totale dans le tableau des résultats pour la colonne V
End If
lart = i ' on retient le numéro de ligne dans lequel écrire la somme totale pour cet article en colonne V
somt = 0 'somme totale =
art = ws2.Cells(i, 2) 'article en cours est l'article de cette ligne
End If
somt = somt + ws2.Cells(i, "G") - ws2.Cells(i, "I") 'calcul de la somme totale pour cette ligne
tabcompt(i, 2) = somt ' on écrit la somme totale en cours pour cette ligne
Next i
If lart > 0 Then tabcompt(lart, 1) = somt 'on écrit la somme totale pour l'article en cours en colonne V
ws2.Range("V2").Resize(dl2 - 1, 2) = tabcompt 'on copie le tableau des résultats en colonnes V et W
ws2.Range("A1").Resize(dl2, 24).Sort key1:=ws2.Range("X1"), order1:=xlAscending, Header:=xlYes 'on trie dans l'ordre des numéros de lignes
ws2.Range("A1").Resize(dl2, 23).Copy ws3.Range("A1") 'on recopie la copie de mvts sur la feuille mvts
Application.DisplayAlerts = False
ws2.Delete 'on supprime la feuille copie de mvts
Application.DisplayAlerts = True
End Sub