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.

img20230412151421

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
Rechercher des sujets similaires à "equation convertir code vba"