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 :

Erreur 424 avec VLOOKUP [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Par défaut Erreur 424 avec VLOOKUP
    Bonsoir,

    J'ai besoin de VLOOKUP dans une macro.
    J'ai regardé sur le forum et je me suis inspiré d'une solution proposée,à l'époque, par Ousk'l'nor.

    Je me suis attaché, du moins je le pense, à respecter ce code. Mais, au moment ou le code execute la ligne d'appel de la fonction, il me jette avec le message d'erreur 424 (Objet requis).

    Je dois dire que je comprend pas pourquoi.

    Voici mon morceau de code et merci à ceux qui pourront m'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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
        Public oWshMES As Object, oWshAVL As Object
        Public MaPlage As Range, Ligne As Range, FichierTeste As Range, PrecVal As Variant
     
        Sub essai()
            'supprimer la mobilité de l ecran
            Application.ScreenUpdating = False
            vChemin = ThisWorkbook.Path + "\" 'chemin des fichiers
            vFic(0) = vChemin + "mesg132.xlsx" 'fichiers à ouvrir
            Workbooks.Open FileName:=vFic(0) 'ouverture fichier MES
            Set oWshMES = ActiveWorkbook.Sheets("feuil1") 'active la variable
            vDerligneMES = Cells(1000000, 1).End(xlUp).Row 'comptage nbre de ligne
     
            'filtrer la colonne 12
            oWshMES.Range("$A$1:$S$" & vDerligneMES).AutoFilter Field:=12, Criteria1:="P" '" & codeClient
                If oWshMES.AutoFilter.Range.Columns(12).SpecialCells(xlCellTypeVisible).Cells.Count = 1 Then
                    For I = 1 To vNbCentre
                        vNbMES(I) = 0
                    Next
                Else
                    Set MaPlage = oWshMES.UsedRange.SpecialCells(xlCellTypeVisible)
                    'je compare les cellules de la colonne A
                    X = 1
                    For Each Ligne In MaPlage.Rows
    Retour_Boucle3:
                        PrecVal = Ligne.Cells(8).Value 'ligne de visualisation pour debogage
                        If Ligne.Cells(1).Value = "CENTRE" Then GoTo Suite3
                        'cumul total de MES
                        If Ligne.Cells(1).Value = vCentre(X) Then vNbMES(X) = vNbMES(X) + 1
                        'Recherche si PCE déjà reperé
                        If RechercheAV([ligne.cells(8).value], Workbooks("toto.xlsm").Worksheets("Prochaine_Liste_RROBs").Range("c:g"), 2) = False Then
                            vNbRepereOK(X) = vNbRepereOK(X) + 1
                        End If
                        'changement de code centre
                        If Ligne.Cells(1).Value <> vCentre(X) Then X = X + 1: GoTo Retour_Boucle3
    Suite3:
                    Next
                End If
        End Sub
    '**********************************************************************************************************************
    '**********************************************************************************************************************
    '             FONCTION de RECHERCHE
    '**********************************************************************************************************************
    '**********************************************************************************************************************
        Public Function RechercheAV(Parm1 As Range, Parm2 As Range, Parm3 As Integer) As Boolean
            Dim nada As Variant
            On Error GoTo Err_Test
            nada = Application.WorksheetFunction.VLookup(Parm1, Parm2, Parm3, False)
            RechercheAV = True
    Bye:
            Exit Function
     
    Err_Test:
                RechercheAV = False
                Resume Bye
        End Function
     
    '**********************************************************************************************************************
    '**********************************************************************************************************************
    '
    '**********************************************************************************************************************
    '**********************************************************************************************************************

  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 684
    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 684
    Par défaut
    salut,
    pourquoi mettre oWshMES et oWshAVL en objet au lieu de les mettre directement en Worksheet ?

    Sinon, l'usage des variables globales est à prendre avec des pincettes, surtout s'il s'agit de variables object ou variant
    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 (3e édition)
    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 éclairé Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Par défaut
    Bonjour,

    En fait, je ne connais pas toutes les différences entre les déclarations OBJECT ou directement Worksheet. Je ne sais pas quelles incidences cela peut avoir.

    Je regarde beaucoup sur les discussions pour m'aider et c'est vrai que certaines bases du développement me manquent, surement comme beaucoup d'entre nous.

    Toujours est-il que dans ce que je suis entrain d'écrire, je navigue entre 3 fichiers et que cette méthode d'écriture me permet de raccourcir les lignes de code et que cela, jusqu'à présent fonctionnait.

    Je suis juste embêté par l'erreur 424, le fichier de recherche ayant le focus ou non.

    En fait, cela bloque sur l'appel de la fonction, je n'accède même pas à celle-ci, ce qui me paraît étrange. C'est pourquoi, j'ai mis ce morceau, incomplet, de mon code pour voir si dezs yeux experts verraient une anomalie que moi je ne vois pas dans l'écriture de mon code.

    Merci d'avance.

  4. #4
    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 684
    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 684
    Par défaut
    et en enlevant les crochets ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If RechercheAV([ligne.cells(8).value], Workbooks("toto.xlsm").Worksheets("Prochaine_Liste_RROBs").Range("c:g"), 2) = False Then
    devenant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If RechercheAV(ligne.cells(8).value, Workbooks("toto.xlsm").Worksheets("Prochaine_Liste_RROBs").Range("c:g"), 2) = False Then
    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 (3e édition)
    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

  5. #5
    Membre éclairé Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Par défaut
    L'erreur est toujours présente sans les crochets.

    J'ai testé en remplaçant par une valeur ,cela pose une erreur liée à la valeur (range attendu) et si je rajoute les crochets à ce paramètre, je suis de nouveau en présence de l'erreur 424.

    Le bout de code qui m'a servi à écrire mon code et que j'ai trouvé sur le forum est celui-ci:
    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
    22
    23
    24
    Sub test()
    choixjoueur = "toto"
    Set I = Sheets(1).Range("A1:b3")
     
    'Remplissage des textbox après choix du joueur
    fnumero = Application.WorksheetFunction.VLookup(choixjoueur, I, 2)
    MsgBox fnumero
        test = Application.WorksheetFunction.VLookup(Range("B1").Value, Sheets("feuil1").Range("A1:O10066"), 5, False)
        Range("E5").Value = test
     
     
     
    If RechercheAV([CodeSummit1], Workbooks("Export_MTM.xls").Worksheets("MTM_ALL_T2").Range("A:F"), 6) Then
        Recherche_MtM_Mid_T2 = Application.WorksheetFunction.VLookup([CodeSummit1], Workbooks("Export_MTM.xls").Worksheets("MTM_ALL_T2").Range("A:IV"), 6, False)
        Else
            If RechercheV([CodePOD], Workbooks("Export_MTM.xls").Worksheets("MTM_ALL_T2").Range("A:F"), 6) Then
                Recherche_MtM_Mid_T2 = Application.WorksheetFunction.VLookup([CodePOD], Workbooks("Export_MTM.xls").Worksheets("MTM_ALL_T2").Range("A:IV"), 6, False)
                Else
                    Recherche_MtM_Mid_T2 = "Non trouvé"
            End If
    End If
     
     
    End Sub
    Je pense avoir retranscris correctement cet exemple.

    Merci JPCHECK

  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 684
    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 684
    Par défaut
    ok,
    on "garde" les crochets, mais on vire le .Value dans ce cas
    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 (3e édition)
    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

  7. #7
    Membre éclairé Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Par défaut
    Idem sans .valeur

    Ce qui m'étonne, c'est l'erreur avant même d'attaquer la fonction.

    J'ai testé plusieurs solutions avec VLOOKUP.

    Je ne comprends pas, avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        PrecVal = Application.WorksheetFunction.VLookup(CStr([121112875436]), Workbooks("toto.xlsm").Worksheets("Prochaine_Liste_RROBs").Range("c1:g" & vDerligneRROB), 2, False)
    La variable PRECVAL remonte une info si le paramètre recherché est présent et une erreur 424 normale si pas présent.

    J'ai mis des "ON ERROR GOTO Err_Test" et cette commande n'est pas exécutée, seule l'erreur 424 remonte.

    merci JPCHECK

  8. #8
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Bonjour,
    je me permet d'intervenir car il y a quelque chose que j'ai du mal a comprendre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function RechercheAV(Parm1 As Range, Parm2 As Range, Parm3 As Integer) As Boolean
    Donc il te faut des range en donnée d'entré
    les crochet ok ca permet de faire un range mais il faut mettre l'adresse à l'intérieure pas la valeur

    Donc je te suggère soit de modifier ta fonction pour prendre comme argument directement une valeur texte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function RechercheAV(Parm1 As string, Parm2 As Range, Parm3 As Integer) As Boolean
    Soit de mettre effectivement un range (avec l'adresse et pas la valeur) lors de sont appelle
    donc sans crochet et sans value et avec le cells
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     RechercheAV(ligne.cells(8), Workbooks("toto.xlsm").Worksheets("Prochaine_Liste_RROBs").Range("c:g"), 2) = False

  9. #9
    Membre éclairé Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Par défaut
    Merci à Krovax d'être intervenu, son idée a été la bonne.

    Je suis du moins très étonné que l'auteur du post sur lequel ousk'l'nor a donné cette possibilité l'ai clos en disant que cela fonctionnait.

    Merci à vous pour vos réponses.

    Avec la méthode que j'applique dans ce post, les temps d'exécution du code est énorme à mon gout, alors afin de le réduire et en cherchant tout en attendant une solution à cette erreur, j'ai modifié mon code de manière à ne me promener que dans une seule base (feuille)

    En fait, j'applique une formule "RECHERCHEV" dans ma dernière colonne et je colle les valeurs ainsi l'exécution gagne énormément en vitesse.

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

Discussions similaires

  1. Erreur avec vlookup dans VBA
    Par jasonpolakow dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/10/2012, 22h10
  2. Erreur 424: objet manquant avec methode union
    Par JonSnow dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/04/2010, 10h53
  3. pas d'erreur N/A avec Vlookup
    Par doli100 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/10/2007, 18h54
  4. Erreur fréquente avec ASP et IIS
    Par Community Management dans le forum ASP
    Réponses: 2
    Dernier message: 11/02/2004, 23h20
  5. Erreurs IIS avec Multiples Frames avec xmlrad
    Par powerlog dans le forum XMLRAD
    Réponses: 4
    Dernier message: 01/07/2003, 14h15

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