VBA et recopie formule matricielle...optimisation de code ?
2 réponses
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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
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
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
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" <alain.vallon@wanadoo.fr> a écrit dans le message de news:
bl5qm2$au9$1@news-reader4.wanadoo.fr...
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