recherchev sur plusieurs onglets

saviola1981

XLDnaute Nouveau
Bonjour,

Je sollicite votre aide car j'ai un souci pour ramener une valeur avec un recherchev sur plusieurs onglets.

J'ai essayé le sierreur, cela fonctionne mais si on a trop d'onglets, excel me dit qu'il y a trop d'arguments.

Dans le fichier joint, dan l'onglet Global hors WE, je souhaite ramener les champs "nom" et "prénom" situés sur les autres onglets en fonction du code "CS" inscrit en colonne A.
Il me faudrait également une fonction "étirable" aussi bien verticalement qu'horizontalement.

J'ai simplifié le fichier et inscrit de faux noms juste pour l'exemple.

Je vous remercie pour votre aide, cela fait plusieurs heures que je me bats avec cette formule qui me semble introuvable!

Merci d'avance,
 

Pièces jointes

  • exemple.xlsx
    24.2 KB · Affichages: 54

CISCO

XLDnaute Barbatruc
Bonjour

Cf. en pièce jointe, une solution avec une formule matricielle (à valider donc avec Ctrl+maj+entrer) déduite d'une proposition faite par J. Boisgontier sur son site. Ne pas oublier de créer la liste des noms de feuilles, sur la dernière feuille ici, ou ailleurs dans le fichier.

@plus
 

Pièces jointes

  • exemple.xlsx
    28 KB · Affichages: 80
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Saviola, Cisco, bonjour le forum,

Une solution VBA si ça intéresse...

VB:
Sub Macro1()
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim I As Long 'déclare la variable I (Incrément)
Dim TR As Variant 'déclare la variable TR (Tableau de Recherche)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

Set OD = Worksheets("Global hors WE") 'définis l'onglet OD
TV = OD.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For I = 4 To UBound(TV, 1) 'boucle 1 : sur toute les lignes I du tableau des valeurs TV
    K = K + 1 'incrémente K
    ReDim Preserve TL(1 To 3, 1 To K) 'redimensionne le tableau des lignes TL (3 lignes, K colonnes)
    TL(1, K) = "'" & CStr(TV(I, 1)) 'récupère dans la ligne 1 de TL la valeur de la colonne 1 de TV (convertie en texte)
    For Each O In Sheets 'boucle 2 : sur tous les onglets O du classeur
        If Not O.Name = "Global hors WE" Then 'condition 1 : si le nom de l'onglet n'est pas "Global hors WE"
            TR = O.Range("A1").CurrentRegion 'définit le tableau de recherche TR
            For J = 3 To UBound(TR, 1) 'boucle 3 sur toutes les lignes J du tableau de recherche TR
                If TV(I, 1) = TR(J, 1) Then 'condition 2 : si la donnée en colonne 1 de TV est égale à la donnée en colonne 1 de TR
                    TL(2, K) = TR(J, 2) 'récupère dans la ligne 2 de TL la valeur de la colonne 2 de TR
                    TL(3, K) = TR(J, 3) 'récupère dans la ligne 3 de TL la valeur de la colonne 3 de TR
                    GoTo suite 'va à l'étiquette "suite"
                End If 'fin de la condition 2
            Next J 'prochaine ligne de la boucle 3
        End If 'fin de la condition 1
    Next O 'prochain onglet de la boucle 2
suite: 'étiquette
Next I 'prochaine ligne de la boucle 1
OD.Range("A4").Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL) 'renvoie dans A4 redimensionnée de l'onglet OD le tableau TL transposé
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 152
Messages
2 085 787
Membres
102 973
dernier inscrit
docpod