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 :

Syntaxe VLOOKUP en VBA - ouverture de Workbook dynamique


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
    Étudiant
    Inscrit en
    Février 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 14
    Par défaut Syntaxe VLOOKUP en VBA - ouverture de Workbook dynamique
    Bonjour à tous,

    Je souhaite faire un comparatif entre deux fichiers de versions différentes où figurent des lignes de commandes (le fichier ouvert V1.2, sur lequel est présent le bout de macro ci-dessous, et l'autre à aller chercher, V1.1 dans mon exemple) .
    Grâce à l'enregistreur de macro, j'ai pu trouver la "traduction" VBA de la fonction RECHERCHEV, en mode "R1C1" mais j'aimerais la rendre un peu plus dynamique, et donner le choix à l'utilisateur d'aller chercher lui-même le fichier qu'il veut comparer (qui contient par défaut la feuille k€, cela peut rester fixe).

    Pour cela je compte calculer la première valeur puis utiliser la méthode Autofill afin de remplir les n lignes de commandes non vides.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    'RECHERCHEV des commandes présentes dans la version précédente
    Range("A9").Select
    ActiveCell.FormulaR1C1 = _
            "=VLOOKUP(k€!R[-5]C[4],'Chemin\...\[Fichier_V1.1]k€'!C5,1,FALSE)"
        Selection.AutoFill Destination:=Range(Cells(9, 1), Cells(der_lig, 1))



    Cette méthode marche parfaitement quand le chemin et donc le nom du classeur (Fichier_V1.1) est fixe, mais ce que je souhaiterais c'est rendre dynamique le chemin d'accès et la prise en compte dans VLOOKUP.

    J'avais pensé à dimensionner un fichier "previous", que l'utilisateur sélectionnerait, puis intégrer le nouvel objet "previous" dans la VLOOKUP (l'onglet k€ ne bouge pas, k€ existe dans toutes les versions du fichier)

    Mais c'est là que le bât blesse, j'ai essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim previous
      previous = Application.GetOpenFilename(, , "Sélectionnez votre source de données")
     
    'RECHERCHEV des commandes présentes dans la version précédente
       Range("A9").Select
        ActiveCell.FormulaR1C1 = _
            "=VLOOKUP(k€!R[-5]C[4],'Chemin\...\[previous]k€'!C5,1,FALSE)"
        Selection.AutoFill Destination:=Range(Cells(9, 1), Cells(der_lig, 1))

    Cela ne marche pas ...

    Alors ma question est assez simple : comment faire prendre en compte à VLOOKUP le fichier générique "previous" ?

    D'avance, merci !

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour, bonjour !

    Ne pas confondre du texte (encadré par des guillemets) et une variable ! …

    P'tite démonstration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Demo()
        FICHIER$ = "Source .xlsx"
        MsgBox "C:\Documents\" & FICHIER
    End Sub
    __________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    __________________________________________________________________________________________________
    Tous unis, tous Charlie

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 14
    Par défaut
    Hello et merci tout d'abord de ton intérêt...

    Okay, je me doutais déjà que cela n'allait pas de noter mon fichier variable previous entre guillemets...

    Ce avec quoi j'ai un peu plus de mal c'est pour la suite.. Mon bout de code resemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    Dim previous
      previous = Application.GetOpenFilename(, , "Sélectionnez votre source de données")
    '
        Range("A9").Select
        ActiveCell.FormulaR1C1 = _
            "=VLOOKUP(k€!R[-5]C[4],previous & k€!C5,1,FALSE)"
        Selection.AutoFill Destination:=Range(Cells(9, 1), Cells(der_lig, 1))

    Mais après application, la formule dans les cellules cibles est celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =RECHERCHEV(k€!E4;previous & k€!$E:$E;1;FAUX)

    Ce qui retourne donc forcément une erreur #NOM?
    Comment notifier à la fonction d'aller bien chercher dans l'onglet k€ du fichier previous ?

    Merci

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Nouvelle p'tite démonstration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Demo()
        Const LF = vbLf & vbLf
        FICHIER$ = "Source"
        MsgBox "Faux :" & LF & "C:\Documents\ & FICHIER & .xlsx"
        MsgBox "Correct :" & LF & "C:\Documents\" & FICHIER & " .xlsx"
    End Sub
    Donc tout ce qui est entre guillemets (ici en rouge) est du texte et pas une variable !
    Et ici c'est bien visible : vérifier la couleur de FICHIER dans chaque ligne ci-dessus …

    __________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 14
    Par défaut
    Ok merci pour la démo, ça m'éclaire sur certains points !

    Mais ce que je ne comprends dans mon code précisemment (obtenu en utilisant l'enregistreur de macro), c'est comment faire comprendre à VBA que k€ est une worksheet générique qu'il trouvera dans tous les fichiers sélectionnés, une constante ?

    Est-ce qu'il est nécessaire de dimensionner k€ en tant que worksheet de previous ?...

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut





    Dimensionner non mais c'est juste une constante de la formule sous forme de texte …



Discussions similaires

  1. [VBA-W]document word dynamique
    Par tinous dans le forum VBA Word
    Réponses: 12
    Dernier message: 25/04/2006, 15h17
  2. [VBA-E] Lancer workbook open
    Par ptitsoleil87 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 31/12/2005, 12h40
  3. syntaxe format cond vba
    Par sorinexp dans le forum Access
    Réponses: 2
    Dernier message: 28/11/2005, 15h02
  4. VBA : ouverture d'un Userform sans passer par excel
    Par jemigo dans le forum Macros et VBA Excel
    Réponses: 28
    Dernier message: 23/11/2005, 16h28
  5. [VBA] ouverture de formulaire
    Par tiptop dans le forum Access
    Réponses: 9
    Dernier message: 27/10/2005, 22h19

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