Utiliser un equivalent vlookup dans VBA

Bonjour,

J'ai un fichier qui permet de stocker des objets, avec un formulaire excel pour entrer les valeurs.

Private Sub CB_stock_ok_Click()

Dim Der_Ligne As Long
Der_Ligne = Range("A" & Rows.Count).End(xlUp).Row + 1

Sheets(2).Cells(Der_Ligne, 1) = CB_stock_CA.Value
Sheets(2).Cells(Der_Ligne, 3) = TB_contenant.Text
Sheets(2).Cells(Der_Ligne, 4) = TB_quantite.Text
Sheets(2).Cells(Der_Ligne, 5) = CB_unite
Sheets(2).Cells(Der_Ligne, 6) = TB_peremption.Text
Sheets(2).Cells(Der_Ligne, 7) = TB_reception.Text

Unload UF_stock_MP

End Sub

Il fonctionne, ce n'est sans doute pas le plus simple mais il fait ce que je veux.

Mon soucis est qu'une fois la ligne rempli il me manque une info que je peux retrouver avec un vlookup mais ce n'est pas pratique à utiliser. J'aimerais si possible que quand le formulaire est validé et que la ligne est crée excel entre la valeur manquante.

Pour cela il regarde la valeur de la cellule A de la feuille 2, et il va cherche dans un tableau de la feuille 1 la valeur lié à la cellule A.

Dans excel voila ce que ca donne : =VLOOKUP(A2;Table1[#All];2;FALSE)

Peut'on ajouter cela dans le code VBA pour que quand la ligne esr crée il cherche aussi cette valeur qui me manque?

merci!

yanmag a écrit :

Bonjour,

Bonjour,

une proposition, sans avoir testé. on écrit la formule en colonne B, puis on garde le résultat.

Private Sub CB_stock_ok_Click()

Dim Der_Ligne As Long
Der_Ligne = Range("A" & Rows.Count).End(xlUp).Row + 1

Sheets(2).Cells(Der_Ligne, 1) = CB_stock_CA.Value

Sheets(2).Cells(Der_Ligne, 1).formula="=VLOOKUP(" &Sheets(2).Cells(Der_Ligne, 1)&" ;Table1[#All];2;FALSE)"
Sheets(2).Cells(Der_Ligne, 1).value=Sheets(2).Cells(Der_Ligne, 1)

Sheets(2).Cells(Der_Ligne, 3) = TB_contenant.Text
Sheets(2).Cells(Der_Ligne, 4) = TB_quantite.Text
Sheets(2).Cells(Der_Ligne, 5) = CB_unite
Sheets(2).Cells(Der_Ligne, 6) = TB_peremption.Text
Sheets(2).Cells(Der_Ligne, 7) = TB_reception.Text

Unload UF_stock_MP

End Sub

non j'ai un run time error 1004.

Excel doit prendre la valeur choisi dans la liste soit CB_stock_CA, et ensuite chercher cette valeur dans un tableau de la colonne A du tableau pour me donner la valeur correspondante de la colonne B, et la noter dans la colonne B du tableau de stock.

Faut'il créer un variable avec la valeur de la fonction vlookup et ensuite récupérer cette variable ?

j'ai tenté un truc de ce genre mais le vlookup ne passe:

Dim recup_CA As Integer
recup_CA = WorksheetFunction.VLookup(CB_stock_CA, Sheets("List").Range("A2:B500"), 2, 0)
Sheets(2).Cells(Der_Ligne, 2) = recup_CA

merci pour la tentative

re-Bonjour,

je pense que ce sont les points-virgules dans la formule qui posent problèmes

essaie ainsi

Sheets(2).Cells(Der_Ligne, 1).formula="=VLOOKUP(" &Sheets(2).Cells(Der_Ligne, 1)&" ,Table1[#All],2,FALSE)"
Sheets(2).Cells(Der_Ligne, 1).value=Sheets(2).Cells(Der_Ligne, 1)

tu peux mettre la 2ème ligne en commentaire pour garder la formule en B2 plutôt que le résultat de la formule.

dans ce cas il récrit sur la colonne A, hors il doit écrire sur la colonne B en gardant la valeur de la A

J'ai donc tester cela:

Sheets(2).Cells(Der_Ligne, 2).Formula = "=VLOOKUP(" & Sheets(2).Cells(Der_Ligne, 1) & " ,Table1[#All],2,FALSE)"

pour qu'il mette la formule en B et qu'il teste la valeur de A.

Je n'ai pas de message d'erreur mais cela ne fonctionne pas il indique #NAME?

Par contre il me met bien la formule du vlookup dans la cellule, c'est peut-être problématique car il recherche du texte? Dans le vlookup il n'indique plus la case A3 (par exemple) mais le texte de cette valeur.

yanmag a écrit :

dans ce cas il récrit sur la colonne A, hors il doit écrire sur la colonne B en gardant la valeur de la A

J'ai donc tester cela:

Sheets(2).Cells(Der_Ligne, 2).Formula = "=VLOOKUP(" & Sheets(2).Cells(Der_Ligne, 1) & " ,Table1[#All],2,FALSE)"

pour qu'il mette la formule en B et qu'il teste la valeur de A.

Je n'ai pas de message d'erreur mais cela ne fonctionne pas il indique #NAME?

Par contre il me met bien la formule du vlookup dans la cellule, c'est peut-être problématique car il recherche du texte? Dans le vlookup il n'indique plus la case A3 (par exemple) mais le texte de cette valeur.

bien vu, le 2 pour la colonne B au lieu du 1.

as-tu vérifié que ta formule fonctionnait bien si tu la tapais manuellement en colonne B ? je pense que le problème vient de là,

manuellement en tapant =VLOOKUP(A10;Table1[#All];2;FALSE) oui ca fonctionne.

La différence que je vois et que manuellement il test la cellule A10 mais avec VBA dans le formule il indique la valeur de cette cellule et la il ne trouve pas de correspondance.

Ne faudrait-il pas qu'il récupère l'adresse de la cellule et non pas son contenu?

Ca fonctionne j'ai trouvé comment faire.

merci à l'acide sulfurique

Rechercher des sujets similaires à "utiliser equivalent vlookup vba"