XL 2016 Vlookup - VBA

Laure_gi

XLDnaute Nouveau
Bonjour à tous,

Etant quelque peu novice à l'utilisation de VBA, je bloque sur un problème qui me paraît pourtant simple. J'ai eu beau écumer les forums en tout genre, aucune des solutions données n'a semblé marcher.

Ce que je veux faire: J'ai une liste de techniciens avec leur managers attitrés. Lorsque j'extrais les données de mes techniciens sur Excel, je souhaite que le nom de leurs managers s'affichent en face de leur n° perso d'entreprise. Il n'y a qu'un manager par technicien. Sur le tableau excel, c'est une formule VLOOKUP toute simple, mais en VBA je bloque depuis 3 jours sur une seule et même ligne.

J'ai une 1e feuille, "Extract2": les données par technicien (plusieurs lignes par technicien).
Feuille "managers": tableau avec en colonne B le nom de chaque technicien, en colonne C le nom du manager attitré.

Mon code:

Sub extract()
Dim State() As Variant
Dim derniereligne As Integer
Dim manager() As String
Dim sheet1 As Worksheet
Dim sheet2 As Worksheet

Set sheet1 = ThisWorkbook.Sheets("Extract2")
Set sheet2 = ThisWorkbook.Sheets("Managers")

sheet1.Select
derniereligne = Range("A1").End(xlDown).Row

For i = 1 To derniereligne

manager(i) = Application.VLookup(sheet1.Range(Cells(i,26)), sheet2.Range("$B$4:$C$461"), 2, False)


Cells(i, 30).Value = manager(i)
Next i

End Sub



Cette solution me paraît la meilleure, mais j'ai toujours l'erreur 1004 Method_range of object Worksheet failed.

J'espère que ma question est claire :)
Merci
 

Laure_gi

XLDnaute Nouveau
Caillou, merci encore de ta réponse, mais l'erreur reste la même apparemment...
Je passe par un tableau parce que j'ai appris en en utilisant beaucoup, j'ai essayé de faire sans mais c'était beaucoup moins clair pour moi !
Cela dit si quelqu'un est inspiré sans tableau je suis preneuse aussi :)
 

Caillou

XLDnaute Impliqué
Tu l'as mis où le redim ?
Car mois j'ai testé comme ceci et ca fonctionne (j'ai adapté les cellules)
Sub extract()
Dim State() As Variant
Dim derniereligne As Integer
Dim manager() As String
Dim sheet1 As Worksheet
Dim sheet2 As Worksheet

Set sheet1 = ThisWorkbook.Sheets("Extract2")
Set sheet2 = ThisWorkbook.Sheets("Managers")

sheet1.Select
derniereligne = Range("A1").End(xlDown).Row

For i = 1 To derniereligne
ReDim Preserve manager(i)
manager(i) = Application.WorksheetFunction.VLookup(sheet1.Cells(i, 1), sheet2.Range("B4:C6"), 2, False)
ActiveCell = Application.VLookup(Feuil1.Cells(1, 1).Value, Feuil2.Range("B4:C6"), 2, False)

Cells(i, 3).Value = manager(i)
Next i

End Sub


Sans tableau
tu remplaces simplement manager(i)=application.vlookup(...
par cells(i,3)=application.vlookup(...

Caillou
 

Laure_gi

XLDnaute Nouveau
Youpi! Ca marche!
En couplant tes conseils et mes recherches sur Internet, voici une solution qui fonctionne:

ReDim Preserve manager(i)
On Error Resume Next
manager(i) = Application.VLookup(sheet1.Cells(i, 26).Value, sheet2.Range("B4:C461").Value, 2, False)
On Error GoTo 0

Je ne sais pas si c'est conventionnel ou si c'est un horrible code, mais en tout cas ça marche :)

Merci beaucoup à toi !
Bonne journée,

Laure
 

Discussions similaires

Réponses
5
Affichages
181
Réponses
2
Affichages
234
Réponses
0
Affichages
148
Réponses
7
Affichages
347

Statistiques des forums

Discussions
312 203
Messages
2 086 182
Membres
103 152
dernier inscrit
Karibu