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 :

Problème VBA - code pour équivalence rechercheV


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    contrôleur de gestion
    Inscrit en
    Septembre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2019
    Messages : 3
    Par défaut Problème VBA - code pour équivalence rechercheV
    Bonjour,

    Je souhaite effectuer une équivalence rechercheV dans mon code

    Mais le code ne fonctionne visiblement pas au niveau ou je définis ma plage de recherche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        ' equivalent recherche v pour remplir les données qui sont dans la base securisee
        Valeur_Cherchee = Provenance
        PlageDeRecherche = Sheets("Base sécurisée").Range("A1:A99999")
        Trouve = PlageDeRecherche.Find(what:=Provenance, LookAt:=xlWhole)
        oidSite = Trouve.Offset(0, 2).Value
        libelleSite = Trouve.Offset(0, 3).Value
        libelleProvenance = Trouve.Offset(0, 1)
        TauxCommissionMAP = Trouve.Offset(0, 15)
        Typedevente = Trouve.Offset(0, 7)
        PrivePublic = Trouve.Offset(0, 9)
        Responsabledecompte = Trouve.Offset(0, 5)
        PremiereSign = Trouve.Offset(0, 10)

    Avez vous une idée du problème ?

    Merci

  2. #2
    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 PaulineGUEDE Voir le message
    Je souhaite effectuer une équivalence rechercheV dans mon code
    Pourquoi ne pas tout simplement utiliser la fonction RECHERCHEV() dans ton code avec un Evalate ou un WorksheetFunction ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Res = WorksheetFunction.VLOOKUP(....

  3. #3
    Candidat au Club
    Femme Profil pro
    contrôleur de gestion
    Inscrit en
    Septembre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2019
    Messages : 3
    Par défaut
    Je cherche à éviter cette solution justement car vu le volume de mon fichier, elle ralentit considérablement la vitesse d’exécution de la macro

  4. #4
    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
    Ce n'est pas en enchainant une dizaine de fonctions et de méthodes que tu vas améliorer la vitesse.

  5. #5
    Candidat au Club
    Femme Profil pro
    contrôleur de gestion
    Inscrit en
    Septembre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2019
    Messages : 3
    Par défaut
    Cette solution ne fait qu'écrire une fonction recherche v dans les cellules en question... ce n'est pas ce que je recherche

  6. #6
    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 PaulineGUEDE Voir le message
    Cette solution ne fait qu'écrire une fonction recherche v dans les cellules en question...
    Non, cette solution n'écrit pas la fonction RECHERCHEV dans les cellules, elle transmets directement le résultat de cette fonction à une variable (ou n'importe quoi d'autre pouvant recevoir une valeur).

    Pour mettre une fonction dans une cellule, on n'utilise pas WorksheetFunction mais la propriété Formula de la cellule.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    L'utilisation de RECHERCHEV pour récupérer plusieurs colonnes n'est pas idéale car elle impose d'effectuer la recherche pour chaque colonne dont il faut récupérer la valeur. Si c'est acceptable sur des petits tableaux et pour peu de colonnes, c'est impossible pour de plus gros tableaux et/ou beaucoup de colonnes...



    Tu pourrais, en Excel, travailler avec EQUIV qui renvoie la position (la ligne, en quelque sorte) de la valeur que tu cherches, puis utiliser Index pour renvoyer une valeur qui se trouve sur la même ligne dans une autre colonne. La colonne supplémentaire pour EQUIV permet de n'effectuer la recherche qu'une seule fois, là où RECHERCHEV va imposer d'effectuer la recherche pour chacune des colonnes dont il faut récupérer la valeur. Ca peut s'effectuer en Excel ou en VBA.

    En VBA, tu pourrais utiliser MATCH (EQUIV) pour trouver la position, puis récupérer les valeurs des colonnes en utilisant la position comme index de la cellule pour chaque colonne concernée (ici sur base d'un tableau structuré appelé t_Contacts)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub RetrieveDatas()
      Dim id As Long
      Dim Pos As Long
     
      id = 48
      Pos = Application.Match(id, Range("t_Contacts[ID]"), 0)
      Range("e1").Value = Range("t_Contacts[Prénom]")(Pos).Value
      Range("f1").Value = Range("t_Contacts[Nom]")(Pos).Value
    End Sub
    Nom : 2019-09-30_110031.png
Affichages : 475
Taille : 17,4 Ko


    NB: En fonction de ta version d'Excel et si c'est pour récupérer dans Excel, tu pourrais avantageusement utiliser Power Query!

    NB 2: J'utilise aussi peu que possible (c'est-à-dire jamais) FIND... J'ai de très gros doutes sur la fiabilité de ce machin.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 1
    Par défaut Salut
    Bonjour,
    votre sujet m'intéresse car j'essaie de créer une macro qui selectionne une cellule, et essayes de chercher si le texte contenu dans cette cellule est également contenu dans un autre fichier dans une colonne spécifique,
    et si oui, faire de même avec la ville pour ainsi trouver une ligne en commun. Je pense que je pourrais partir de ton code afin dde l'améliorer, mais n'ayant que des très faibles connaissances en VBA, je ne sais pas trop par où commencer.( Si correspondance il y a, il faudrait mettre une cellule choisis de la ligne en VERT, sinon Rouge)
    J'imagine déjà la structure du code avec une boucle for ainsi que deux IF implémenter mais je ne connais pas le voc propre à VBA.
    En esperant un petit peu d'aides,
    bien cordialement

  9. #9
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Bonjour à tous,

    voici ton code un peu corrigé:
    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
     
    Dim PlageDeRecherche As Range, Trouve As Range
     
        ' equivalent recherche v pour remplir les données qui sont dans la base securisee
        Valeur_Cherchee = Provenance
     
        Set PlageDeRecherche = Sheets("Base sécurisée").Range("A1:A99999")
     
     
        Set Trouve = PlageDeRecherche.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
     
    If Not Trouve Is Nothing Then
            oidSite = Trouve.Offset(0, 2).Value
            libelleSite = Trouve.Offset(0, 3).Value
            libelleProvenance = Trouve.Offset(0, 1)
            TauxCommissionMAP = Trouve.Offset(0, 15)
            Typedevente = Trouve.Offset(0, 7)
            PrivePublic = Trouve.Offset(0, 9)
            Responsabledecompte = Trouve.Offset(0, 5)
            PremiereSign = Trouve.Offset(0, 10)
        End If

Discussions similaires

  1. [VBA] Code pour ouverture de dossier
    Par "Rone" dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/10/2008, 10h06
  2. problème de code pour police
    Par demando77 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 24/03/2008, 18h42
  3. Réponses: 8
    Dernier message: 08/03/2007, 16h54
  4. [VBA] code pour recherche automatique de données
    Par lg022 dans le forum VBA Access
    Réponses: 3
    Dernier message: 07/02/2007, 10h20

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