VBA : convertir code enregistrant "formula array" dans cellule
Résolu
Arkana0
Messages postés
6902
Statut
Modérateur
-
Arkana0 Messages postés 6902 Statut Modérateur -
Arkana0 Messages postés 6902 Statut Modérateur -
Bonjour,
J'ai un morceau de code VBA qui me pose problème :
Afin de vous aider à comprendre, voici ce que ça peut afficher dans une cellule excel :
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 !
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 !
A voir également:
- VBA : convertir code enregistrant "formula array" dans cellule
- Excel compter cellule couleur sans vba - Guide
- Dépassement de capacité vba ✓ - Forum Excel
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Vba range avec variable ✓ - Forum VB / VBA
1 réponse
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...
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
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.