Rechercher une donnée précise, mais dans plusieurs feuilles
Bonjour!
Je suis débutante avec les formules Excel, c'est peut être pour cette raison que je n'arrive pas a faire exactement ce que je veux.
Je veux rechercher une donnée précise, unique, mais qui pourrait se retrouver dans plusieurs feuilles différentes, et si la donnée est trouvée, que ça génère le nom de la feuille/tableau dans laquelle la donnée est trouvée.
Chaque tableau est composé du même genre de donnés dans chaque colonne. ( colonne A = Numéro de poste, colonne B = Nom, ... )
Chaque feuille est un département ( Médecine, Chirurgie, Urgences, ... )
Si je tape un numéro de poste ( 1234 ), je veux que la recherche soit faite dans toutes les colonnes A de chaque feuille, et si la donnée est trouvée dans la feuille Chirurgie, que ce soit ce terme qui soit générée.
Il m'est aussi possible d'ajouter une colonne à chaque tableau de chaque feuille pour renvoyer à une colonne si vous croyez que la recherchev serait plus simple.
Je me doute très bien que la formule risque d'être plutôt longue...
Merci d'avance de votre aide
Bonjour,
Ici, avec une fonction perso qui retourne un tableau de 3 valeurs. Tu colles ce code dans un module standard puis tu sélectionnes trois cellules verticales dans la feuille que tu veux et ensuite, dans la barre de formule tu entres la formule =ChercheValeur("Valeur cherchée") en adaptant "Valeur cherchée" et tu valides en matricielle (Ctrl+Maj+Entrée) :
Function ChercheValeur(Valeur) As String()
Dim Tbl(1 To 3, 1 To 1) As String
Dim Fe As Worksheet
Dim Plage As Range
Dim Cel As Range
Dim Zone As String
'parcours les feuilles
For Each Fe In Worksheets
'défini la plage sur toute la feuille en cours
Set Plage = DefPlage(Fe)
'si la feuille contient au moins une valeur...
If Not Plage Is Nothing Then
'...lance la recherche
Set Cel = Plage.Find(Valeur, , xlValues, xlWhole)
'si trouvé, affiche un message indiquant les valeurs voulues
If Not Cel Is Nothing Then
'si la cellule n'est pas à l'intérieur d'un tableau structuré, erreur !
On Error Resume Next
Zone = Cel.ListObject.Name
If Err.Number <> 0 Then Zone = Cel.Parent.Name
On Error GoTo 0
'retourne les valeurs dans un tableau
Tbl(1, 1) = Fe.Name
Tbl(2, 1) = Zone
Tbl(3, 1) = Cel.Address(0, 0)
ChercheValeur = Tbl
Exit Function
End If
End If
Next Fe
End Function
Private Function DefPlage(Fe As Worksheet, Optional L As Long = 1, Optional C As Long = 1) As Range
On Error GoTo Fin
With Fe
Set DefPlage = .Range(.Cells(L, C), _
.Cells(.Cells.Find("*", .[A1], -4123, , _
1, 2).Row, .Cells.Find("*", .[A1], -4123, , _
2, 2).Column))
End With
Exit Function
Fin:
Set DefPlage = Nothing
End FunctionBonjour,
Pour une toute première demande ... tu tapes fort
Ci-joint ton fichier test avec une ' formule ' ... qui je l'espère ...
sera, à tes yeux, ... ' hospitalière ' ...
Bonjour à tous,
Abandon en rase campagne ... !!!
Je devrais dire ... brousse ...