Recherche VBA entre plusieurs feuilles

Bonjour,

Je suis à la recherche d'un moyen pour centraliser dans une feuille toutes les références devant être commandé chez tel ou tel fournisseur se trouvant dans d'autre feuille du même fichier.

J'ai déjà essayé avec la fonction RECHERCHEV et INDEX mais je souhaite m'affranchir d'une colonne avec des Numéros.

En fouillant déjà sur ce forum j'ai trouvé une solution qui m'a l'air de bien fonctionner du moment que je ne sors pas de la feuille.

Sauriez vous, s'il vous plait, m'aider a comprendre comment je transposer cela a mon cas ?

Je vous remercie très sincèrement.

Cordialement,

Benoit

Bonjour Benoit & bienvenue,

peux-tu spécifier ta demande ?

ou est la référence à chercher (par exemple : Sheet1 A1) ?

dans quel feuille ou les feuilles doit-on rechercher cette référence ?

@+

Bonjour,

Isabelle

Voici ton classeur où j'ai modifié une feuille que j'ai nommé MATERIEL !

Clique sur le bouton situé sur la feuille TERRA pour voir le résultat :

Bonjour Benoit & bienvenue,

peux-tu spécifier ta demande ?

ou est la référence à chercher (par exemple : Sheet1 A1) ?

dans quel feuille ou les feuilles doit-on rechercher cette référence ?

@+

Merci beaucoup, c'est réellement un plaisir de trouver encore de vrai forum.

Je souhaites, si possible, pouvoir inscrire dans l'onglet "Samse" le nom d'un fournisseur en "D4"

et à partir de ce nom récupérer dans les onglets "TERRA" et "GROS OEUVRE" les informations tel que la référence du matériel, le nom et la quantité total.

Et de reporter ces informations sous forme de tableau dans mon onglet "Samse" (Je pense d'ailleurs que cet onglet devrait plutôt s'appeler "bon de commande"=BDC)

En espérant avoir pu être plus clair. C'est toujours clair dans ma tête, mais je n'arrive pas forcément à bien le transposer à l'écrit.

Encore merci pour l'acceuil.

Bonjour,

Isabelle

Voici ton classeur où j'ai modifié une feuille que j'ai nommé MATERIEL !

Clique sur le bouton situé sur la feuille TERRA pour voir le résultat :

Suivi de Projet test Version 2.xlsm

Bonjour Isabelle,

Merci beaucoup, pour ce beau travail.

M'en voudrez vous si je disais que je ne comprends pas tout dans le code ?

Je vais aller lire les sujets sur le fonctionnement des objets

En tout cas merci pour le temps que vous m'avez déjà consacré.

Voici le code adapté aux deux feuilles avec un peu plus d'explications. Il te faut renommer la feuille "MATERIEL" en "BDC" comme tu le demande puis faire le test. J'ai rajouté une méthode de tri sur les fournisseurs en fin de code. Le code ci-dessous remplace celui que je t'ai donné ce matin :

Sub Test()

    Dim Plage As Range
    Dim Cel As Range
    Dim Dico As Object
    Dim Cle As Variant
    Dim Lig As Long
    Dim Adr As String

    Set Dico = CreateObject("Scripting.Dictionary")

    'récupère les fournisseurs sur la feuille "TERRA"
    With Worksheets("TERRA"): Set Plage = .Range(.Cells(5, 5), .Cells(.Rows.Count, 5).End(xlUp)): End With

    'le dictionnaire sert à dédoublonner afin de n'avoir qu'une fois le nom du fournisseur
    For Each Cel In Plage

        If Cel.Value <> "" And Cel.Value <> "Fournisseur" And Cel.Value <> "N/A" Then Dico(Cel.Value) = ""

    Next Cel

    'récupère les fournisseurs sur la feuille "GROS OEUVRE"
    With Worksheets("GROS OEUVRE"): Set Plage = .Range(.Cells(5, 5), .Cells(.Rows.Count, 5).End(xlUp)): End With

    For Each Cel In Plage

        If Cel.Value <> "" And Cel.Value <> "Fournisseur" And Cel.Value <> "N/A" Then Dico(Cel.Value) = ""

    Next Cel

    With Worksheets("BDC")

        'vide la feuille...
        .Cells.ClearContents

        '...et inscrit les entêtes de colonnes puis mets les entêtes en gras afin de les distinguer des valeurs
        With .Range(.Cells(1, 1), .Cells(1, 5))

            .Value = Array("Fournisseur", "Produit", "Référence", "Quantité", "Ouvrage")
            .Font.Bold = True

        End With

        'effectue la recherche "TERRA" et inscrit le nom du fournisseur, le nom du produit, sa référence, la quantité et l'ouvrage...
        For Each Cle In Dico.Keys

            With Worksheets("TERRA"): Set Plage = .Range(.Cells(5, 5), .Cells(.Rows.Count, 5).End(xlUp)): End With

            Set Cel = Plage.Find(Cle, , xlValues, xlWhole)

            If Not Cel Is Nothing Then

                Adr = Cel.Address

                Do

                    Lig = .Cells(.Rows.Count, 1).End(xlUp).Row + 1

                    .Cells(Lig, 1).Value = Cel.Value
                    .Cells(Lig, 2).Value = Cel.Offset(, -3).Value
                    .Cells(Lig, 3).Value = Cel.Offset(, -1).Value
                    .Cells(Lig, 4).Value = Cel.Offset(, 2).Value
                    .Cells(Lig, 5).Value = "TERRA"

                    Set Cel = Plage.FindNext(Cel)

                Loop While Cel.Address <> Adr

            End If

        Next Cle

        '...puis passe à la feuille "GROS OEUVRE"
        For Each Cle In Dico.Keys

            With Worksheets("GROS OEUVRE"): Set Plage = .Range(.Cells(5, 5), .Cells(.Rows.Count, 5).End(xlUp)): End With

            Set Cel = Plage.Find(Cle, , xlValues, xlWhole)

            If Not Cel Is Nothing Then

                Adr = Cel.Address

                Do

                    Lig = .Cells(.Rows.Count, 1).End(xlUp).Row + 1

                    .Cells(Lig, 1).Value = Cel.Value
                    .Cells(Lig, 2).Value = Cel.Offset(, -3).Value
                    .Cells(Lig, 3).Value = Cel.Offset(, -1).Value
                    .Cells(Lig, 4).Value = Cel.Offset(, 2).Value
                    .Cells(Lig, 5).Value = "GROS OEUVRE"

                    Set Cel = Plage.FindNext(Cel)

                Loop While Cel.Address <> Adr

            End If

        Next Cle

        'Tri les données de la feuille "BDC" par fournisseur
        Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 5).End(xlUp))
        Plage.Sort Plage(1, 1), xlAscending

        .Select

    End With

End Sub

Voici le code adapté aux deux feuilles avec un peu plus d'explications. Il te faut renommer la feuille "MATERIEL" en "BDC" comme tu le demande puis faire le test. J'ai rajouté une méthode de tri sur les fournisseurs en fin de code. Le code ci-dessous remplace celui que je t'ai donné ce matin :

Merci beaucoup c'est plus que parfait.

Vraiment Merci Beaucoup !!!!!!!

Bonjour,

C'est avec grand plaisir

Rechercher des sujets similaires à "recherche vba entre feuilles"