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 Sub

et 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 Sub

Je 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.Value

Bonjour,

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 . J'ai donc modifié le code en conséquence et cela fonctionne, je pense qu'effectivement il est simplifiable mais pour l'instant, j'essaye uniquement de le faire fonctionner...

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 Sub

Il est certainement simplifiable ! Bonne continuation.

Rechercher des sujets similaires à "vba rng formula contexte"