XL 2013 VBA VLOOKUP

Kidcarotte

XLDnaute Junior
Hello la compagnie

J'essaie de faire une fonction VLookUp mais cela ne fonctionne pas comme je le souhaiterai (comme toujours)

Le code "s'execute" sans message d'erreur, mais il n'y a aucun resultat. La colonne J reste vide.
Si vous avez des suggestions.
Voici le code en question

</>
Sub Create_Report_Jess()
On Error Resume Next
Set S1 = Sheets("Ship Plan")
Set S2 = Sheets("Report")
Set S3 = Sheets("Button")
Dim Dept_Row As Long
Dim Dept_Clm As Long

Table1 = S2.Range("I2", S2.Range("I2").End(xlDown)).Select
Table2 = S3.Range("A10:B40")
Dept_Row = S2.Range("J2").Row
Dept_Clm = S2.Range("J2").Column
For Each C1 In Table1
S2.Cells(Dept_Row, Dept_Clm) = Application.WorksheetFunction.VLookup(C1, Table2, 2, False)
Dept_Row = Dept_Row + 1

Next C1

End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Kidcarotte, xUpsilon
A défaut de fichier exemple, c'est difficile de bien comprendre.
Avec ce code, la colonne J se remplit, mais aucune idée de ce que vous attendez:
VB:
Sub Create_Report_Jess()
On Error Resume Next
Set S1 = Sheets("Ship Plan")
Set S2 = Sheets("Report")
Set S3 = Sheets("Button")
Dim Dept_Row As Long
Dim Dept_Clm As Long

Taille = Range("I2").End(xlDown)
Table1 = S2.Range("I2", "I" & Taille)
Table2 = S3.Range("A10:B40")
Dept_Row = S2.Range("J2").Row
Dept_Clm = S2.Range("J2").Column
For Each C1 In Table1
S2.Cells(Dept_Row, Dept_Clm) = Application.WorksheetFunction.VLookup(C1, Table2, 2, False)
Dept_Row = Dept_Row + 1

Next C1

End Sub
 

Kidcarotte

XLDnaute Junior
Merci j'ai reussi a resoudre mon Vlookup probleme.

En revanche il y a quelque chose que je ne comprends pas.

A chaque fois que je clique sur le bouton report, le report finis a la ligne 100000.
Avez vous une idee pourquoi cela arrive ?
Par consequent il est dit que mon ordinateur n'a pas assez de stockage car mon Vlookup s'applique jusqu'a la fonction 100000
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
On peut supprimer le Vlookup et le remplacer par un IndexEquiv:
VB:
Sub Create_Report_Jess()
Set S1 = Sheets("Ship Plan")
Set S2 = Sheets("Report")
Set S3 = Sheets("Button")
Dim Cid As String
Dim Dept_Row As Long
Dim Dept_Clm As Long

S1.Range("B:I").Copy Destination:=S2.Range("A:H")
S1.Range("K:N").Copy Destination:=S2.Range("I:M")
S1.Range("P:R").Copy Destination:=S2.Range("N:Q")
S1.Range("T:Y").Copy Destination:=S2.Range("R:W")
S1.Range("AA:AA").Copy Destination:=S2.Range("X:X")
S1.Range("AC:BG").Copy Destination:=S2.Range("Z:BC")
S1.Range("BI:BP").Copy Destination:=S2.Range("BD:BK")

S2.Range("B2:C60000") = Format(Now(), "dd.mm.yyyy")
S2.Range("F:F").NumberFormat = "00000"
S2.Range("H:H").NumberFormat = "000"

Taille = Range("I:I").End(xlDown).Row
Table1 = S2.Range("I2", "I" & Taille)
table2 = S3.Range("A10:A40")
table3 = S3.Range("B10:B40")
Dept_Row = S2.Range("J2").Row
Dept_Clm = S2.Range("J2").Column
For Each C1 In Table1
S2.Cells(Dept_Row, Dept_Clm) = Application.Index(table3, Application.Match(C1, table2, 0))
Dept_Row = Dept_Row + 1

Next C1

End Sub
Quand aux 100000, il faut voir.
C'est bizarre puisque Taille=33, donc le for next va de 2 à 33.

Question : comment avez vous résolu votre problème,par simple curiosité puisque ça marche chez moi ?
 

Kidcarotte

XLDnaute Junior
Bonsoir,
J'ai utilise la formule range.formula pour la VLookup, le probleme etant que le Vlookup s'applique au 100000 lignes vides ce qui genere un message d'erreur car mon ordinateur n'a pas la capacite de traite 100 000 lignes ( Je n ai pas besoin d'autant mais je sais pas pourquoi elles ne se supprime pas)

Jai donc utilise Index Equiv mais mon ma macro est beaucoup moins rapide et crash beaucoup plus. merci du tuyaux, mais comme je traite des bases de donnees de 2000 a 6000 valeurs, c'est beaucoup moins fluide que avec 33.
Taille = 33 car je ne pouvais pas mettre la taille original car trop gros pour update sur le forum.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Essayez d'introduire "Application.ScreenUpdating = false" juste après sub.
Ca peut accélérer les choses.

Ensuite pour vraiment accélérer il faut passer S2 en array. Calcul dans l'array puis transfert de l'array dans S2.
En PJ un essai. Normalement cela devrait aller plus vite.
 

Pièces jointes

  • Jess Macro Internetr(V2).xlsm
    715.9 KB · Affichages: 3
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 205
Messages
2 086 199
Membres
103 156
dernier inscrit
Ludo94130