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 entre 2 fichiers Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mars 2012
    Messages : 30
    Par défaut RechercheV entre 2 fichiers Excel
    Bonjour,
    Je tente de réaliser une RechercheV entre 2 fichiers Excel ouverts, et je bloque sur le nom de la table matrice. Je ne parviens pas à nommer correctement le nom de la table (Plage_CI_G).


    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
     
    Sub RechercheV_2Fichiers()
     
    Dim ws, wr As Workbook
    Dim Dlign1 As Integer
    Set ws = ThisWorkbook
    Set wr = Workbooks("Indicateurs_redressement_national")
    Dim Plage_CI_G As Range
     
    'Déterminer la plage de la feuille CI G
    With wr.Sheets("Taux de redres CI G S3C")
        Dlign1 = .Cells(.Rows.Count, 1).End(xlUp).Row
     
        Set Plage_CI_G = .Range("B6", .Range("O" & Dlign1)) 'ca ne met pas de nom à la zone sélectionnée
    'ca affecte juste la zone sélectionnée à une variable nommée Plage_CI_G
    End With
    With Plage_CI_G
     
       .Name.Add Name:="Plage_CI_G", RefersToR1C1:=Plage_CI_G.Address 'Le code bloque à cet endroit
    End With
     
    'Et pour la RECHERCHEV :
     
        Sheets("Analyse S3C contrôle").Select 'feuille se trouvant sur le classeur ws
        Range("F18").Select
        ActiveCell.FormulaR1C1 = "=VLOOKUP(R[-13]C[-2],Plage_CI_G,5,FALSE)"
     
     
    End Sub

    Merci par avance pour votre aide.

    Eric

  2. #2
    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,
    Effectuer des calculs par liaison avec un ou plusieurs classeurs ouverts, n'est pas une très bonne idée.
    Il est préférable de copier les tableaux qui servent aux calculs dans un seul classeur soit par VBA soit en utilisant PowerQuery

    [EDIT]
    Je ne parviens pas à nommer correctement le nom de la table (Plage_CI_G).
    L'origine de votre erreur vient du fait que vous utilisez la méthode Add sur un objet alors que ce devrait être la collection Names

    Le code ci-dessous, non testé, irait mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Plage_CI_G
    .Names.Add Name:="Plage_CI_G", RefersToR1C1:=Plage_CI_G.Address 'Le code bloque à cet endroit
    End With
    [EDIT2]
    Code testé
    Ajout d'une plage nommée maPlage qui fait référence à la colonne nommée Ref d'un tableau structuré nommé t_maTable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      With ThisWorkbook
      .Names.Add Name:="maPlage", RefersTo:=Range("t_maTable[Ref]")
      End With
    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

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mars 2012
    Messages : 30
    Par défaut
    Merci pour cette réponse. Mais j'ai toujours le même message d'erreur.

    Évidemment, je pourrais rapatrier la feuille dans mon fichier. Mais j'ai cinq feuilles sources volumineuses dans lesquelles je dois puiser mes données. Et si je le fais, je vais obtenir un fichier trop lourd. De plus, je ne peux pas supprimer ces feuilles à l'issue de la RechercheV avec des copies valeur au préalable, car je dois pourvoir faire des recherches dynamiques par formulaires. La source ne peut donc être supprimée.

    Cordialement,
    Eric

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mars 2012
    Messages : 30
    Par défaut
    Désolé, vous m'avez devancé : je n'avais pas vu votre Edit2 avec le code testé.
    Je vais essayer et je vous tiens informé.

    Eric

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mars 2012
    Messages : 30
    Par défaut
    Et bien je ne parviens toujours pas à indique le fichier source :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With ThisWorkbook
     
       .Names.Add Name:="Plage_CI_G", RefersTo:=wr.Sheets("Taux de redres CI G S3C").Range("B6", Range("O" & Dlign1))
    End With
    Si je n'écris que le Range, j'obtiens bien le nom de ma plage, mais sur la plage de destination et non la source.

    Eric

  6. #6
    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,
    De plus, je ne peux pas supprimer ces feuilles à l'issue de la RechercheV avec des copies valeur au préalable, car je dois pourvoir faire des recherches dynamiques par formulaires. La source ne peut donc être supprimée.
    Je n'ai jamais écrit qu'il fallait supprimer les feuilles sources.
    Personnellement, je copie les plages (toujours des tableaux structurés) et ensuite je ferme le classeur source.

    Si je n'écris que le Range, j'obtiens bien le nom de ma plage, mais sur la plage de destination et non la source.
    C'est logique, dans mon code, je fais référence au classeur où se trouve le code VBA.

    Vous auriez intérêt à utiliser des tableaux structurés, bien plus simple à manipuler

    Voici une formule placée dans un classeur A, utilisant la fonction RECHERCHEV qui fait référence à un tableau structuré nommé t_Personnel présent dans un classeur B nommé TimeSheet.xlsx
    Code formule : Sélectionner tout - Visualiser dans une fenêtre à part
    =RECHERCHEV([@Ref];'TimeSheet.xlsx'!t_Personnel[#Données];2;FAUX)

    Ainsi, il n'y a aucune raison de créer une plage nommée. Il suffit simplement de copier la formule ci-dessus dans une cellule de la colonne d'un tableau structuré pour obtenir le résultat escompté

    Je vous conseille vivement de vous intéresser à PowerQuery
    Voir cette contribution de Pierre Fauconnier sur ce sujet [Power Query] Plage nommée Excel, fonctions personnalisées
    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

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mars 2012
    Messages : 30
    Par défaut
    Je me suis mal exprimé. Quand je parlais de suppression de la source, je ne désignais pas le fichier source, mais de la copie du tableau structuré, à la fin de la macro, pour ne pas alourdir mon fichier. Ce que je ne peux faire, car j'ai besoin de faire appel à des index, par listes déroulantes, afin de mettre à jour les champs qui s'y rapportent.

    J'ai déjà essayé la RECHERCHEV directe, mais comme ma source évolue au fil du temps, le code doit donc être dynamique, d'où la désignation d'un champs "nom" évolutif dans le code.

    J'ai regardé le lien que vous m'avez joint sur PowerQuery, mais je ne suis pas sûr d'y avoir accès avec ma version d'Excel (2013). Je ne peux la faire évoluer, car c'est celle de mon employeur.

    Je vais donc revenir à votre premier conseil, qui est de copier par macro les tableaux sources dans mon fichier de destination en les structurant au maximum afin de ne pas trop alourdir l'ensemble. Et là je pourrai plus facilement créer mes liens.

    Un grand merci pour vos conseils.

  8. #8
    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,
    Je vais donc revenir à votre premier conseil, qui est de copier par macro les tableaux sources dans mon fichier de destination en les structurant au maximum afin de ne pas trop alourdir l'ensemble. Et là je pourrai plus facilement créer mes liens
    Le faire avec des tableaux structurés est très simple.
    Voir mon billet titré VBA pour Excel - Copier une table structurée sur une autre à l’aide de la méthode Copy

    Pour rappel à lire éventuellement
    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

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Merci Philippe pour les liens



    @Eric

    Avec XL2013, tu pourrais aussi importer les tableaux par Power Query
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. Faire le lien entre un fichier excel et BO
    Par PlisNuX dans le forum Deski
    Réponses: 1
    Dernier message: 29/05/2007, 13h33
  2. [VBA-E] Transfert D'images Entre Deux Fichiers Excel
    Par Kevin_18 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/04/2007, 14h43
  3. Macro RECHERCHEV entre 2 fichiers excel distincts
    Par paflolo dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 15/11/2006, 03h46
  4. copie de données entre 2 fichiers excel
    Par kalu dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/10/2006, 17h31
  5. Copie entre 2 fichiers excel
    Par Freerideuse dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 29/06/2006, 16h12

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