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 :

RechercheV avec variables ! [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Par défaut RechercheV avec variables !
    Bonjour à tous,

    j'ai un petit problème concernant le paramètrage de ma RechercheV, je vous explique:

    j'ai un premier fichier, contenant les informations à rapporter.
    Et un deuxième fichier excel où je veux rapporter mes informations.

    Au début de ma macro, j'ai une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            stFichier_EP = Application.GetOpenFilename
            Workbooks.Open Filename:=stFichier_EP
    me permettant de localiser le premier fichier.
    Dans mon deuxième fichier, j'ai ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            While Not IsEmpty(Range("D" & j))
            Range("J" & j).FormulaR1C1 = _
            "=VLOOKUP(RC[-6],'[Etat_Parc.xls]Export Demandes en Masse'!R2C1:R1140C4,2,FALSE)"
            j = j + 1
            Wend
    La fonction marche, cependant j'ai essayé de plusieurs façons mais je ne parviens à trouver la bonne pour:
    -à la place de [Etat_Parc.xls] je veux mettre ma variable stFichier_EP afin que n'importe où se trouvent les deux fichiers la macro marchent.

    - à la place de Export Demandes en Masse avoir simplement la feuil1 (la première feuille sachant que sont nom peut varier)


    - à la place de R2C1:R1140C4 avoir R2C1:R& i &C4, car le nombre de ligne peut varier.

    Merci de votre aide

  2. #2
    Membre extrêmement actif
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 037
    Billets dans le blog
    5
    Par défaut
    bonjour,

    essayes ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... = "=VLOOKUP(RC[-6],'[" & stFichier_EP & "]" & Workbooks(stFichier_EP).Sheets(1).Name & "!R2C1:R" & i & "C4",2,False)"

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

    merci de votre réponse, mais il y a une erreur de code, vba surligne la virgule avant le 2, et met comme message d'erreur "Atttendu : fin d'instruction".

    Je ne trouve pas l'erreur, une erreur de côte ?

    Merci !

    PS: j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "=VLOOKUP(RC[-6],'[" & stFichier_EP & "]" & Workbooks(stFichier_EP).Sheets(1).Name & "'!R2C1:R" & i & "C4,2,False)"
    mais message d'erreur: erreur d'execution 9
    l'indice n'appartient pas à la sélection

    Et au passage, est-il possible d'utiliser un SI pour dire que si la RECHERCHEV n'a rien rapporté, alors... je pense créer un onglet avec les cas non trouvés.

    Merci

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Par défaut
    L'erreur vient visiblement de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "]" & Workbooks(stFichier_EP).Sheets(1).Name & "
    ainsi que de ma variable contenant le chemin d'accès au fichier...
    Une fois ma macro éxécutée, j'obtient cette formule dans le fichier Excel:

    =RECHERCHEV(D2;'[C:\Users\mon_nom\Desktop\test\[exportEtatDeParc-20130502-104848 - Copie.xls]]exportEtatDeParc-20130502-10484'!$A$2:$D$1141;2;FAUX)

    alors que la bonne formule devrait être:

    =RECHERCHEV(D2;'[exportEtatDeParc-20130502-104848 - Copie.xls]Export Demandes en Masse'!$A$2:$D$1140;2;FAUX)


    lorsque je met :

    =RECHERCHEV(D2;'[C:\Users\mon_nom\Desktop\test\[exportEtatDeParc-20130502-104848 - Copie.xls]]Export Demandes en Masse'!$A$2:$D$1140;2;FAUX)

    j'ai un problème sur le 'C:'.

    Sinon j'ai peu être une autre solution, mais est-il possible de jouer avec cette chaine de caractère:
    C:\Users\mon_nom\Desktop\test\exportEtatDeParc-20130502-104848 - Copie.xls

    est de supprimer la partie de droite jusqu'au premier '\' pour avoir:
    C:\Users\mon_nom\Desktop\test

  5. #5
    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,


    essai d'utiliser une variable workbook pour ton classeur :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim wk as workbook 
    (...)
    set wk = Workbooks.Open (Filename:=stFichier_EP)
    (...)
    "=VLOOKUP(RC[-6],'[" & wk.name & "]" & wk.Sheets(1).Name & "'!R2C1:R" & i & "C4,2,False)"
    (..)

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Par défaut
    Merci pour la réponse mais ça me met "erreur automation"...

    J'ai presque réussi, il faut que j'obtienne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '=RECHERCHEV(LC(-6);'G:\Commun\Stagiaire\mon_nom\[Stage[Etat_Parc.xls]Export Demandes en Masse]Export Demandes en Masse'!L2C1:L1140C4;2;FAUX)
    à partir de ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "=VLOOKUP(RC[-6],'[Etat_Parc.xls]Export Demandes en Masse'!R2C1:R1140C4,2,FALSE)"
    Personne n'a une idée ? svp

  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
    Citation Envoyé par sasafca Voir le message
    Merci pour la réponse mais ça me met "erreur automation"......
    montre ton code ..

  8. #8
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    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
    stFichier_EP = Application.GetOpenFilename
     
     Workbooks.Open Filename:=stFichier_EP
     
     NomFeuil1 = ActiveWorkbook.Worksheets(1).Name
     classeur = ActiveWorkbook.Name
     chemin = Mid(stFichier_EP, 1, Len(stFichier_EP) - Len(classeur))
     
     r = "R2C1:R" & i & "C4"
     
     While Not IsEmpty(Range("D" & J))
     
      formule = "=VLOOKUP(RC[-6],'" & chemin & "[" & classeur & "]" & NomFeuil1 & "'!" & r & ",2,FALSE)"
     
      Range("j" & J).FormulaR1C1 = formule
     
      J = J + 1
     Wend

  9. #9
    Membre confirmé
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Par défaut
    Merci beaucoup pour cette réponse !!

    Cependant, je viens de tester, et ça ne marche pas pourtant le chemin d'accès semble être le bon...


    Encore merci !

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Une idée parmi d'autres.
    Lorsque je dois insérer des paramètres dans une chaîne de caractères (par exeple une requête SQL ou une Date dans un IF, je travaille toujours de cette façon.
    Dans ce cas précis, tu places ta formule dans une variable (Formula pour cet exemple) et le chemin dans une autre (ici Folder)
    Dans la variable Formula, tu insères un texte (moi par convention je le place entre deux dièses (exemple #Folder#)
    Ensuite tu utilises un Replace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub InsertFormula()
     Dim Formula As String, Folder As String
     Folder = "Z:\Formations\En préparation\Excel - Les Liaisons\"
     Formula = "=VLOOKUP(RC[-1],'#Folder#[Liaison Test Fonction - Fichier Source.xls]Recherche'!R2C1:R6C10,2,FALSE)"
     With ThisWorkbook.Worksheets("Feuil2")
     .Range("B3") = Replace(Formula, "#Folder#", Folder)
     End With
    End Sub
    L'idéal est de créer une fonction avec comme argument le nom et la valeur à remplacer.
    Tu pourrais aussi ajouter comme paramètres le nom du classeur, la plage etc...
    Cela facilite la maintenance et le changement.
    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

  11. #11
    Membre confirmé
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Par défaut
    C’est bon j'ai réussi grâce à Docmarti!

    Merci à tous pour vos réponses !

    Voici ce que j'ai fait si jamais sa sert a quelqu'un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
            NomFeuil1 = ActiveWorkbook.Worksheets(1).Name
            classeur = ActiveWorkbook.Name
            chemin = Mid(stFichier_EP, 1, Len(stFichier_EP) - Len(classeur))
            r = "R2C1:R" & i & "C4"
    
    ActiveWorkbook.Save
    
    
            formule = "=VLOOKUP(RC[-6],'" & chemin & "[" & classeur & "]" & NomFeuil1 & "'!R2C1:R" & i & "C4,2,FALSE)"
            Range("J" & j).FormulaR1C1 = formule
    J'ai rajouté la sauvegarde du fichier et ça à marché.
    Cependant j'ai quelque recherche qui me ramène #N/A,
    comment gérer ce cas ?

    merci !!

  12. #12
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonsoir;
    Citation Envoyé par sasafca Voir le message
    Cependant j'ai quelque recherche qui me ramène #N/A,
    comment gérer ce cas ?
    merci !!
    Voir la réponse dans cette discussion Comment ne pas renvoyer le message d'erreur #N/A
    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

  13. #13
    Membre confirmé
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Par défaut
    Je dois faire comment du coup avec ça :

    formule = "=VLOOKUP(RC[-6],'" & chemin & "[" & classeur & "]" & NomFeuil1 & "'!R2C1:R" & i & "C4,2,FALSE)"
    Range("J" & j).FormulaR1C1 = formule

    et ça ? :

    =SI(A1<>0;SI(ESTNA(RECHERCHEV(A1;Communaute;2;0));"Pas trouvé";RECHERCHEV(A1;Communaute;2;0));0)


    Merci !!

  14. #14
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonsoir,

    La formule ESTNA(Formule) renvoie VRAI si la formule retourne l'erreur #N/A
    Donc dans l'exemple donné, en imbriquant cette formule dans un SI on affiche "Pas trouvé" si ESTNA(Formule) renvoie VRAI et dans le cas contraire on refait un RECHERCHEV
    Dans la version anglaise d'Excel : RECHERCHEV = VLOOKUP, ESTNA = ISNA, SI = IF
    Le SI(A1<>0, n'a pas de raison d'être dans ton cas.
    Avant de le traduire en VBA, insère la formule directement dans Excel et à l'aide de l'enregistreur de macros, tu auras la traduction de la formule en VBA.
    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

  15. #15
    Membre confirmé
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Par défaut
    C'est bon c'est fait !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    formule = "=IF(ISNA(VLOOKUP(RC[-6],'" & chemin & "[" & classeur & "]" & NomFeuil1 & "'!R2C1:R" & i & "C4,2,0)),""Pas trouvé"", VLOOKUP(RC[-6],'" & chemin & "[" & classeur & "]" & NomFeuil1 & "'!R2C1:R" & i & "C4,2,0))"
    Si ça peut aider quelqu'un !

    Encore merci à tous pour votre aide !!

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

Discussions similaires

  1. [XL-2003] RECHERCHEV avec variable, dans un classeur ferme,
    Par apnw7931 dans le forum Excel
    Réponses: 6
    Dernier message: 17/02/2012, 22h22
  2. [XL-2007] rechercheV avec colonne variable
    Par lokura dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/01/2012, 17h58
  3. [XL-2003] RechercheV avec élément à moitié variable
    Par Djohn dans le forum Excel
    Réponses: 2
    Dernier message: 26/08/2011, 10h37
  4. [XL-2003] Fonction RECHERCHEV avec nom de variable en source
    Par brunop3165 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/06/2011, 00h19
  5. [XL-2003] RechercheV avec paramètre variable
    Par Gayzou dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 26/07/2010, 10h39

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