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 :

RECHERCHEV dans une macro enregistrée [XL-2002]


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
    Technicien réseau
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Par défaut RECHERCHEV dans une macro enregistrée
    Bonjour à tous,

    J'ai besoin d'aide car j'ai toujours des difficultés pour coder en VBA. Je cherche dans une macro enregistré à remplacer le code généré par une RECHERCHEV par un petit programme équivalent.
    La formule est la suivante :
    RECHERCHEV(V2;FEUIL2!$B$2:$C$50;2;FAUX)

    Ce nouveau code effectuerai la "RECHERCHEV" en colonne W - FEUIL1. Il comparait exactement la colonne V (à partir de la ligne 2) - FEUIL1 jusqu'à la dernière cellule non vide à la colonne B de la Matrice (colonne B et C - FEUIL2) jusqu'à la dernière cellule non vide.

    Après correspondance, les informations rapatriées en colonne W - FEUIL1 serait celles trouvées en colonne C - FEUIL2. Dans le cas où il n' y a pas correspondance, il faudrait indiquer dans la cellule correspondante de la colonne W - FEUIL1 : "NON TROUVE".

    Je vous remercie par avance pour votre aide.

    Cordialement.
    NoodleDS

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Par défaut
    Bonsoir au tu peux faire ça dans ta case

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =SIERREUR(RECHERCHEV(V2;FEUIL2!$B$2:$C$50;2;FAUX); "NON TROUVE")
    Bonne soirée

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Citation Envoyé par jouana Voir le message
    Bonsoir au tu peux faire ça dans ta case

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =SIERREUR(RECHERCHEV(V2;FEUIL2!$B$2:$C$50;2;FAUX); "NON TROUVE")
    Bonne soirée
    Attention, SIERREUR Disponible seulement à partir d'Excel 2007

  4. #4
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Par défaut
    Bonjour,
    La véritable formule que j'utilise est celle-ci :
    =SI(ESTERREUR(RECHERCHEV(V2;FEUIL2!$B$2:$C$50;2;FAUX));T2;(RECHERCHEV(V2;FEUIL2!$B$2:$C$50;2;FAUX))).
    Je souhaiterai remplacer cette formule par un code VBA qui s’adapterait automatiquement à la taille de la matrice qui peut évoluer en nombre de ligne, tout comme le nombre de ligne des colonnes concernées en FEUIL1.

    Je vous remercie par avance.

    Cordialement.
    NoodleDS

  5. #5
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Par défaut
    Bonjour,
    Pouvez-vous m'aider, la macro enregistrée donne le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveCell.FormulaR1C1 = _
            "=IF(ISERROR(VLOOKUP(RC[-1],FEUIL2!R2C2:R50C3,2,FALSE)),RC[-3],(VLOOKUP(RC[-1],FEUIL2!R2C2:R50C3,2,FALSE)))"
    Malheureusement, je ne peux m'en servir comme ceci, car la matrice (FEUIL2!R2C2:R50C3) peut être d'une fois à l'autre de taille différente.
    Or, je souhaite un code qui puisse s'adapter à toutes les situations.

    Je vous remercie par avance pour votre aide.

    Cordialement.
    NoodleDS

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ce que tu veux obtenir, c'est une plage dynamique dans une formule qui est contenue dans un chaîne de caractères
    Donc la première chose à faire est de définir par exemple dans une variable l'adresse pour obtenir FEUIL2!R2C2:R50C3.
    Dans cet exemple la variable Plage va avoir comme valeur Feuil2! & l'adresse calculée dynamiquement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Dim rng As Range, plage As String
     Set rng = ThisWorkbook.Worksheets("Feuil2").Range("A1").CurrentRegion
     With rng
      plage = .Worksheet.Name & "!" & .Address(ReferenceStyle:=xlR1C1)
     End With
     MsgBox plage
    Il suffit ensuite de faire une concaténation de la formule et de l'adresse ainsi trouvée ou un Replace (que personnellement je privilégie). A toi de choisir.

    Exemple avec Replace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Dim rng As Range, plage As String, Formula As String
     ' "=VLOOKUP(RC[-1],R2C1:R3C3,2,FALSE)"
     Formula = "=VLOOKUP(RC[-1],<Addr>,2,FALSE)"
     Set rng = ThisWorkbook.Worksheets("Feuil1").Range("A1").CurrentRegion
     With rng
      plage = .Worksheet.Name & "!" & .Address(ReferenceStyle:=xlR1C1)
     End With
     Formula = Replace(Formula, "<Addr>", plage)
     MsgBox Formula
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/03/2015, 15h43
  2. Créer un bouton "enregistrer" dans une Macro
    Par sossso112333 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/08/2014, 12h04
  3. probleme d'enregistrement dans une macro
    Par mysterauto dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/11/2012, 07h48
  4. Réponses: 3
    Dernier message: 02/03/2012, 15h31
  5. Enregistrer des paramètres dans une macro xla
    Par Daejung dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 07/10/2008, 17h29

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