Application Vlookup/Application Match
Bonjour à tous,
Je reviens vers vous car mon code ne fonctionne pas....
Voici mon problème :
contexte :
J'ai deux onglets avec un tableau dans chaque qui sont dans le même classeur,
Dans la premiere feuille "BaseOPE"
en colonne A: Ordre
en colonne B: Type (colonne à remplir)
Dans la deuxième feuille "ListeOT"
en colonne A: Ordre
en colonne B: Type
J'aimerais en VBA importer le type d'Ordre dans le 1er tableau en fonction de la première Colonne (A) du second onglet
Je souhaiterai que le code se répète pour toute la colonne du second onglet
Les deux tableaux n'ont pas le même nombre de lignes
Pourriez vous y jeter un oeil
En vous remerciant d'avance
Voici mon code qui est en échec à la ligne
Code:
TK(R) = Join$(Application.Index(Sheets("listeOT").Columns("A:A").Value, R), "¤")
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| With Sheets("listeOT").Cells(1).CurrentRegion.Rows
ReDim TK$(2 To .Count)
TD = Application.Index(.Offset(1).Resize(.Count - 1), , 2)
For R& = 2 To .Count
TK(R) = Join$(Application.Index(Sheets("listeOT").Columns("A:A").Value, R), "¤")
Next
End With
With Sheets("BaseOPE").Cells(1).CurrentRegion.Rows
ReDim TP$(2 To .Count, 0)
TS = .Columns("A:A").Value
For R = 2 To .Count
v = Application.Match(Join$(Array(TS(R, 1)), "¤"), TK, 0)
If Not IsError(v) Then TP(R, 0) = TD(v, 1)
Next
.Cells(2, 2).Resize(.Count - 1).Value = TP
End With
End Sub |
Temps d'éxécution Macro interminable (Fichier ne répond pas)
Bonjour Marc-L,
J'ai oublié de préciser que le temps d'éxécution de ce code était interminable et plantait systématiquement le fichier...
(même en ayant modifié le faux par false)....:?
La formule de calcul fonctionnant correctement pour la cellule B2 est recherchev(A2,listeOT!$A$1:$D$137659,2,0),
mon souhait est de convertir cette formule en VBA et de créer une boucle pour répéter le code pour toute la colonne...
auriez-vous une solution ???
En vous remerciant d'avance
j'ai essayé de convertir la recherchev en code mais hélas sans succès
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| Sub BaseOPE1()
Dim oRng As Excel.Range
Dim v As Variant, lng As Long, LigFin As Variant, LigFin2 As Variant
LigFin = Sheets("BaseOPE").Cells(Rows.Count, 1).End(xlUp).Row
LigFin2 = Sheets("listeOT").Cells(Rows.Count, 1).End(xlUp).Row
Set oRng = ThisWorkbook.Worksheets("BaseOPE").UsedRange
v = oRng.Value
For lng = 2 To UBound(v, 1)
Sheets("BaseOPE").Range("B2:B" & LigFin).ClearContents
Sheets("BaseOPE").Range("B2:B" & LigFin).Select
v(lng, 2) = Application.VLookup(Range("A2:A" & LigFin), Sheets("listeOT").Range("A2:B" & LigFin2), 2, faux)
Next lng
oRng.Value = v
Set oRng = Nothing
v = Empty
End Sub |