VBA - rng.formula selon contexte
Bonjour le forum,
Je me retourne encore une fois vers vous pour tenter de résoudre mon problème.
Alors voilà, j'ai une formule que je veux appliquer à une nombre de cellule non fixe. Mais dès lors que je lance la macro avec la formule, vba m'indique une erreur d'objet (propriété non géré par cet objet). Pourtant quand je fais un test avec pour formule =1, tout fonctionne. En conséquence, je pense que cela a avoir avec ma formule mais je ne comprend pas d'ou cela viens.
Je me tourne donc vers la communauté
Voici le code qui en fonctionne pas:
Private Sub Vlookup()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
If ThisWorkbook.ActiveSheet.Range("B1").Value = "" Then Exit Sub
Dim mwb As Workbook
Dim lastrow1 As Long
Dim rng As Range
Set mwb = Workbooks.Open(FileName:=ThisWorkbook.ActiveSheet.Range("B1").Value)
lastrow = Range("B3:B" & Rows.Count).End(xlDown).Row
Set rng = Range("C3:X" & lastrow)
With ThisWorkbook.ActiveSheet
.rng.Formula= "=IFERROR(VLOOKUP($B3,'[" & mwb.Name & "]Global sourcing prices'!$D:$AG, MATCH(C$1,'[" & mwb.Name & "]Global sourcing prices'!$D$3:$AG$3,0), 0),0)"
Application.Calculation = xlCalculationAutomatic
.rng.Value = rng.Value
.Range("B1").ClearContents
End With
mwb.Close False
Set mwb = Nothing
Set rng = Nothing
Application.ScreenUpdating = True
End Subet le code qui fonctionne :
Sub test()
Dim rng As Range
Dim lastrow As Long
lastrow = Range("B3:B" & Rows.Count).End(xlDown).Row
Set rng = Range("C3:X" & lastrow)
rng.Formula = "=1"
End SubJe suis certain que c'est une chose tout bête mais ca fait quelques heures que je suis bloqué
Merci d'avance et bonne journée
Bonjour,
A quel endroit intervient cet erreur ?
Cordialement,
Hello IronBoule,
L'erreur est à cet endroit
.rng.Formula= "=IFERROR(VLOOKUP($B3,'[" & mwb.Name & "]Global sourcing prices'!$D:$AG, MATCH(C$1,'[" & mwb.Name & "]Global sourcing prices'!$D$3:$AG$3,0), 0),0)"Et une autre apparaît aussi ici
.rng.Value = rng.ValueBonjour,
Tu initialises la variable rng en lui affectant une plage sur le classeur que tu viens juste d'ouvrir. On ne sait pas sur quelle feuille, la feuille active, c'est la loterie si le classeur contient plus d'une feuille.
Et ensuite, dans une instruction With tu veux raccorder cette plage à la feuille active de ton classeur de travail !
1) rng est une variable, initialisée on n'a plus à la faire référer à un autre objet, l'objet qu'elle représente est parfaitement défini par l'énoncé de la variable (autrement dit : jamais de point devant un nom de variable !)
2) tu veux raccorder cette plage à une feuille d'un classeur alors qu'elle appartient à une autre feuille d'un autre classeur ! Difficile... !
Cordialement.
Hello MFerrand,
C'est pas la première fois que tu viens à mon secours haha, merci
Je n'ai pas les compétences pour avoir une syntaxe parfaite
Voici le code modifié et en état de marche
Private Sub Vlookup()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
If ThisWorkbook.ActiveSheet.Range("B1").Value = "" Then Exit Sub
Dim mwb As Workbook
Dim lastrow As Long
Dim rng As Range
Set mwb = Workbooks.Open(FileName:=ThisWorkbook.ActiveSheet.Range("B1").Value)
lastrow = ThisWorkbook.ActiveSheet.Range("B3:B" & Rows.Count).End(xlDown).Row
Set rng = ThisWorkbook.ActiveSheet.Range("C3:X" & lastrow)
rng.Formula = "=IFERROR(VLOOKUP($B3,'[" & mwb.Name & "]Global sourcing prices'!$D:$AG, MATCH(C$1,'[" & mwb.Name & "]Global sourcing prices'!$D$3:$AG$3,0), 0),0)"
Application.Calculation = xlCalculationAutomatic
rng.Value = rng.Value
ThisWorkbook.ActiveSheet.Range("B1").ClearContents
mwb.Close False
Set mwb = Nothing
Set rng = Nothing
Application.ScreenUpdating = True
End SubIl est certainement simplifiable !