Erreur d'objet

Bonjour,

Je dois faire un code qui permette de chercher une valeur d'un fichier 1 dans un fichier2 et si la valeur est trouvée + conditions alors on met une date , si la valeur n'est pas trouvée on ajoute la ligne de la valeur dans le fichier 2.

Dans le code ci-dessous j'ai une erreur 424 Objet Requis à la ligne surlignée. Savez-vous pourquoi ?

En pj un exemple de fichier (les 2 fichiers sont quasi les mêmes).

Merci d'avance.

  • --------------------------------------------------------------------------------------------
  • --------------------------------------------------------------------------------------------

Sub Pilotage_des_feux()

'

' Pilotage_des_feux Macro

'

'déclaration des variables

Dim resultat As Range

Dim valeur As Range

Dim feujour As Range

Dim feuveille As Range

Dim dateorange As Range

Dim datevert As Range

Dim MyFiles() As String

Windows("Pilotage des Feux test.xlsm").Activate

Worksheets("Feuil1").Activate

chemin = Worksheets("Feuil1").Range("A2").Value 'chemin où sont les fichiers

chemin2 = Worksheets("Feuil1").Range("A4").Value 'chemin du fichier matrice

fichier2 = Worksheets("Feuil1").Range("B4").Value 'Fichier matrice

fichier = Dir(chemin)

'ouverture du fichier matrice

ChDir "" & chemin2 & ""

Workbooks.OpenText Filename:= _

"" & chemin2 & "" & fichier2 & ".xls"

'On récupère le nom de l'onglet dans une variable

nomonglet2 = ActiveSheet.Name

'On boucle dans le répertoire définit pour réucpérer tous les fichiers qui sont présents

Do While fichier <> ""

ReDim Preserve MyFiles(j)

MyFiles(j) = fichier

j = j + 1

fichier = Dir()

Loop

Workbooks.Open chemin & MyFiles(0) 'on ouvre le 1er fichier du répertoire

'For j = LBound(MyFiles) + 1 To UBound(MyFiles)

For j = LBound(MyFiles) To UBound(MyFiles) 'on va ouvrir les fichiers du répertoire définit au fur et à mesure pour faire les tests

Workbooks.Open chemin & MyFiles(j)

nomonglet = ActiveSheet.Name 'on récupère le nom de l'onglet dans une variable

Sheets(nomonglet).Activate

pgmitim = "PGM_ ITIM SURVEILLANCE FEU " 'permettra ensuite de récupérer la date de fichier du jour par rapport au nom du fichier du jour

Columns("H:I").EntireColumn.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 'on ajoute 2 colonnes H et I pour pouvoir faire le copier/coller dans le fichier matrice avec le même nombre de colonnes

'Permet de récupérer la date J-1 du fichier du jour (ex : PGM_ ITIM SURVEILLANCE FEUX 20092018, on récupère 19/09/2018)

datewb = Replace(Replace(MyFiles(j), pgmitim, ""), ".xls", "")

datewb = DateSerial(Right(datewb, 4), Mid(datewb, 3, 2), Left(datewb, 2)) - 1

'on compte le nombre de lignes du fichier

Range("A4").Select

Selection.End(xlDown).Select

fin = ActiveCell.Row

For i = 4 To 11 'On va de la valeur 2 à la valeur fin

Set valeur = Sheets(nomonglet).Cells(i, 1) 'la variable valeur aura comme résultat i = 4 à fin et 1 = colonne A (donc A4 à A"fin") - càd n° de référence unique sur lequel on fera la recherche

Set feujour = Sheets(nomonglet).Cells(i, 7) 'la variable feujour aura comme résultat i = 4 à fin et 7 = colonne G (donc G4 à G"fin")

' Orange = "H" & i & "" 'Orange servira à aller sur la case H4 à H"fin"

' Vert = "I" & i & "" 'Vert servira à aller sur la case I4 à I"fin"

Windows("" & fichier2 & ".xls").Activate 'On va sur le fichier matrice

Set resultat = Sheets(nomonglet2).Columns(1).Find(What:=valeur, LookAt:=xlWhole, MatchCase:=False) 'On fait un find sur le fichier matrice pour trouver la donnée "valeur"

Set feuveille = Sheets(nomonglet2).Range("G" & resultat.Row).Select 'on récupère la valeur de la case G4 à G"fin"

Bonjour,

"Set" est utilisé pour définir un objet en lui appliquant toutes les caractéristiques d'un autre objet. Par exemple, en affectant une feuille à un objet feuille.

Or, tu essaies d'appliquer à ta variable objet les caractéristiques d'une action et pas d'un objet, à savoir la sélection d'une plage plutôt que cette plage elle-même. En clair, il faut supprimer le .Select (qui n'a rien à faire là) :

Set feuveille = Sheets(nomonglet2).Range("G" & resultat.Row).Select 
'Devient :
Set feuveille = Sheets(nomonglet2).Range("G" & resultat.Row)

Si il s'agit de stocker une valeur dans un variable, Set est inutile, tu peux écrire : MaVariable = Range("A1").Value par exemple.

PS : le forum dispose d'un outil pour mettre en forme le code et faciliter sa lecture. C'est le bouton </>.

Salut Pedro22,

Merci pour ton explication, c'est maintenant plus clair

Bonne journée.

Merci du retour et bonne journée !

Rechercher des sujets similaires à "erreur objet"