VBA : convertir code enregistrant "formula array" dans cellule

Résolu/Fermé
Signaler
Messages postés
3696
Date d'inscription
mercredi 11 février 2009
Statut
Modérateur
Dernière intervention
2 décembre 2021
-
Messages postés
3696
Date d'inscription
mercredi 11 février 2009
Statut
Modérateur
Dernière intervention
2 décembre 2021
-
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

Messages postés
16538
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
1 décembre 2021
3 252
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
3696
Date d'inscription
mercredi 11 février 2009
Statut
Modérateur
Dernière intervention
2 décembre 2021
192
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.