Application.WorksheetFunction.VLookup ?????

Résolu
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 - 7 févr. 2011 à 10:46
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 - 24 févr. 2011 à 02:51
Bonjour,

J'ai plusieurs feuilles dans des classeurs différents qui comportent des listes (fruits, légumes,etc... et en regard des poids qui correspondent à des calibres.

Je veux recupérer le poids total d'une sélection et je souhaite utiliser l'appel à une fonction par
Application.WorksheetFunction.VLookup
.

Je ne m'en sors pas...!
Pour travailler, je me suis limité à une seule feuille : 3 colonnes et 5 lignes, en cherchant seulement à déterminer si la valeur en colonne B est supérieure à la colonne C selon le choix fait en colonne A ; le résultat VRAI1 ; FAUX 0 étant reporté en cellule A1
A B C
1
2 PoidsTable
3 Fruit PoidsPesé PoidsMin
4 Pomme 30 25
5 Poire 10 12

la plageA4:C5 s'appelle "FruitsTable"

Voila mon début de code :
Function PoidsLimiteMin(Fruit As String, Pesé As Double, FruitsTable As Range) As Boolean
    ' Retourne VRAI ou FAUX selon que la valeur est dans la limite attendue
    ' VRAI (TRUE) = Valeur HORS limite
    ' FAUX(FALSE) = Valeur correcte (dans la limite)
    Dim PdMin As Single
    PdMin = Application.WorksheetFunction.VLookup(Fruit, FruitsTable, 1, False)
    PoidsLimiteMin = Pesé < PdMin
End Function
'----------------------------------------
Sub QuelPoids()
Range("A1") = PoidsLimiteMin("Pomme", 25, FruitsTable)
End Sub


Bien sûr dans cet exemple un simple script de formule "RechercheV" fait l'affaire ; de même une macro pourrait à chaque recherche copier une formule (ex cell.FormulaR1C1 =); mais vu le nombre de recherches sur des classeurs différents, cette solution est trop lourde et trop lente.

Merci pour toute aide au débutant que je suis.

Cordialement
Rataxes64
A voir également:
  • Impossible de lire la propriété vlookup
  • Impossible de lire la propriété vlookup de la classe worksheetfunction - Meilleures réponses
  • Impossible de lire la propriété match de la classe worksheetfunction - Meilleures réponses
  • Application.worksheetfunction.vlookup - Forum Visual Basic 6

12 réponses

CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 1
24 févr. 2011 à 02:51
Bonjour,

En fait,
Range(Cells(2, j + 3)).Value 

n'est pas la bonne syntaxe...


Par ailleurs je ne sais toujours pas pourquoi le script du "Code1" n'est pas correct: je l'écarte!


Voila le code final qui utilise toujours une variable ("Pds") pour récupérer le résultat de VlookUp, mais qui ne fait plus appel à une transcription pour retrouver la lettre (merci bigfish!).

Sub TrouverCalibre()
'Affecter un calibre en fonction du poids pesé d'un produit choisi dans la liste

'Dans la feuil(1) :
'Liste produit    = D3:D5
'Plage calibres   = E3:H5
'Nom des Calibres = E2:H2
'Choix liste        en A3 nommé "Choix"
'Poids pesé         en B3 nommé "Pds"
'Calibre trouvé     en C3 nommé "Clb"

    Dim i, j, Pds
    
    Application.ScreenUpdating = False
    ActiveSheet.Unprotect
        
    'Dans la Liste de la ligne 3 à 6 (on pourrait récupérer ces valeurs Row automatiquement)
    For i = 3 To 6
        
        'Dans Plage des valeurs de calibre (on pourrait récupérer ces valeurs Row & Column automatiquement)
        For j = 2 To 5
            
            'Valeur par défaut
            Range("Clb").Value = "Hors Calibre"
            
            'Si résultat VlookUp = Vide: aller au pas de macro suivant
            On Error Resume Next
            
'Code1      Pourquoi ça ne marche pas, sauf pour les 3 premiers calibres du premier choix ?
'°°°°°      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            'If Range("Pds").Value < Application.WorksheetFunction.VLookup(Range("Choix"), Range("D" & i & ":H" & i), j, False) _
            Then Range("Clb").Value = Range(Lettre & "2").Value _
            : Exit Sub
            
            
'Code 2     En passant par "Pds" et "Cell", ça marche pour tous les choix et tous les calibres.
'°°°°°°     Pds Application.WorksheetFunction.VLookup(Range("Choix"), Range("D" & i & ":H" & i), j, False)
            If Range("Pds").Value < Pds _
            Then Range("Clb").Value = Cells(2, j + 3).Value _
            : Exit Sub

        Next j
    
    Next i

    ActiveSheet.Protect

End Sub

'***************************************************************************

Private Sub Worksheet_Change(ByVal Target As Range)
'Pour tout changement de valeur une des  2 cellules déverrouillées
    
    'Changement du Choix dans la liste
    If Not Intersect(Target, Range("Choix")) Is Nothing Then TrouverCalibre
    
    'Changement du Poids pesé
    If Not Intersect(Target, Range("Pds")) Is Nothing Then TrouverCalibre          'Changement du poids pesé

End Sub



A part cette interrogation qui demeure sur la nécessité de passer par une variable, le code tourne normalement.


Maintenant, il va falloir que je "l'imbrique" avec des boucles For/Next traitées par HlookUp, et j'espère bien pouvoir m'en sortir sans poster!

Merci pour tout

Cordialement
Rataxes64
3
Rejoignez-nous