IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

WorksheetFunction.Vlookup : Choix variable de la plage (la feuille dépend du choix dans une cellule : H2)


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ergonome
    Inscrit en
    Octobre 2019
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Vietnam

    Informations professionnelles :
    Activité : Ergonome
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2019
    Messages : 45
    Par défaut WorksheetFunction.Vlookup : Choix variable de la plage (la feuille dépend du choix dans une cellule : H2)
    Bonjour les amis,

    J'ai un petit soucis sur lequel je creuse, je creuse... et maintenant que je n'ai plus de cheveux... j'ai regardé sur internet si je pouvais trouver la solution à mon problème, mais que nenni ...

    Je dois faire une recherchev via la fonction VBA WorksheetFunction.Vlookup.

    Ma base de données dépens d'un choix :
    Pour le nom de la feuille : sur une liste variable en cellule H2
    Le tableaux de données lui est toujours le même, G2:Z850


    La valeur recherchée est sur la cellule "T2" de la feuille "Traitement_2"
    La recherche doit se faire sur la feuille (choix) avec un range("G2:Z850"),
    => Choix = Sheets("Traitement-2").Range("H2").value (j'ai vérifié la valeur choix, correspondant bien au nom de la feuille où la recherchev doit aller)
    Sur la 20 eme colonne
    Valeur exacte

    j'ai essayé avec Plage mais ca ne marche pas non plus

    pouvez vous m'aidez s'il vous plait
    par avance merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
    Sub Trait()
     
                        Sheets("Traitement_2").Select
                        choix = Sheets("Traitement_2").Range("H2").Value
                        Dim Plage as Range
     
                                Set Plage = Sheets(Choix).Range("G3:Z853")
     
                                If Range("AA2").Value = "FAUX" Then GoTo Choix_suivant
     
                                    Sheets("Traitement_2").Cells(2, "AB") = WorksheetFunction.VLookup(Range("T2"), Sheets(Choix).Range("G2:Z850"), 20, False)        '  ne fonctionne pas
     
                                    Sheets("Traitement_2").Cells(2, "AB") = WorksheetFunction.VLookup(Range("T2"), Plage, 20, False)                                                '  ne fonctionne pas
     
    Choix_suivant:
     
    ' .....
     
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Votre principal problème vient du fait que vous cherchez à la colonne 20, alors que la plage de recherche va de la colonne G à Z, il faut compter le nombre de colonnes entre G et Z (G comprise), se qui fait un total de 14 et non 20.

    Voici votre code réécrit,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Dim Plage As Range
        Dim f1 As Worksheet, f2 As Worksheet
        Dim Choix As String
     
        Set f1 = Sheets("Traitement_2")
        Set f2 = Sheets("Choix")
        Choix = f1.Range("H2").Value
        Val_Cherchee = f1.Range("T2")
        Set Plage = f2.Range("G2:Z850")
        If f1.Range("AA2").Value = "FAUX" Then GoTo Choix_suivant
        f1.Cells(2, "AB") = WorksheetFunction.VLookup(Val_Cherchee, Plage, 14, 0)
     
    Choix_suivant:
    Cdlt

  3. #3
    Membre averti
    Homme Profil pro
    Ergonome
    Inscrit en
    Octobre 2019
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Vietnam

    Informations professionnelles :
    Activité : Ergonome
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2019
    Messages : 45
    Par défaut
    Bonjour Arturo

    Je te remercie pour ton idée, et je m'excuse pour mon erreur de débutant

    Néanmoins

    dans ta proposition excell m'indique une "erreur d'execution 9" sur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Set f2 = Sheets("Choix")
    il n'y a pas de feuille "Choix"

    "Choix" est une variable qui dépend d'un choix sur une liste (cellule H2 de la feuille Traitement_2) : Chacun de ces choix a une feuille dont le nom est parfaitement exact avec le choix
    par exemple :
    Prise_de_sang
    Analyse_PdS
    Scanner
    Radio
    Irm


    pour mémoire , rappel de ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
                        Dim Plage As Range
                        Dim f1 As Worksheet, f2 As Worksheet
                        Dim Choix As String
     
                        Set f1 = Sheets("Traitement_2")
                        Set f2 = Sheets("Choix")
                        Choix = f1.Range("H2").Value
                        Val_Cherchee = f1.Range("T2")
                        Set Plage = f2.Range("G2:Z850")
     
                        If f1.Range("AA2").Value = "FAUX" Then GoTo Choix_suivant
                        f1.Cells(2, "AB") = WorksheetFunction.VLookup(Val_Cherchee, Plage, 14, 0)

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    il n'y a pas de feuille "Choix"
    Ah bon! et c'est quoi ça?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Plage = Sheets(Choix).Range("G3:Z853")
    c'est bien vous qui l'avait mis dans la demande initiale, Non?

    ****************************************

    "Choix" est une variable qui dépend d'un choix sur une liste (cellule H2 de la feuille Traitement_2) : Chacun de ces choix a une feuille dont le nom est parfaitement exact avec le choix
    par exemple :
    Prise_de_sang
    Analyse_PdS
    Scanner
    Radio
    Irm
    il fallait le préciser avant

    Dans ce cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set f2=sheets(range("H2").value)

  5. #5
    Membre averti
    Homme Profil pro
    Ergonome
    Inscrit en
    Octobre 2019
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Vietnam

    Informations professionnelles :
    Activité : Ergonome
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2019
    Messages : 45
    Par défaut
    Bonjour Arturo

    "Erreur d'execution '1004' : Impossible de lire la propriété Vlookup de la classe WorksheetFunction"

    sur la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                        f1.Cells(2, "AB") = WorksheetFunction.VLookup(Val_Cherchee, Plage, 14, 0)
    voila le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
                        Sheets("Traitement_2").Select
    '                    Choix = Sheets("Traitement_2").Range("H2").Value
     
                        Dim Plage As Range
                        Dim f1 As Worksheet, f2 As Worksheet
                        Dim Choix As String
     
                        Set f1 = Sheets("Traitement_2")
     
                        Choix = f1.Range("H2").Value
                        Set f2 = Sheets(Range("H2").Value)
     
     
                        Val_Cherchee = f1.Range("T2")
                        Set Plage = f2.Range("G2:Z850")
     
                        If f1.Range("AA2").Value = "FAUX" Then GoTo Choix_suivant
                        f1.Cells(2, "AB") = WorksheetFunction.VLookup(Val_Cherchee, Plage, 14, 0)
     
    Choix_suivant:
    les variables Val_Cherchee et Choix sont correctes

    c'est pas simple.... merci pour ton aide

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Sachant qu'une formule est une chaîne de caractères, rien n'empêche une concaténation.
    Ensuite, un collage spécial de valeur est toujours possible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
     
    Public Sub essai_formule_a()
     
    With Worksheets("mafeuille")
            .Range("AB3").Formula = "=VLOOKUP(mafeuille!T2," & .Range("H2").Value & "!G2:Z850,14,FALSE)"
            With .Range("AB3")
                    .Value = .Value
            End With
    End With
     
    End Sub
    Mieux, la valeur peut directement, sans formulation, être retournée par la méthode Evaluate

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
     
    Public Sub essai_formule_b()
     
    With Worksheets("mafeuille")
            .Range("AB3").Value = Evaluate("=VLOOKUP(mafeuille!T2," & .Range("H2").Value & "!G2:Z850,14,FALSE)")
    End With
     
    End Sub
    Pour aboutir à ces codes.
    Ecrire la formulation dans la feuille de travail Excel
    Dans l'éditeur VBE, afficher la fenêtre Exécution (CTRL + G)
    Dans celle-ci, écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ?Worksheets("mafeuille").Range("AB2").Formula
    (ne pas omettre "?")
    Puis activer la touche "Entrée" du clavier
    Ensuite, adapter la chaîne de caractères (formule) retournée
    =VLOOKUP(mafeuille!T2,lawks1!G2:Z850,14,FALSE)

Discussions similaires

  1. Mise à jour d'une variable après choix dans une combobox
    Par ~Brouette~ dans le forum Langage
    Réponses: 1
    Dernier message: 21/12/2007, 11h09
  2. liste de choix dans une cellule
    Par Hepil dans le forum Excel
    Réponses: 11
    Dernier message: 03/07/2007, 11h52
  3. [FORMULAIRE] affichage selon le choix dans une liste déroulante.
    Par gailup dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/06/2006, 14h58
  4. Suite au choix dans une multibox
    Par discogarden dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/03/2006, 20h43
  5. [C#]liste de choix dans une propriété d'un user control
    Par LeDeveloppeurDotNet dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/10/2005, 12h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo