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 :

vlookup ne marche pas avec les variables saisies ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2013
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 81
    Par défaut vlookup ne marche pas avec les variables saisies ?
    Bonjour,

    J'ai un problème tout bête qui ne devrait pas prendre beaucoup de temps à résoudre pour quelqu'un qui connait le phénomène.

    La fonction recherchev (et vlookup dans vba) semble marcher quand j'appelle la matrice dans laquelle je recherche par "nom" de colonne
    Par exemple, le code suivant marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.vlookup("mot", Range("AR:AT"),2,faux)
    Par contre, quand j'adresse mes colonnes par rapport au numéro de colonne (en utilisant des variables, cela ne marche plus...
    Pour le même exemple, le code ne marche plus si j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Public début_recherche as Byte
    Public fin_recherche as Byte
     
    sub recherche
     début_recherche = 44
    fin_recherche  = 46
     
    Application.vlookup("mot",Range(Columns(début_recherche ),columns(fin_recherche  )),2,faux)
    J'avoue ne pas comprendre pourquoi...
    Le pire est que si je met tout simplement 44 et 46 à la place des variables, mon programme marche !

    Quelqu'un saurait-il où vient mon erreur ?

  2. #2
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Marche très bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub recherche()
     début_recherche = 1
    fin_recherche = 2
     
    MsgBox (Application.VLookup("mot", Range(Columns(début_recherche), Columns(fin_recherche)), 2, False))
    End Sub

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2013
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 81
    Par défaut
    Bonjour Enguegue,

    J'avais trop simplifié. Maintenant, je me rends compte que ce code marche. Un grand merci déjà à toi, car cela me permet de préciser mon problème :

    C'est quand je fais référence à une autre feuille que le code ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub recherche()
     début_recherche = 1
    fin_recherche = 2
     
    MsgBox (Application.VLookup("mot", Worksheets("nom_feuil_2").Range(Columns(début_recherche), Columns(fin_recherche)), 2, False))
    End Sub
    j'ai testé. celui-ci ne marche pas...

  4. #4
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Si ta rechercheV ne trouve pas elle va te renvoyer une erreur... (Normal)

    On error goto ....

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2013
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 81
    Par défaut
    Bonjour Enguegue,

    D'abord, quand ma recherchev ne marchait pas avec mon code précédent, elle me renvoyait "#N/A", mais passait à la ligne suivante sans me mettre de message d'erreur.

    Ensuite, j'ai testé sur une ligne dont je suis sûre que ma recherchev devrait trouver quelque chose, et il apparait quand même un message d'erreur.

  6. #6
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Moi le code me trouve bien les valeurs.. donc je ne comprends pas trop

  7. #7
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,

    c'est une chose que l'on ne cesse de répéter sur ce forum , il ne faut pas utiliser les objets : range, Cells, Columns.. sans les précéder de l'objet Classeur/feuille concerné ! travailler sur "la feuille active" est une source intarissable d'erreur ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ThisWorkbook.Worksheets("nom_feuil_2")
    MsgBox (Application.VLookup("mot", .Range(.Columns(début_recherche), .Columns(fin_recherche)), 2, False))
    end with

  8. #8
    Membre confirmé
    Inscrit en
    Juin 2013
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 81
    Par défaut
    Bonjour bbil,

    J'ai effectivement déjà eu une erreur quasi similaire, mais je n'ai visiblement pas retenu la leçon.
    Ceci s'explique par le fait que j'ai du mal avec l'utilisation du "with".
    Par exemple ici, mon code ne comporte pas de Msgbox, mais plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("nom_feuil1").Cells(i,2)=Application.VLookup("mot", .Range(.Columns(début_recherche), .Columns(fin_recherche)), 2, False)
    La feuille nom_feuil1 est la feuille active dans mon code.

    Si j'ai bien compris l'utilisation du with (vraiment pas sûr), je devrais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    With ThisWorkbook.Worksheets("nom_feuil1")
    .Cells(i,2)=Application.VLookup("mot", Worksheets("nom_feuil2").Range(Columns(début_recherche), Columns(fin_recherche)), 2, False)
    End with
    C'est cela ?

    Mais alors, pourquoi vba marche-t-il quand j'adresse mes colonnes avec les lettres ?
    Et à quoi sert vraiment le with ? J'avais l'impression que ça permettait juste de ne pas avoir à répéter le classeur et/ou feuille qu'on utilisait (donc une utilité de facilité d'utilisation, non une fonctionnalité requise pour que le programme marche).

    Merci

  9. #9
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Feuil1
    .cells(1,2)=1
    end with
    EQUIVAUT a :

    Tu as oublié la moitié des points

  10. #10
    Membre confirmé
    Inscrit en
    Juin 2013
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 81
    Par défaut
    Donc si je comprends bien, il faut que je mette en "with", la feuille qui est le plus souvent adressée dans ma formule et non nécessairement la feuille que je veux "active" ?

    Cela serait-il bon si je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With ThisWorkbook.Worksheets("nom_feuil2")
    Worksheets("nom_feuil1").Cells(i,2)=Application.VLookup("mot", .Range(.Columns(début_recherche), .Columns(fin_recherche)), 2, False)
    End with

  11. #11
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    re,


    tu peu aussi utiliser une variable objet pour tes feuilles ..:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    'Définition de variable objet pointant sur tes feuilles
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Set sh1 = ThisWorkbook.Worksheets("Feuil1")
    Set sh2 = ThisWorkbook.Worksheets("Feuil2")
     
     
    (...)
    'Utilisation de ces variables objets pour accéder à tes feuilles
    sh1.Cells(i,2)=Application.VLookup("mot", sh2.Range(sh2.Columns(début_recherche), sh2.Columns(fin_recherche)), 2, False)

  12. #12
    Membre confirmé
    Inscrit en
    Juin 2013
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 81
    Par défaut
    D'accord,

    merci à tous les deux !

    Pour résumer pour ceux qui liront cela après (parce que mes questions étaient un peu décousues) :

    1) excel est tatillon : Il faut lui préciser la feuille à laquelle on s'adresse à chaque fois si on utilise un objet range avec des columns (il est plus laxiste si on utilise le nom en lettre des colonnes) : Worksheets("f1").Range(Worksheets("f1").columns(1), Worksheets("f1").columns(3)).

    2) Trois moyens pour adresser les feuilles (et classeurs) dans lesquels on veut se trouver : les recopier à chaque fois, utiliser des with, ou écrire des variables au début

    Novice_vba

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 12/04/2011, 18h30
  2. [Hibernate] Hibernate ne marche pas avec les servlets!
    Par IM2009 dans le forum Hibernate
    Réponses: 3
    Dernier message: 23/11/2009, 23h29
  3. event.target marche pas avec les images
    Par tuxout dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 18/08/2006, 18h46
  4. [VB6] TypeOf ne marche pas avec les Label ?
    Par belfaigore dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 21/04/2006, 14h36
  5. [CSS] Bug IE avec height ne marche pas avec les %
    Par El Riiico dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 23/06/2005, 18h11

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