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 Erreur d'exécution 1004 [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 254
    Points : 341
    Points
    341
    Par défaut Vlookup Erreur d'exécution 1004
    Bonjour à tous,

    Je planche depuis un petit moment maintenant sur le point suivant :

    J'ai deux feuilles de calculs :

    1ère feuille : 9.000 références produits
    2ème feuille : Prévision de vente sur 90.000 lignes

    Dans les prévisions de ventes, l'ensemble des 9000 références ne sont pas présentes. Je cherche donc à mettre en évidence celles qui y sont.
    Pour cela, j'utilise la fonction VlookUp de WorksheetFunction qui me retourne simplement la référence du produit recherché. Cependant, lors de la mise en marche, erreur d'exécution 1004...
    Impossible de trouver la solution

    J'ai essayé d'utiliser la fonction Find mais sans résultat (certainement une erreur de syntaxe que je n'ai pas réussi à corriger malgré l'aide de MS)

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub RechercheV_Ref
     
    Ligne = Feuil2.range("A13:A" & Rows.Count).End(xlDown).Row
     
    For Ligne = 2 To Ligne
     
        Worksheets("Feuil2").Cells(Ligne, 7) = Application.WorksheetFunction.VLookup(Sheets("Feuil2").range(Cells(Ligne, 8)), _
        Sheets("Feuil1").range("B13:B9000"), 1, False)
     
    Next
     
    End Sub
    Y a-t-il une explication logique dans ce morceau de code ?

    Ps : Je souhaite continuer par VBA afin d'inscrire cette procédure dans un programme.

    Bonne journée,

    Trystan

  2. #2
    Expert éminent
    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 : 66
    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
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Plusieurs choses.
    1 - Pour définir une dernière ligne, il est plus prudent de partir de la dernière cellule de la feuille de travail en remontant
    2 - Coder me semble illogique et dangereux (utilisation double de la même variable).
    3 - L'argumentation de la fonction VLookUp me semble bizarre.
    Je te conseillerais de l'écrire sur Excel tableur en utilisant l'enregistreur de macro .

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 254
    Points : 341
    Points
    341
    Par défaut
    Bonjour Marcel,

    Merci pour ta rapidité de réponse,

    1 - Pourquoi est-ce plus prudent de partie de la dernière ligne ? Cela ne revient-il pas au même de partir de la première ?

    2 - Comment puis-je faire pour créer une boucle jusqu'à la dernière ligne ? Créer une deuxième variable "i" par exemple ?

    3 - J'ai suivi ton conseil et maintenant ça marche parfaitement ! Merci beaucoup

  4. #4
    Expert éminent
    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 : 66
    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
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut,

    Pourquoi est-ce plus prudent de partie de la dernière ligne ? Cela ne revient-il pas au même de partir de la première ?
    Certes cela revient au même de partir de la 1ère dans 80% des cas.
    Mais partir de la dernière ligne de la feuille est plus prudent car les cellules vides inopinées sont ignorées.
    Tu peux tester.

    Comment puis-je faire pour créer une boucle jusqu'à la dernière ligne ? Créer une deuxième variable "i" par exemple ?
    Ta méthode est bonne mais mal argumentée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim i as Integer
    For i = ... to Ligne
    i doit bien entendu être déclarée en même type de variable que Ligne (du fait de l'égalité).

    A ce sujet, toujours déclarer les variables. Ce autrement qu'en Variant.
    Cette déclaration peut être rendue obligatoire par le menu Options de l'éditeur VBE.
    Dès lors, la ligne de code
    apparaîtra en en-tête de tout nouveau module.

    J'ai suivi ton conseil et maintenant ça marche parfaitement ! Merci beaucoup
    D'accord.
    Tu peux améliorer ton code en adaptant les remarques ci-dessus.
    Dès lors que celui-ci sera effectif, tu pourras placer cette discussion en mode "Résolue".

    Bonne continuation.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 766
    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 : 12 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Etant donné le contexte, j'opterais pour l'écriture de la formule dans la colonne concernée et ensuite conserver sa valeur. Bien plus intéressant qu'une boucle

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub T()
     Const myFormula As String = "=VLOOKUP(G13,Feuil1!$A$2:$C$13,2,FALSE)"
     Dim LastRow As Long
     LastRow = 20
     With Feuil2.Range("H13:H" & LastRow)
     .Formula = myFormula ' Ecriture de la formule
     .Value = .Value      ' Equivalent du Copier/Collaghe spécial.valeur
     End With
    End Sub
    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

  6. #6
    Expert éminent
    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 : 66
    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
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut Philippe,

    Content de te retrouver.

    En effet.
    Au vu du code, je craignais que la référence à la ligne 13 se répète.
    Ce n'est pas le cas.
    Bien vu.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


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

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