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 fonction Vlookup avec VBA


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
    Employé voulant apprendre à automatiser
    Inscrit en
    Février 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Employé voulant apprendre à automatiser

    Informations forums :
    Inscription : Février 2018
    Messages : 61
    Par défaut Problème fonction Vlookup avec VBA
    Bonsoir à tous,

    J'ai un petit soucis sur ma macro, j'aimerai faire un vlookup entre deux feuilles de mon excel,

    En gros j'ai une feuille "Collateral", l'autre s'appelle "Exposure"

    Je voulais faire un Vlookup de la valeur de la colonne A de ma feuille Collateral la chercher entre les colonnes A et D de ma feuille "Exposure" prendre la valeur de la troisième colonne après et mettre le résultat en colonne 6 de ma feuille "Collateral".

    Evidemment le nombre de mes lignes est variable, du coup je suis obligé de mettre le code J'ai essayé les codes suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    For l = Sheets("Collateral").Range("A2").End(xlUp).Row To 2 Step -1
    Sheets("Collateral").Cells(l, 6).Value = Application.VLookup(Sheets("Collateral").Cells(l, 1).Value, Sheets("Exposure").Range("A2:D").End(xlUp).Row, 3, False)
     
      Next

    Ainsi que


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'For l = Sheets("Collateral").Range("A2").End(xlUp).Row To 2 Step -1
    'Sheets("Collateral").Cells(l, 6).Value = Application.VLookup(Sheets("Collateral").Cells(l, 1).Value, (Sheets("Exposure").Range(Cells(2, 1), Cells(Rows.Count, 3).End(xlUp))), 3, False)
     
      'Next

    Vous auriez une idée de ce qui coince dans mon code ?

    Merci d'avance,

    Mrmouche

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    un premier point ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Exposure").Range("A2:D").End(xlUp).Row
    à transformer (en principe) en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Exposure").Range("A2:D" & Sheets("Exposure").Range("A65536").End(xlUp).Row)
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre averti
    Homme Profil pro
    Employé voulant apprendre à automatiser
    Inscrit en
    Février 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Employé voulant apprendre à automatiser

    Informations forums :
    Inscription : Février 2018
    Messages : 61
    Par défaut
    Bonjour Jean Philippe,

    Merci pour ta réponse, malheureusement la colonne 6 de ma feuille "collateral" qui devait accueillir le résultat de ma fonction vlookup est toujours vide,

    J'ai mis ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    For l = Sheets("Collateral").Range("A2").End(xlUp).Row To 2 Step -1
    Sheets("Collateral").Cells(l, 6).Value = Application.VLookup(Sheets("Collateral").Cells(l, 1).Value, Sheets("Exposure").Range("A2:D" & Sheets("Exposure").Range("A65536").End(xlUp).Row), 3, False)
     
      Next

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Citation Envoyé par Jean-Philippe André Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Exposure").Range("A2:D" & Sheets("Exposure").Range("A65536").End(xlUp).Row)
    Bonjour, je voudrais pas me fâcher avec un modérateur mais "Range("A65536").End(xlUp).Row" c'est une mauvaise habitude, depuis 2007 Excel dépasse les 65000 lignes il vaut mieux utiliser Range("A" & rows.count). qui marche pour les fichiers xls et xlsx

    De plus je crois qu'il y a un problème d'initialisation de la boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For l = Sheets("Collateral").Range("A2").End(xlUp).Row To 2 Step -1
    Soit tu pars de A2 et tu vas vers le bas (xldown) (si tu es sur qu'il n'y a pas de vide), soit tu pars de A & rows.count et tu vas vers le haut (xlup)
    Là tu pars de A2 et tu montes donc en A1 donc tu boucles de 1 a 2 step -1 donc il ne fait rien.

  5. #5
    Membre averti
    Homme Profil pro
    Employé voulant apprendre à automatiser
    Inscrit en
    Février 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Employé voulant apprendre à automatiser

    Informations forums :
    Inscription : Février 2018
    Messages : 61
    Par défaut
    Hello,

    Merci beaucoup pour votre aide,

    C'est vrai qu'il s'agissait d'un problème au début de la boucle, mon code fonctionne de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For l = Sheets("Collateral").Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
    Sheets("Collateral").Cells(l, 6).Value = Application.VLookup(Sheets("Collateral").Cells(l, 1).Value, Sheets("Exposure").Range("A2:D" & Sheets("Exposure").Range("A" & Rows.Count).End(xlUp).Row), 3, False)
        Next

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Citation Envoyé par halaster08 Voir le message
    Bonjour, je voudrais pas me fâcher avec un modérateur mais "Range("A65536").End(xlUp).Row" c'est une mauvaise habitude, depuis 2007 Excel dépasse les 65000 lignes il vaut mieux utiliser Range("A" & rows.count). qui marche pour les fichiers xls et xlsx
    On ne se fâche pas, tu as tout à fait raison
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

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

Discussions similaires

  1. [XL-2010] vba excel: fonction VLOOKUP avec plusieurs résultats
    Par LANGAZOU dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/05/2017, 21h46
  2. Problème fonction perso avec Decaler
    Par stryge63 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/02/2008, 09h40
  3. Fonction Solveur avec VBA?
    Par quynhhoa411 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/11/2007, 10h55
  4. [MySQL] problème fonction php avec LAST_INSERT_ID()
    Par carmen256 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 07/12/2006, 09h51
  5. Problème fonction random avec linux
    Par fabetvince dans le forum C
    Réponses: 12
    Dernier message: 25/05/2006, 23h45

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