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 VBA.


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Par défaut VLookup VBA.
    Bonjour,

    Je suis confrontée a un problème, je n'arrive pas a utiliser la fonction:VLookup dans VBA.
    J'ai essayé avec application aussi mais çà ne fonctionne pas! :-(
    Erreur suivante: erreur 1004

    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    axywm1 = (1 - ageDateCalcul_mois) * WorksheetFunction.VLookup(ageDateCalcul_annee, Sheets("B").Range("H"), a + 2, False) + (ageDateCalcul_mois) * WorksheetFunction.VLookup(ageDateCalcul_annee + 1, Sheets("B").Range("H"), a + 2, False) + (ageDateCalcul_mois) * WorksheetFunction.VLookup(ageDateCalcul_annee + 1, Sheets("B").Range("H"), a + 2, False)
    Il me renvoie axywm1=0 ou bien valeur alors qu'il y a bel est bien une valeur dans axywm (lorsque je décompose l'équation j'obtiens une réponse).

    Est-ce que qelqu'un pourrait m'aider?
    Je vous remercie d'avance!

  2. #2
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Tu peux essayer de segmenter ton expression afin de mieux cibler le problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Test2()
        var1 = ageDateCalcul_mois
        var2 = Application.VLookup(ageDateCalcul_annee, Sheets("B").Range("H"), a + 2, False)
        var3 = Application.VLookup(ageDateCalcul_annee + 1, Sheets("B").Range("H"), a + 2, False)
        axywm1 = (1 - var1) * var2 + var1 * var3 + var1 * var3
    End Sub
    Cordialement.

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Par défaut
    Merci beaucoup mais j'ai essayé et ca ne fonctionne toujours pas. Y a t il qqch de particulier à faire lors de l'utilisation de Vlookup? la syntaxe est-elle correcte?

  4. #4
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Tu écris
    Cela correspond bien à une feuille nommée "B" et une plage nommée "H" ?

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Par défaut
    oui tout a fait.

    J'ai décomposé le calcul:
    axywm1 = (1 - ageDateCalcul_mois) * x1 + (ageDateCalcul_mois) * x2
    résultat j'ai bien une valeur dans ageDateCalcul_mois et dans x1 et x2 mais j'obtiens axywm1 =0 alors que ca ne devrait pas être le cas.
    J'ai vérifier les dimensions de chaque variable.

    Merci pour votre aide!

  6. #6
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Et pourtant, si erreur il y a, elle ne vient pas du calcul.
    Fais le test suivant en adaptant les valeurs de tes variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Test()
    Dim axywm1, ageDateCalcul_mois, x1, x2
        ageDateCalcul_mois = 25
        x1 = 2
        x2 = 4
        axywm1 = (1 - ageDateCalcul_mois) * x1 + (ageDateCalcul_mois) * x2
        MsgBox "axywm1 : " & axywm1
    End Sub
    Cordialement.

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Par défaut
    oui effectivement.
    Je vous donne un peu plus d'informations sur mon code peut-être que ca pourra aider:

    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 axywm1 As Double
    If methode = 2 Then
     
    If marie = 1 And Year(date_naiss_conjoint) <> 1900 Then 
    x_y = WorksheetFunction.Round((ageDateDebut - ageDateDebut_conjoint), 0)
    ElseIf marie = 1 And Year(date_naiss_conjoint) = 1900 Then If Sexe = 1 Then
    x_y = WorksheetFunction.Round(ageDateCalcul - ((1 - ageDateCalcul_mois_conjoint) * xy(ageDateCalcul_annee - 16) + (ageDateCalcul_mois_conjoint) * xy(ageDateCalcul_annee - 16 + 1)), 0)
    ElseIf Sexe = 2 Then
    x_y = WorksheetFunction.Round(ageDateCalcul - ((1 - ageDateCalcul_mois_conjoint) * yx(ageDateCalcul_annee - 16) + (ageDateCalcul_mois_conjoint) * yx(ageDateCalcul_annee - 16 + 1)), 0) 
    End If
    End If
    a = WorksheetFunction.HLookup(x_y, Worksheets("B").Range("I"), 2)
    If Sexe = 1 And marie = 1 Then
    x1 = WorksheetFunction.VLookup(ageDateCalcul_annee, Sheets("B").Range("A"), a + 2, False)
    x2 = WorksheetFunction.VLookup(ageDateCalcul_annee + 1, Sheets("B").Range("A"), a + 2, False)
    axywm1 = (1 - ageDateCalcul_mois) * x1 + (ageDateCalcul_mois) * x2
    ElseIf Sexe = 2 And marie = 1 Then
    future_axywm = (1 - ageDateCalcul_mois) * WorksheetFunction.VLookup(Int(ageDateCalcul), Sheets("B").Range("A"), a + 2) + (ageDateCalcul_mois) * WorksheetFunction.VLookup(Int(ageDateCalcul) + 1, Sheets("B").Range("A"), a + 2)
    Else
    future_axywm = 0
    End If

  8. #8
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Je pense que ta recherche échoue => (et donc génère une erreur) tout simplement car la valeur n'est pas trouvée dans la colonne.
    Vérifie avec un recherchev sur la feuille concernée "à la main".

    Attention aussi au fait que tu utilises Vlookup une fois avec le 4ème paramètre à False (recherche du terme exact) et une fois sans paramètre (par défaut à True). Est ce volontaire?

    Cordialement.

  9. #9
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Ouvre la fenêtre Variables locales et déroule ta procédure en pas à pas (avec F8).
    Tu pourras visualiser la valeur de tes 5 variables (ageDateCalcul_annee, x1, x2, ageDateCalcul_mois et axywm1) et voir ce qui amène au résultat axywm1=0 .

    Cordialement.

  10. #10
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Par défaut
    J'obtiens maintanant une valeur pour le axywm. Va savoir pourquoi
    J'utilise cette valeur dans une autre formule. Et la je me retrouve confrontée au même type de problème:

    M="formule"

    Si j'execute seulement le terme "formule" dans la fenêtre d'execution je trouve une valeur par contre cette valeur n'est pas affectée à la variable M et ce je ne sais pourquoi, je cherche encore.
    Avez-vous des pistes de recherche.

    Merci infiniment pour votre aide

  11. #11
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Par défaut
    J'ai trouvé!
    L'erreur se trouvait dans un autre Vlookup dans ma fonction. Non utilisée dans mon calcul mais qui était quand même calculé a chaque fois que je lancait ma fonction. Ce Vlookup générait une erreur.

    Merci beaucoup pour votre aide!

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

Discussions similaires

  1. VLOOKUP VBA probleme
    Par bentor22 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 22/01/2013, 16h44
  2. [XL-2007] Souci Vlookup VBA
    Par trane51 dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 15/06/2011, 14h47
  3. Vlookup VBA / RECHERCHEV
    Par JimJames23 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/04/2011, 11h27
  4. Vlookup VBA - pb de format?
    Par ADbtr dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/06/2010, 13h57
  5. Vlookup - VBA - Sheets(2)
    Par Wildcat dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/12/2008, 15h18

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