Affectation Formule vs Valeur avec Vlookup

  • Initiateur de la discussion Initiateur de la discussion AlainHK
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

A

AlainHK

Guest
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
 
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).
À+
 
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
 
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
 
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:
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
 
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é.
 
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
 
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.
À+
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

J
Réponses
2
Affichages
2 K
julien1025
J
D
Réponses
1
Affichages
2 K
Damorek
D
O
Réponses
10
Affichages
1 K
V
Réponses
2
Affichages
1 K
V
P
Réponses
5
Affichages
7 K
B
Réponses
4
Affichages
23 K
F
Réponses
10
Affichages
1 K
Monique
M
J
  • Question Question
Réponses
0
Affichages
1 K
J
Retour