[VBA] - runtime error 91 object variable or with block variable not set

Bonjour à tous,

Je suis novice en VBA, et je rencontre un problème avec une macro.

Je dispose de deux feuilles dans mon classeur excel appelées Feuille1 et Feuille2. Me première routine recupère des données de Feuille1. Dans cette routine il y a un appel à une sous-routine qui doit recupérer des données de Feuille2.

Voici le code :

Sub routine1()

Worksheets("Feuille1").Select

...

...

Sous_routine1(cpt) 'Appel à la sous-routine

...

...

End Sub

Sub sous-routine(value as Long)

Dim BW As Single

Dim wsh1 As Worksheet

Set wsh1 = Worksheets("Feuille2")

BW = wsh1.Cells(Range("A1:Z100").Find("BW").Row, Range("A1:Z100").Find("BW").Column + 1).value

End Sub

L'erreur " runtime error 91 object variable or with block variable not set" apparaît à la ligne BW = wsh1.Cells(Range("A1:Z100").Find("BW").Row, Range("A1:Z100").Find("BW").Column + 1).value

Je vous remercie d'avance pour votre aide !

bonjour,

essaie ceci

BW = wsh1.Cells(wsh1.Range("A1:Z100").Find("BW").Row, wsh1.Range("A1:Z100").Find("BW").Column + 1).value

Bonjour,

Cela fonctionne parfaitement ! Merci beaucoup !

Bon ça ne marche pas comme je voudrais...

J'ai modifié quelques éléments pour faciliter la lecture du code et afin d'anticiper une évolution.

Je passe donc en paramètre de la sous-routine la "Worksheet" :

Sub routine1()

Dim Model As String

Model = CStr(Cells(Range("A1:Z100").Find("model").Row, Range("A1:Z100").Find("model").Column + 1).value)

Set WorksheetModel = Worksheets(Model)

Worksheets("Feuille1").Select

'Je travaille ici avec les données de la "feuille 1"

Sous_routine1 cpt, WorksheetModel 'Appel à la sous-routine

End Sub

Sub sous-routine1(value as Long, WorksheetData as Worksheet)

Dim BW As Single

BW = WorksheetData.Cells(WorksheetData.Range("A1:Z100").Find("BW").Row, WorksheetData.Range("A1:Z100").Find("BW").Column + 1).value

End Sub

Et finalement j'ai la même erreur à la même ligne

Merci d'avance pour votre aide...

bonjour,

dans ce cas, pour pouvoir t'aider, ton fichier est nécessaire.

1test.xlsm (17.01 Ko)

Voici le fichier.

Bizzarement le fonctionnement n'est pas toujours le même, car j'arrive de temps en temps a le faire fonctionner... Je ne comprends plus

Bonsoir,

effectivement ce que tu as mis fonctionne sans problème (sauf si tu te mets en mode pas à pas et que tu changes de feuille, entre 2 instructions).

essaie ceci

Sub input_file()

    Dim AircraftModel As String
    Dim cpt_ligne As Long
    Dim WorksheetAircraft As Worksheet

    Worksheets("WB").Select

    '##### INITIALISATION DES DONNEES FIXES
    AircraftModel = CStr(Worksheets("WB").Cells(Range("A1:Z100").Find("Model").Row, Worksheets("WB").Range("A1:Z100").Find("Model").Column + 1).Value)
    Set WorksheetAircraft = Worksheets(AircraftModel)
    cpt_ligne = 15
    create_outputs cpt_ligne, WorksheetAircraft

End Sub
Sub create_outputs(num_ligne As Long, WorksheetData As Worksheet)

    Dim BW As Single
    BW = WorksheetData.Cells(WorksheetData.Range("A1:Z100").Find("BW").Row, WorksheetData.Range("A1:Z100").Find("BW").Column + 1).Value

End Sub
Rechercher des sujets similaires à "vba runtime error object variable with block not set"