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 :

Macro qui recherche les données de 3 feuilles dans une feuille source et affiche le résultat dans une feuille


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 7
    Par défaut Macro qui recherche les données de 3 feuilles dans une feuille source et affiche le résultat dans une feuille
    Bonjour,

    J'ai un souci assez urgent à traitet j'aimerais votre aide.

    Je l'explique:



    Les feuilles contenant les données à rechercher sont "Feuil1", "Feuil2" et "Feuil3".

    La feuille "Source" est celle contenant les resultats cherchés dans la colonne H

    Dans les 3 premières feuilles il y a des colonnes différentes mais une seule d'entre elles contient les données à rechercher (ce sont à chaque fois des adresses mail):

    Dans la feuille "Feuil1", c'est la colonne D qui contient les adresses mail

    Dans la feuille "Feuil2" c'est la colonne U qui contient les adresses mail

    Dans "Feuil3" c'est la colonne K qui contient les adresses mail

    Le but est donc de comparer ces adresses mails à celles de la feuille "Source" en colonne H. Si une adresse de meme valeur est retrouvée alors recopier les valeurs des colonnes A, B et D de la même feuille "Source" dans la feuille "Récap"

    je voudrais que la zone de collage de la feuille "Récap" soit vidée (si elle contient les données) avant de lancer la macro et faire un collage par ordre alphabetique de tous les résultats provenant de la feuille "Source"

    Je ne sais pas si c'est assez clair. Ci-joint un fichier exemple.

    Merci d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Ceci
    Pièce jointe 582938

    le code
    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
    Sub Recup_Donnees()
        Dim f1 As Worksheet, f4 As Worksheet, f5 As Worksheet
        Dim DerLig_f1 As Long, DerLig_f4 As Long, Col As Long, i As Long, f As Long, Lig As Long
        Dim Mail As String
     
        Application.ScreenUpdating = False
        Set f4 = Sheets("Source")
        Set f5 = Sheets("Récap")
        f5.Cells.ClearContents
        DerLig_f4 = f4.Range("A" & Rows.Count).End(xlUp).Row
        Lig = 2
        For i = 2 To DerLig_f4
            If f4.Cells(i, "F") <> "" And f4.Cells(i, "F") <> "@" Then
                Mail = f4.Cells(i, "F")
                For f = 1 To 3
                    Select Case f
                        Case 1
                            Col = 4
                        Case 2
                            Col = 21
                        Case 3
                            Col = 11
                    End Select
                    Set f1 = Sheets(f)
                    DerLig_f1 = f1.Cells(Rows.Count, Col).End(xlUp).Row
                    If Application.WorksheetFunction.CountIf(f1.Range(f1.Cells(1, Col), f1.Cells(DerLig_f1, Col)), Mail) <> 0 Then
                        f5.Range(f5.Cells(Lig, "A"), f5.Cells(Lig, "B")).Value = f4.Range(f4.Cells(i, "A"), f4.Cells(i, "B")).Value
                        f5.Cells(Lig, "C").Value = f4.Cells(i, "D").Value
                        Lig = Lig + 1
                        Exit For
                    End If
                Next f
            End If
        Next i
        f5.Range("A1:C1").Value = Array("Poste", "Résidence", "Matricule")
        Set f1 = Nothing
        Set f4 = Nothing
        Set f5 = Nothing
    End Sub
    Cdlt

  3. #3
    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.

    Si j'ai bien compris ta demande, ça prend 3 minutes avec Power Query:
    • Ajout des 4 tableaux à la solution Power query
    • Fusion de Source et Feuil1 dans une nouvelle requête;
    • Dans cette nouvelle requête, fusion avec Feuil2 puis avec Feuil3;
    • Récup des colonnes de mail;
    • Ajout d'une colonne formulée pour tester que l'on a une adresse mail;
    • Suppression des colonnes superflues;
    • Renvoi dans excel.


    Cela dit, je ne comprends pas ton histoire de colonne H qui contiendrait le résultat (quel résultat?) puisque tu demandes de récupérer les données dans une feuille Recap et que, perso, je ne vois pas bien le lien entre la colonne H de la source et les colonnes des autres feuilles... Pourrais-tu montrer à quoi doit ressembler ton récap avec les données présentes dans les autres feuilles?
    Fichiers attachés Fichiers attachés
    "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...
    ---------------

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 7
    Par défaut
    Merci ARTURO8

    La macro fonction bien mais seulement lorsque je nomme mes 3 premieres feuilles Feuil1, Feuil2 et Feuil 3

    Qu'est-ce qui changerait si les feuilles portent par exemple respecticement les noms "Département", Région", "Commune"?

    Merci

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 7
    Par défaut
    Pierre Fauconnier,

    Je me suis trompé mais les adresses sont plutot rangées dans la colonne F. J'ai dû légèrement modifié le code de ARTURO8 en rentrant le bon nom de colonne dans mon fichier

  6. #6
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    La macro fonction bien mais seulement lorsque je nomme mes 3 premieres feuilles Feuil1, Feuil2 et Feuil 3

    Qu'est-ce qui changerait si les feuilles portent par exemple respecticement les noms "Département", Région", "Commune"?
    Il ne se passerait rien, vu que l'on prend le N° de la feuille et pas son nom

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 7
    Par défaut
    Ah oui je me suis planté. En effet elle me donne le résultat voulu mais j'ai un message Erreur d'exécution 13: Incompatibilité type à la fin

  8. #8
    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
    Ok.

    tu devrais travailler avec des tableaux structurés (voir mon tuto à ce sujet). c'est à mon sens incontournable en XL365. Ca simplifierait ton approche et ton code, pour autant que tu veuilles vraiment utiliser le VBA pour ce genre de traitement, ce qui serait dommage car Power Query a justement été créé pour se dispenser de VBA.

    Est-ce que le tableau récap suivant est bien ce que tu souhaites par rapport aux données que tu as fournies dans ton classeur initial?

    Nom : 2020-11-04_112943.png
