Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA et recopie formule matricielle...optimisation de code ?

2 réponses
Avatar
Domi
Bonjour à tous,
J'utilise régulièrement cette solution simple et rapide pour recopier des
formules "standard" dans une plage et passer en dur les valeurs trouvées.

With Range("G1", Range("A10000").End(xlUp).Offset(0, 6))
.FormulaR1C1 = "=RC[2]=""07"""
.Value = .Value
End With

Quelle méthode utiliser pour aboutir au même résultat si la formule est
matricielle ?
J'ai bien utilisé cette solution mais elle ne me satisfait pas pleinement
1°) Elle est simple mais beaucoup plus longue longue...
2°) Si j'applique le .Value=.Value j'obtiens des valeurs fausses (ce sont
des dates)

With Range("J16", Range("A10000").End(xlUp).Offset(0, 9))
.FormulaArray = Array("=Formule Matricielle....")
.Value = .Value
End With



J'utilise donc parfois cette solution plus conventionnelle (obtenue avec
l'enregistreur) dont le code est plus lourd mais qui a l'avantage d'être
rapide...
Range("J16").Select
Selection.FormulaArray = "=Formule Matricielle"
Selection.AutoFill Destination:=Range("J16",
Range("A10000").End(xlUp).Offset(0, 9)), Type:=xlFillDefault
Range("J16", Range("A10000").End(xlUp).Offset(0, 9)).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=
False, Transpose:=False

Y-a-t-il une solution qui permette de concilier simplicité et efficacité ?
Merci
Domi

2 réponses

Avatar
AV
With Range("J16", Range("A10000").End(xlUp).Offset(0, 9))
.FormulaArray = Array("=Formule Matricielle....")
.Value = .Value
End With


Normal que les résultats ne soient pas ceux attendus car tu écris la formule sur
une matrice de plusieurs cellules et non dans une cellule avec recopie ensuite
sur la plage (ce qui permet aux réf. relatives de "suivre")

Ca pourrait faire ça :

Sub zzz()
derL = [A65536].End(3).Row
'pour accélérer !
Application.Calculation = xlCalculationManual
[J16].FormulaArray = "=blabliblabla"
[J16].AutoFill Destination:=Range("J16:J" & derL)
Application.Calculation = xlCalculationAutomatic
Range("J16:J" & derL) = Range("J16:J" & derL).Value
End Sub

AV

Avatar
Domi
Ben je comprends pas, la macro plante sur la ligne "=blabliblabla" !

;o)) Elle est excellente ta macro, efficace et rapide, j'adopte et je note
ça dans mes tablettes.
Merci beaucoup
Domi


"AV" a écrit dans le message de news:
bl5qm2$au9$
With Range("J16", Range("A10000").End(xlUp).Offset(0, 9))
.FormulaArray = Array("=Formule Matricielle....")
.Value = .Value
End With


Normal que les résultats ne soient pas ceux attendus car tu écris la
formule sur

une matrice de plusieurs cellules et non dans une cellule avec recopie
ensuite

sur la plage (ce qui permet aux réf. relatives de "suivre")

Ca pourrait faire ça :

Sub zzz()
derL = [A65536].End(3).Row
'pour accélérer !
Application.Calculation = xlCalculationManual
[J16].FormulaArray = "=blabliblabla"
[J16].AutoFill Destination:=Range("J16:J" & derL)
Application.Calculation = xlCalculationAutomatic
Range("J16:J" & derL) = Range("J16:J" & derL).Value
End Sub

AV