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 :

Utilisation de vlookup VBA avec une plage nommée


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2018
    Messages : 8
    Par défaut Utilisation de vlookup VBA avec une plage nommée
    Bonjour Boisgontierjacques

    Cette discussion date un peu, mais j'aurais besoin d'aide pour votre code. Je ne maîtrise pas VBA, je m'exerce à l'aide de l'enregistreur ou de trouvailles comme ici
    J'ai utilisé celui ci, qui faisait parfaitement son job, toutefois les besoins ont évolués.

    Maintenant certaines personnes doivent voir dans le filtre 2 voir 3 différentes initiales.
    Exemple je devais voir les cellules contenant GBE, maintenant je dois voir les cellules contenant GBE et/ou FHA

    je suppose qu'il faut ajouter quelque part un "And" mais j'en suis absolument pas sure et je ne saurais pas où le mettre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'chercher l'initiale dans la table de correspondance (ici sur feuille 2)
        Nom = Application.UserName
        initiales = Application.VLookup(Nom, [utilisateurs], 2, False) ' table correspondance
        If Not IsError(initiales) Then
            Sheets(2).Cells.AutoFilter Field:=1, Criteria1:=initiales
        End If
     
           Else
            MsgBox "vous n'êtes pas autorisé à utiliser ce fichier"
    ...
    Dans l'attente de vous lire

    Bonne après-midi

  2. #2
    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 amo,
    (bienvenue sur ce forum)

    La solution la plus simple serait alors d'utiliser un filtre éléboré.
    Voir le tutoriel de l'ami Philippe

    Filtres élaborés

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2018
    Messages : 8
    Par défaut
    Citation Envoyé par MarcelG Voir le message
    Bonjour amo,
    (bienvenue sur ce forum)

    La solution la plus simple serait alors d'utiliser un filtre éléboré.
    Voir le tutoriel de l'ami Philippe

    Filtres élaborés
    Bonjour MarcelG

    Merci pour votre réponse. Le filtre élaboré était la piste que j'étais entrain de creuser. mais mon code fait appel au nom utilisateur (nom d'office) et donc je ne suis pas sure que ce soit la bonne piste, car le nom d'utilisateur n'est pas dans la plage à filtrer, uniquement dans la table de correspondance/zone de critères.
    Ce vais lire le tutoriel pour voir si je trouve mon bonheur.

    Bonne journée

  4. #4
    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
    Salut,

    Il suffit d'enrichir la zone de critères des initiales, calculées sur chaque nom, cherchées (par VBA ou non) et utiliser les conditions et/ou comme le montre le tutoriel.
    Il serait peut être nécessaire de définir la zone de critères en fonction du nombre de noms cherchés.

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2018
    Messages : 8
    Par défaut
    Citation Envoyé par MarcelG Voir le message
    Salut,

    Il suffit d'enrichir la zone de critères des initiales, calculées sur chaque nom, cherchées (par VBA ou non) et utiliser les conditions et/ou comme le montre le tutoriel.
    Il serait peut être nécessaire de définir la zone de critères en fonction du nombre de noms cherchés.
    Je suis désolé je ne comprends pas ce que vous proposez.
    malheureusement je ne peux pas joindre le fichier (fichier professionnel)
    Ce fichier est envoyé à différentes personnes et chacun doit voir seulement ce qui le concerne.

    Ma feuille FNC (onglet 2) plusieurs lignes et colonnes.
    Dans la colonne A j'ai mes initiales. (FHA, GBE...)
    C'est la colonne A qui se filtre automatique suivant l'utilisateur qui ouvre le fichier.

    Ma feuille2 est ma table de correspondance, en colonne A, j'ai Prénom et Nom de Famille (comme reprit dans office Excel) et dans la colonne B les initiales qui lui sont dédiées
    ma feuille2 serait alors ma zone de critères, où se trouve déjà les initiales pour chaque nom...

    Exemple
    Colonne A Colonne B
    Pierre Dupont *FHA*
    Michel Schmit *GBE*
    etc

    Lorsque Pierre Dupont ouvre le fichier à partir de son pc, il voit à l'ouverture du fichier, que les lignes dont la colonne A contient FHA. La feuille est protégée, l'utilisateur ne peut pas modifier le filtre ou tout autre chose

    Et je n'arrive pas à trouver, pour faire en sorte que Pierre Dupont voit à l'ouverture du fichier, les lignes dont la colonne A contient p.ex. FHA & GBE

  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
    OK. La problématique est claire

    Au demeurant, nous sommes d'accord.

    A l'ouverture du classeur, une recherche est effectuée sur le Username de l'utilisateur dans la base utilitaire.
    Au regard de cette donnée figureront dans la colonne suivante ses initiales, dans la colonne suivante les initiales autorisées par cet identifiant, d'autres initiales éventuelles dans la 4ème colonne.
    Ces 2 ou 3 colonnes retournant les initiales autorisées vont enrichir la zone de critères.

    .......
    ID Initiales1 initiales2
    Fred mrc pol
    .......

    Si Fred est l'id machine (Username) alors le filtre élaboré s'effectuera sur une zone de critères comprenant mrc et pol

    Sans évoquer VBA, peux-tu confirmer que l'on peut développer dans cette voie pour répondre à ton besoin.

    (On va y arriver)

  7. #7
    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
    Salut,

    Pour base.

    Ici:

    La table utilitaire figure dans la feuille "Utilitaires"
    Dans la 1èer colonne, figurent les Id (Application.Username)
    Pour chaque id, la 2ème et la 3ème colonne reportent les id autorisés pour la consultation.

    Pour l'id trouvé.
    Dans la feuille "Résultats"
    Une plage est nommée "zone_crit".
    Elle reporte les critères.
    A l'intérieur de celle-ci 2 cellules, l'une au-dessous de l'autre (important!voir tutoriel) sont nommées "crit1" et "crit2"

    Le code ci-dessous effectue
    - la recherche de l'Id
    - l'alimentation des critères
    - le filtre de la plage nommé "laplage"

    Tu adaptes.

    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
    23
    24
    25
    26
    27
    28
    Option Explicit
     
    Public Sub gestion_filter_advanced()
     
    Dim derlign As Integer
    Dim t As Range
     
    With Worksheets("Utilitaires")
            derlign = .Cells(.Rows.Count, 1).End(xlUp).Row
            Set t = .Range("A1:A" & derlign).Find(Application.UserName, LookIn:=xlValues)
            If Not t Is Nothing Then
                    With Worksheets("Résultats")
                            .Range("crit1").Value = t.Offset(0, 1)
                            .Range("crit2").Value = t.Offset(0, 2).Value
                    End With
            End If
            Set t = Nothing
    End With
     
    With Worksheets("Résultats")
            If .FilterMode = True Then .ShowAllData
            .Range("laplage").AdvancedFilter _
                     Action:=xlFilterInPlace, _
                     CriteriaRange:=.Range("zone_crit"), _
                     Unique:=False
    End With
     
    End Sub

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2018
    Messages : 8
    Par défaut
    Bonjour MarcelG

    Je m'excuse je n'ai pas eu la possibilité de te répondre hier.
    Tout d'abord merci beaucoup pour le temps que tu consacres à mon "problème"

    je vais lire et tester ce que tu as écrit plus haut et je te tiens au courant

    Bonne journée

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2018
    Messages : 8
    Par défaut
    Rebonjour MarcelG

    Je pensais avoir compris tes explications, mais comme ça ne fonctionne pas, j'ai forcement dû me tromper quelque part.

    ce que j'ai compris
    si le username est MOI, alors la plage zone_crit dans la feuille "Résultats" se remplit toute seule, ici *FHA* dans la cellule A1 (crit1) et *LGO* dans la cellule A2 (crit2)
    et grace à ce résultat, la colonne A de ma feuille FCN, que j'ai nommée "laplage" doit filtrer les cellules contenant FHA et/ou LGO

    En annexe un fichier, c'est mon fichier sans le contenu et certaines pages, mais ça n'a pas d'incidence sur le code
    Sur la feuil2 j'ai mit mon code initial juste pour info

    Bien à toi
    Fichiers attachés Fichiers attachés

  10. #10
    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 AMO,

    La zone de critères et la plage à filtrer sont sur la même feuille "Résultats".
    C'est ce qui est écrit dans le code. Non?

    Consulte le tutoriel.
    Construis ta feuille à filtrer comme il est indiqué.

    Adapte le code (nom des feuilles, nom des Range, adressage).
    C'est en l'adaptant, donc en le comprenant, que tu assimileras les notions évoquées.

    Remarque : les étoiles ne sont pas nécessaires dans la table utilitaire.

  11. #11
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2018
    Messages : 8
    Par défaut
    MarcelG,

    MeaCulpa, j'ai trouvé mon erreur, bien bête.
    Le code ne s'éxecute pas automatique

    Lorsque je faisais mes modifications pour l'adapter à mon fichier, j'enregistrais et ouvrais le fichier à nouveau et biensûr et rien ne se passait.

    Comment faire pour que le code s'éxecute automatiquement à l'ouverture du fichier.
    J'ai essayé de l'intégrer à mon autre code, car y a plusieurs choses avant et après mais je n'ai pas réussi.

    Sans le mélanger à mon autre codre, j'ai essayé de placé Private Sub Workbook_Open(), sans résultat

    J'ai essayé de le mettre simplement au milieu de mon code à la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       Nom = Application.UserName
        initiales = Application.VLookup(Nom, [utilisateurs], 2, False) ' table correspondance
        If Not IsError(initiales) Then
            Sheets(2).Cells.AutoFilter Field:=1, Criteria1:=initiales
        End If
    Je souhaite également que ma zone de critères soit masquée, j'ai mit ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Rows("1:3").Select
        Range("A3").Activate
        Selection.EntireRow.Hidden = True
    après: ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     .Range("crit1").Value = t.Offset(0, 1)
                            .Range("crit2").Value = t.Offset(0, 2).Value
                    End With
            End If
            Set t = Nothing
    End With
    mais je m'y perds avec les End With ou End If, If etc.

  12. #12
    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
    Salut,

    mais je m'y perds avec les End With ou End If, If etc
    Essaie de coder en respectant les indentations (mise en retrait des lignes de code dans un bloc For Next, With End With....).
    Retourne ce code.
    Si un bug survient lors de son exécution, alors indique la ligne (surlignée en jaune) qui pose problème.
    Tu peux appeler la procédure que je t'ai retournée par l'évènement Open de l'objet Workbook.

    Bien entendu, après la prise en compte de ces éléments, tu reviens.

    (On va y arriver)

  13. #13
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par MarcelG Voir le message
    Essaie de coder en respectant les indentations (mise en retrait des lignes de code dans un bloc For Next, With End With....).
    ... et mets des balises CODE (bouton #) pour encadrer le code dans tes messages.
    Sinon, l'éditeur supprimera les indentations.

  14. #14
    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
    ... et mets des balises CODE (bouton #) pour encadrer le code dans tes messages.
    Sinon, l'éditeur supprimera les indentations.


    Cela va sans dire, mais cela va mieux en le disant

  15. #15
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2018
    Messages : 8
    Par défaut
    Citation Envoyé par MarcelG Voir le message


    Cela va sans dire, mais cela va mieux en le disant
    Executer du code automatiquement à l'ouverture = ok je l'ai mit dans Woorkbook Open et j'ai enlever 'Option Explicit & 'Public Sub gestion_filter_advanced()

    En ce qui concerne de l'intégrer à mon autre code, pour l'instant j'y suis tjs pas arrivé.

    j'ai essayé par petites doses, p.ex. en ajoutant juste un bout de mon autre code. et là je pense déjà avoir un problème.
    Dans mon précédent code, il y avait deux filtres, celui pour le usernam ET un filtre automatique sur la colonne C. (pour afficher uniquement les cellules sans remplissages) et je vois que avec le code du filtre élaboré, l'option filtre disparaît de ma ligne 6.
    1. le code pour le filtre élaboré
    2. un code pour ajouter l'option filtre sur la ligne
    3. mon code pour filtrer sur la colonne C
    le 1ere code s'execute mais les deux autres et j'ai pas de msg d'erreur

    je pense que je suis à mon maximum de compréhension en vba mais je vais pas lâcher...

  16. #16
    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,

    je pense que je suis à mon maximum de compréhension en vba mais je vais pas lâcher...
    Ne t'inquiète pas.
    Avec tout mon respect, les mercatog, Philippe et autres Menhir ont toujours des connaissances à venir.
    Alors nous...

    j'ai enlever 'Option Explicit
    Surtout pas. Les déclarations de variables, à mon avis, doivent rester obligatoires.

    & 'Public Sub gestion_filter_advanced()
    Pourquoi?
    Je t'ai signalé

    Tu peux appeler la procédure que je t'ai retournée par l'évènement Open de l'objet Workbook.
    Cela signifie que, par l'évènement Open, tu peux directement lancer cette procédure par la méthode Call.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call gestion_filter_advanced
    En dernier ressort, je te joins un fichier exemple simplifié.
    Essaie de
    - le comprendre (2 procédures dans Open et Module)
    - l'adapter à ton cas

    Tu reviens pour toute question
    Fichiers attachés Fichiers attachés

  17. #17
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2018
    Messages : 8
    Par défaut
    J'ai retiré Option Explicit & Public Sub gestion_filter_advanced() car si je laisse, la macro ne s'exécute pas à l'ouverture du fichier.
    si je laisse, j'ai un message:

    Erreur de compilation. Instruction incorrecte dans un procédure. et il met en jaune Private Sub Workbook_Open_
    Pour l'instant je supprime pas le texte, je met des apostrophes pour le transofmer en texte ainsi je peux faire des tests sans perdre les informations.

    En mettant l'apostrophe devant Option Explicit & Public Sub gestion_filter_advanced() ça fonctionne correctement
    actuellement mon code commence ainsi dans Workbook Open :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
        'Option Explicit
    'Public Sub gestion_filter_advanced()
    Je vais regarder ton fichier
    Merci à toi pour ta patience

  18. #18
    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
    Il n'y a aucune raison.
    Si la procédure est appelée correctement à l'évènement Open, alors le code doit s'exécuter normalement.
    Cela dit, la procédure doit intégrer un module standard.

    Reviens après consultation de ma proposition.

Discussions similaires

  1. [XL-2016] Utilisation de vlookup VBA avec une plage nommée
    Par clem256 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/12/2017, 10h09
  2. [XL-2010] alimenter une Combobox sur une feuille avec une plage nommée
    Par GADENSEB dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/08/2015, 16h21
  3. Réponses: 3
    Dernier message: 02/05/2015, 22h35
  4. [XL-2013] Définir une plage nommée avec le VBA
    Par skk201 dans le forum Excel
    Réponses: 2
    Dernier message: 11/03/2014, 08h22
  5. Formule avec renvoie d'une plage nommée partielle
    Par doudoustephane dans le forum Excel
    Réponses: 2
    Dernier message: 22/05/2008, 11h25

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