VBA : convertir code enregistrant "formula array" dans cellule

Résolu
Bonjour,

J'ai un morceau de code VBA qui me pose problème :
Cells(ActiveCell.Row, ActiveCell.Column + 1).FormulaArray = "=CONCATENATE(""U"",MIN(IF('Export brut anomalies'!C[-13]=RC[-22],INT(RIGHT('Export brut anomalies'!C[-1],1)),"""")))"

Afin de vous aider à comprendre, voici ce que ça peut afficher dans une cellule excel :
{=CONCATENER("U";MIN(SI('Export brut anomalies'!J:J=A17;ENT(DROITE('Export brut anomalies'!V:V;1));"")))}

Je l'ai obtenu en enregistrant l'exécution d'une formule matricielle. Le soucis est que j'obtiens des formules beaucoup trop lourdes pour leur utilité.
Je voudrais à la place que le code VBA exécute une fonction équivalente à celle décrit et inscrive le résultat dans la cellule.

Pour info, cette formule regarde une référence donnée sur la ligne, puis va chercher dans une autre feuille l'urgence maximum sur tous les travaux renseignés pour cette même référence..

Je vous remercie d'avance pour votre aide !

1 réponse

  1. Contributeur
    Bonjour

    Beaucoup de choses difficiles à comprendre dans ta demande:
    Tu construis un tableau avec les lignes où il y a la valeur de A17 colonne J dans la feuille "export brut..."
    alors pourquoi demander l'urgence maximum ?
    de plus est ce min ou max ?

    pour
    ENT(DROITE('Export brut anomalies'!V:V;1));"")))
    pourquoi "ENT" puisque tu extrait le dernier caractère de la donnée en colonne V:droite(.......,1)

    le code ici est pour le principe et fait à l'aveugle, donc...

    Option Explicit
    '{=CONCATENER("U";MIN(SI('Export brut anomalies'!J:J=A17;ENT(DROITE('Export brut anomalies'!V:V;1));"")))}
    Sub cccc()
    Dim Ref, Nbre As Integer, T_out, Lig As Integer, Cptr As Integer

    Application ScreenUpdating = False
    Ref = ActiveSheet.Range("A17")
    With Sheets("Export brut anomalies")
    Nbre = Application.CountIf(.Columns("J"), Ref)
    If Ref = 0 Then GoTo vide
    ReDim T_out(1 To Nbre)
    Lig = Cells.Rows.Count
    For Cptr = 1 To Nbre
    Lig = .Columns("J").Find(Ref, .Cells(Lig, "J"), xlValues).Row
    T_out(Cptr) = "U" & Right(.Cells(Lig, "V"), 1)
    Next
    End With

    With ActiveSheet.ActiveCell
    .Offset(0, 1).Resize(Nbre, 1) = Application.Transpose(T_out)
    End With
    Exit Sub
    vide:
    MsgBox Ref & "inconnu dans la feuille Export brut anomalies", vbCritical
    End Sub

    1
    1. Modérateur
      Bonjour et merci pour ta réponse,

      En fait je cherchais plus quelque chose qui soit à ma formule ce que le [...].Value = SumIf est au [...].FormulaLocal = "=SOMME.SI. Mais à défaut je vais m'inspirer de ce code.

      Pour les explications demandées :

      - J'ai pris une ligne en exemple, il y en a plusieurs (nombre indéterminé pour chaque fois) qui fonctionnent sur le même principe.
      - Il y a trois niveau d'urgence : U0, U1 et U2, le système est dégressif : la U0 est l'urgence maximum.
      - J'ai mis le ENT() car je pioche mon chiffre dans un texte.
      0