Affichages : 75
Taille : 3,6 Ko
    "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...
    ---------------

  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
    Si vraiment tu veux du VBA, voici ce que je te propose (voir ma signature: Quand on programme en VBA pour Excel, on pense d'abord Excel avant de penser VBA):


    Le code que je te donne ici ne s'appuie pas sur les tableaux structurés, mais ce serait mieux si tes données étaient organisées en tableaux structurés, pour dépouiller le code des emplacements "en dur" exprimés ici.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Test()
      Dim CountOf As Long
     
      Application.ScreenUpdating = False
      Feuil5.Cells.ClearContents
      Feuil1.Range("a1").CurrentRegion.Copy Destination:=Feuil5.Range("a1")
      Feuil5.Range("i2:i" & Feuil5.Range("a1").CurrentRegion.Rows.Count).Formula = _
        "=(COUNTIFS(Feuil1!D:D,Source!F2)+COUNTIFS(Feuil2!U:U,F2)+COUNTIFS(Feuil3!K:K,F2))>0"
      Feuil5.Range("a1").CurrentRegion.Sort key1:=Feuil5.Range("i1"), order1:=xlDescending, Header:=xlYes
      CountOf = Application.CountIfs(Feuil5.Range("i:i"), True) + 1
      Feuil5.Range("a2")(CountOf).Resize(1048576 - CountOf).EntireRow.Delete
      Feuil5.Range("c:c,e:i").EntireColumn.Delete
      Application.ScreenUpdating = True
    End Sub

    Mais je pense vraiment que cela vaut la peine d'investir un peu de temps à apprendre Power Query. Ca permet de rester en XLSX si tu n'as pas besoin de VBA pour autre chose dans ton classeur.
    "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...
    ---------------

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 7
    Par défaut
    Merci à vous pour votre réactivité. Je teste les différents codes et je reviens vers vous dasn la soirée

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/08/2016, 12h14
  2. [XL-2013] Macro pour rechercher la donnée la plus récente dans un tableau
    Par Julie.lemoine dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/07/2016, 15h43
  3. Pb de macro pour comparer les données de deux feuilles
    Par loenia dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 22/06/2015, 15h32
  4. [AC-2000] Automation avec Excel : lancer une macro qui trie les données
    Par fredschmidt dans le forum VBA Access
    Réponses: 3
    Dernier message: 02/09/2009, 14h47
  5. [XL-2003] rechercher les données d'une feuille excel via une useform
    Par t'chi ben dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/04/2009, 11h12

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