Affectation Formule vs Valeur avec Vlookup

AlainHK

XLDnaute Nouveau
Bonjour,

J' ai visiblement un probleme de " syntax" avec la fonction Vlookup. Aprés avoir reussi l' affectation d' une formule Vlookup qui fonctionne dans une cellule

ActiveCell.Formula = "=VLOOKUP(A19,'Demande - 04'!$C:$M,8,False)"

J' essaie maintenant d'affecter non pas la formule mais le resultat et la , ca coince.
ActiveCell.Value = Application.WorksheetFunction.VLookup(A19,'Demande - 04'!$C:$M,8,False)

VBA refuse la syntaxe 'Demande - 04'!$C:$M... j' ai essayé plusieur formule avec Range etc .. sans succes . Une idée du probleme ?

Merci
 

Dranreb

XLDnaute Barbatruc
Re : Affectation Formule vs Valeur avec Vlookup

Bonjour la syntaxe correcte serait plutôt:
VB:
ActiveCell.Value = Application.WorksheetFunction.VLookup(ActiveSheet.Range("A19").Value, Range("'Demande - 04'!$C:$M"), 8, False)
Mais je deteste VLookup, surtout en VBA. Je préfère Match, vérifier si trouvé et utiliser le résultat avec .Rows(Rés).
À+
 

AlainHK

XLDnaute Nouveau
Re : Affectation Formule vs Valeur avec Vlookup

J ai aussi fait une tentative avec

DIM resultat as variant

Resultat = Application.VLookup(Cells(19, 1), Worksheets("Demande - 4").Range("C4:M49"), 8, False)

Au debug la valeue contenu dans Cells(19, 1) est correcte, mais j' ai toujours erreur 9 a l'execution et resultat est vide

Merci de votre aide
 

AlainHK

XLDnaute Nouveau
Re : Affectation Formule vs Valeur avec Vlookup

Merci la syntaxe proposée fonctionne. Maintenant j' essai d' aller plus long et d' appliquer la meme formule a tout une colone dans une boucle qui resemble a cela donc :

i = 4
While Cells(i, 1) <> ""
Cells(i, 9) = Application.WorksheetFunction.VLookup(Cells(i, 1), Range("'Demande - 04'!$C:$M"), 8, False)
i = i + 1
Wend

Et la ca plante .

Si je remplace par Cells(i, 9) = Application.WorksheetFunction.VLookup(Cells(20, 1), Range("'Demande - 04'!$C:$M"), 8, False)

donc en changeant le "i" dans cells(i,1) par une valeur en dur (ex :20) alors cela fonctionne sans probleme !!!

Dur dur ... Une idée ?


Sinon je n' ai pas encomme essayé MATCH que je vais regarder par ailleurs.
Merci
 

Dranreb

XLDnaute Barbatruc
Re : Affectation Formule vs Valeur avec Vlookup

Ce serait plus rapide à l'exécution de laisser faire Excel dans une programmation sans boucle style:
VB:
Dim Plg As Range
Set Plg = ActiveSheet.Cells(4, 9)
Set Plg = Range(Plg, Plg.End(xlDown))
Plg.FormulaR1C1 = "=VLOOKUP(RC1,'Demande - 04'!C3:C12,8,False)"
Plg.Value = Plg.Value

Attendez: non ça ne va pas. Je deteste compter combien il y a de colonnes jusqu'à celle que je veux derriere la clé ! C'est quelle colionne que vous voulez restituer exactement ? bon imaginons que c'est la colonne, allez disons H c'est à dire C8 en notation R1C1. Ça fait:
VB:
Plg.FormulaR1C1 = "=INDEX('Demande - 04'!C8,MATCH(RC1,'Demande - 04'!C3,0))"
 
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : Affectation Formule vs Valeur avec Vlookup

Bonjour à tous ; )
Une autre version :
VB:
Sub AlainHK_1()
Range(Cells(4, 2), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 2)).Formula = _
"=Vlookup($A4,'Demande - 04'!$C:$M, 8, 0)"
End Sub
Cordialement
 

AlainHK

XLDnaute Nouveau
Re : Affectation Formule vs Valeur avec Vlookup

Enfin cela fonctionne !!! il y a une boucle mais j' ai une solution !!

While Cells(i, 1) <> ""
i = i + 1
Resultat = Application.VLookup(Cells(i, 1), Range("'Demande - 04'!$C:$M"), 8, False)
If IsError(Resultat) Then
Cells(i, 9) = ""
Else
Cells(i, 9) = Resultat
End If

Merci Dranreb pour l' aide apportée. Maintenant je vais pouvoir m' attaquer a al version " sans boucle" comme proposé.
 

AlainHK

XLDnaute Nouveau
Re : Affectation Formule vs Valeur avec Vlookup

Encore une autre question .....

Maintenant, j' ai besoin d' introduire un autre paramettre . En Effet Chaque semaine je crée une nouvelle feuille et je vais cherché les données de la feuille de la semaine dernier pour les mettre a jour dans la nouvelle .

Donc dans la ligne Resultat = Application.VLookup(Cells(i, 1), Range("'Demande - 04'!$C:$M"), 8, False)

J' ai besoin de remplacer, dans l'experssion ci-dessus, la Sheet dont le nom est "demande-04" par une variable .

En effet , Je test le nombre de "Sheet" existante : sheet.count que je mets dans une variable S
Je crée une nouvelle sheet (donc S+1) et je veux pouvoir faire mon Vlookup depuis la Sheet(S) sur les colone $C a $M.
Donc par quelle expression remplacer Range("'Demande - 04'!$C:$M") ?

Je charche, mais pas encore trouvé ..

Merci
 

Dranreb

XLDnaute Barbatruc
Re : Affectation Formule vs Valeur avec Vlookup

Bonjour.
Pourquoi tenez vous à ce p... de VLookup pas pratique du tout ?
Range("'Demande - 04'!$C:$M") peut être remplacé par WorkSheets(S).Range("$C:$M")
Déclarez une variable F as worksheet et faire: For Each F in Worksheets
Attention: Utilisez Worksheets pour les feuilles de calcul car Sheets inclut en plus d'éventuelles feuilles graphiques.
À+
 

Efgé

XLDnaute Barbatruc
Re : Affectation Formule vs Valeur avec Vlookup

Bonjour à tous,
Une proposition avec ce que j'ai compris et toujours sans boucle:
VB:
Sub AlainHK_2()
If ActiveSheet.Index = 1 Then Exit Sub
Range(Cells(4, 2), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 2)).Formula = _
"=Vlookup($A4,'" & Sheets(Sheets(ActiveSheet.Name).Index - 1).Name & "'!$C:$M, 8, 0)"
End Sub
Cordialement
 

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia