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 :

VBA - Faire matcher des cellules avec des colonnes d'un autre onglet [Toutes versions]


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
    Août 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Août 2015
    Messages : 12
    Par défaut VBA - Faire matcher des cellules avec des colonnes d'un autre onglet
    Bonjour à tous,

    Mon problème est assez compliqué à expliquer. Voir en pièce jointe le fichier Excel de départ.
    Le document que j'essai de mettre au point permet à l'utilisateur de créer son propre rapport au format de son client.

    J'ai deux onglet :
    - Le premier onglet est une liste déroulante de valeur qui permet à l'utilisateur du fichier de sélectionner les colonnes qu'il souhaite avoir dans son rapport.
    - dans le deuxième onglet il y a le rapport comprenant toutes les colonnes disponibles avec en en-tête le titre de la colonne.

    L'idée est que l'utilisateur sélectionne ses colonnes dans le premier onglet puis que la macro cherche dans le 2ème onglet les colonnes correspondantes, les copie et les colles dans le premier onglet.

    J'ai éssayé de faire une macro du type:
    Pour chaque cellule de la ligne 1 du premier onglet va chercher la colonne qui matche dans le 2ème onglet et copie colle cette colonne dans le premier onglet. Malheureusement je n'ai pas réussis.

    Si quelqu'un voit une solution à mon problème, c'est avec grand plaisir!!

    Merci beaucoup
    Fichiers attachés Fichiers attachés

  2. #2
    Membre actif Avatar de Pellouaille
    Homme Profil pro
    STF (Sans Travail Fixe)
    Inscrit en
    Novembre 2014
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Activité : STF (Sans Travail Fixe)
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2014
    Messages : 89
    Par défaut
    Bonjour romain31200,

    Citation Envoyé par romain31200 Voir le message
    Mon problème est assez compliqué à expliquer.
    Ou peut être peux tu m'expliquer pourquoi ton problème est aussi compliqué.

    Citation Envoyé par romain31200 Voir le message
    Voir en pièce jointe le fichier Excel de départ.
    Euh ... Une autre fois peut être...

    Bref, un petit récap' du besoin réel pour comprendre ce que je n'ai pas compris:

    Tu as une liste déroulante pour sélectionner des champs à exporter.
    Tu sélectionnes tes champs.
    Tu créés un report (un "état" en français) pour impression par exemple, de la fiche client.

    Citation Envoyé par romain31200 Voir le message
    Pour chaque cellule de la ligne 1 du premier onglet va chercher la colonne qui matche dans le 2ème onglet et copie colle cette colonne dans le premier onglet. Malheureusement je n'ai pas réussis.
    Là, je vois pas...

    Mon conseil est d'exrpimer clairement la finalité de ton projet (Plusieurs chemins mènent à Rome, quelqu'un connait surement un raccourci).

    Cordialement,

    Pellouaille

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Par défaut
    Bonjour,

    - Le premier onglet est une liste déroulante de valeur qui permet à l'utilisateur du fichier de sélectionner les colonnes qu'il souhaite avoir dans son rapport.
    - dans le deuxième onglet il y a le rapport comprenant toutes les colonnes disponibles avec en en-tête le titre de la colonne.
    => Sauf incompréhension de ma part, vous n'avez pas besoin du VBA pour faire celà, des fonctions (Excel Anglais) MATCH et H/VLOOKUP le font nativement. Suggestion, organisez votre feuille de data en transposant les lignes et les colonnes

    Voir http://fauconnier.developpez.com/tut...el/recherchev/

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Août 2015
    Messages : 12
    Par défaut Pb
    Hello Pellouaille,

    Merci pour ta réponse.
    Alors la finalité du projet: en gros j'exporte un rapport de Salesforce avec plusieurs champ (mes en-têtes de colonne) que je mets dans le deuxième onglet de mon fichier Excel.

    A partir de ce rapport les futurs utilisateurs de mon fichier devront sélectionnées seulement les champs qui les intéressent pour créer leur rapport sur mesure (en fonction des infos que souhaitent leur client).
    Pour leur simplifier la vie, je souhaiterai qu'il puisse se mettre dans le premier onglet, cliquer sur la cellule "A1": sélectionner dans la liste déroulante le champ qu'il souhaite avoir dans la première colonne, cliquer sur la cellule "B1": sélectionner dans la liste déroulante le champ qu'il souhaite avoir dans la deuxième colonne, etc... (les données de la liste déroulante étant les en-têtes des colonnes du rapport présent dans le 2ème onglet).

    Une fois que leur mapping est effectué, il faudrait qu'ils n'aient qu'à cliquer sur un bouton qui importe les données (du deuxième onglet) en fonction des champs qu'ils auront sélectionné dans le premier onglet (ex: si la cellule "A1" du premier onglet = "Hotel name", la macro va dans le deuxième onglet pour chercher la colonne qui a comme en-tête "Hotel name", copie la colonne et la colle dans la colonne A du premier onglet).

    J'espère que c'est un peu plus clair...

    Merci encore pour votre aide.

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

    Citation Envoyé par romain31200 Voir le message
    J'ai éssayé de faire une macro du type … Malheureusement je n'ai pas réussis.
    Conformément aux règles de ce forum, poster donc le code entrepris balisé via l'icône dédiée # !
    Problématique pourtant d'un niveau de débutant …

    _____________________________________________________________________________________________________
    If you can’t explain it simply, you don’t understand it well enough … (Albert Einstein)

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    excel permet de réaliser au moins 95% du boulot

    mais si tu veux vraiment une procédure, avec un filtre avancé c'est réglé en quelques lignes VBA (et une fonction existante sur ce forum, lien en bas de message) pour le noyau fonctionnel

    - écrire en ligne 1 tous les en-têtes de ta base de données
    - masquer les lignes 1 à 3
    - proposer des listes de validations basées sur ces en-têtes, en ligne 4
    - lancer le filtre avancé (via la fonction) avec pour paramètres : critères = ligne 1 et 2 || plage = ta base de données || Export vers ligne 4

    toutes les étapes décrites sont réalisables par Excel et interceptables par l'enregistreur de macro

    La fonction en question, tu la trouveras sur l'excellent tutoriel de Philippe Tulliez, au sujet des filtres avancés, que je t'invite à lire pour comprendre ce que je te propose : http://philippetulliez.developpez.co...dvancedfilter/

    entraine toi, et reviens avec le (ou les) codes que tu n'arrives pas à adapter

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Août 2015
    Messages : 12
    Par défaut Filtre avancé
    Bonjour Joe,

    Tout d'abord merci infiniment pour ton aide.
    Cela a fonctionné correctement.

    Il me manque juste un dernier point à résoudre.
    Ci-dessous le code de mon filtre avancé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=Data!$A$1:$CH$1"
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With
    Cela fonctionne mais ma zone de critère varie continuellement. C'est à dire que là j'ai "Formula1:="=Data!$A$1:$CH$1"" mais la fois d'après je peux avoir moins de critères et avoir "Formula1:="=Data!$A$1:$BB$1"".

    Comment faire pour que ma formule s'adapte automatiquement à la dernière cellule de la ligne non vide?

    Merci d'avance pour ton aide (encore une fois).

    Cordialement,

    Romain

  8. #8
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    en partant du principe que sur ta ligne 1, les données commencent en Colonne A et s'arrêtent à la Colonne "Lambda" sans cellule vide sur la plage

    la dernière cellule peut se definir par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("data").Range("A1").End(xlToRight)
    donc, dans ta formule de création de la liste de validation (et pas "filtre avancé" comme tu l'indiques dans ton message), il suffit de remplacer ta dernière cellule écrite en dure, par l'adresse de la dernière cellule qu'on calcule dynamiquement

    ce qui donne :

    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
    Sub toto()
        With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                       xlBetween, Formula1:="=Data!$A$1:" & Worksheets("Data").Range("A1").End(xlToRight).Address
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With
    End Sub

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Août 2015
    Messages : 12
    Par défaut Solution
    Merci encore Joe,

    Bonne journée.

    Romain

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

Discussions similaires

  1. [XL-2007] Copier/coller des lignes avec des cellules verrouillées
    Par Adri687 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 10/01/2013, 11h25
  2. Réponses: 1
    Dernier message: 24/03/2010, 11h49
  3. [XL-2003] calculer cumul puis fusionner des cellules avec des valeurs
    Par doudou8mc dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 06/11/2009, 16h51
  4. Réponses: 3
    Dernier message: 09/10/2009, 18h05
  5. mettre des n° dans des cellules avec VBA
    Par naitgo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/11/2007, 20h48

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