• Initiateur de la discussion Initiateur de la discussion moutchec
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

moutchec

XLDnaute Occasionnel
bonjour,
je cherche une formule qui peut chercher dans plusieurs feuilles du même classeur des informations concernant une donnée.
dans l'exemple: j'entre le numéro de lot dans la feuille cherche et excel doit chercher dans les autres feuilles "le client" et "le pack"........si c'est possible.
j'ai essayé en vain avec la fonction recherchev; j'y arrive seulement quand je spécifie une feuille ou la recherche doit s'effectuer. que faire pour étendre directement la recherche à toutes les feuilles (S1 , S2 , S3.....)
d'avance, merci à tous.
 

Pièces jointes

Dernière édition:
Re : recherchev

bonjour et merci pour votre reponse.
c'est cela dans l'esprit: entrer le numero de lot dans une cellule de la feuille "cherche" pour qu'excel fasse une recherche dans 52 feuilles (52semaines) et affiche les informations correspondantes (dans l'exemple: "client", "nature" et "pack").
dans la pièce jointe Moutchec.xls, j'arrive pas à voir la formule; il y a juste "#VALEUR!" qui s'affiche. une idée?
encore merci.
 
Re : recherchev

Dans le fichier que j'ai envoyé et celui que j'ai sauvegardé toutes les formules où la valeur " VALEUR" apparaît, ont été détruites !

Qu'est-ce qui c'est passé, je n'en sait rien !

Toujours est-il que ces formules n'étaient pas adaptées pour 52 feuilles !

Reste la solution d'une macro qui lorsqu'on saisie le client puis le lot donne la solution désirée !

bonne journée
 
Re : recherchev

Bonjour à tous,

Une fonction personnalisée de recherche dans plusieurs feuille à été créée par un ami donne une solution à la question posée. Le code de cette fonction est :
Code:
Function VLOOKON(ParamArray My_Arg()) As Variant
Dim Max As Integer
Dim Index As Integer
Dim FindOK As Boolean
Dim MyFind As String
Dim CIndex As Integer
MyFind = My_Arg(0)
CIndex = My_Arg(1)
Max = UBound(My_Arg)
FindOK = False
For Index = 2 To Max
If FindOK Then Exit For
    VLOOKON = My_Arg(Index).Name
    R = Range(VLOOKON).Rows.Count
    C = Range(VLOOKON).Columns.Count
    If CIndex > C Then VLOOKON = "#REF!": Exit Function
        For MyR = 1 To R
        If LCase(Range(VLOOKON)(MyR, 1)) = LCase(MyFind) Then
            VLOOKON = Range(VLOOKON)(MyR, CIndex)
            Exit Function
        End If
        Next MyR
Next Index
VLOOKON = "#N/A"
End Function
La fonction est appliquée en pièce jointe avec explication d'utilisation...

Cordialement
 

Pièces jointes

Re : recherchev

Bonjour à tous,

En faisant des essais sur la fonction VLOOKON, et il parait que le nombre de plages nommées à utiliser est limité à 27 plages seulement, une idée m'est venu de concaténer deux parties de la fonction de 26 plages chacune (désormais une formule longue)... Un autre code a été créé pour nommer automatiquement la plage $A$3:$D$1000 de chaque feuille de semaine en un nom composé de la forme "Plage" concaténé au numéro de semaine (pour éviter de les nommer toutes manuellement) et ce code est :
Code:
Sub Nommer_Plages()
On Error Resume Next
Application.ScreenUpdating = False

' Vider la plage A21:A22
[A21:A22] = ""

' Partie pour supprimer tous les noms de plages commençant par Pl
    For Each Nom In ThisWorkbook.Names
        If Left(Nom.Name, 2) = "Pl" Then Nom.Delete
    Next Nom

' Partie pour la création des noms de plages de chaque feuille de semaine
For I = 1 To 52
    With Sheets("S" & I).Range("A3:D1000")
        .Name = "Plage" & Format(I, "00")
    End With
Next

'-----------------------------------------------------------------
' Partie pour créér les deux séquences de formule (désactivée pour le moment):
'        ;Plage01;Plage02; ... ; Plage26  ---------> en A21
'        ;Plage27;Plage28; ... ; Plage52  ---------> en A22
' pour les utiliser dans la formule par Copier/Coller

'For J = 1 To 26
'    [A21] = [A21] & ";" & "Plage" & Format(J, "00")
'    [A22] = [A22] & ";" & "Plage" & J + 26
'Next
'----------------------------------------------------------------

Application.ScreenUpdating = True
End Sub
(voir application en première pièce jointe)

* Une autre idée en évitant tout ça, un autre code plus simple a été créé qui donne les résultats recherchés dans les cellules concernées en valeurs (non en formules), le code est :
Code:
Sub RechercheG()
On Error Resume Next
Application.ScreenUpdating = False
For I = 1 To Worksheets.Count - 1
 Set Rng = Sheets("S" & I).Range("A3:D1000")
    If IsError(Application.VLookup([B24], Rng, 1)) = False Then
       [B25] = Application.VLookup([B24], Rng, 2)
       [B26] = Application.VLookup([B24], Rng, 4)
       [B27] = Application.VLookup([B24], Rng, 3)
       [B28] = "S" & I
    End If
Next
Application.ScreenUpdating = True
End Sub
Ce code est en application en deuxième pièce jointe...

Cordialement
 

Pièces jointes

Re : recherchev

Bonjour moutchec

Un petit problème, comment intégrer la fonction VLOOKON à mon classeur? puisqu'elle n'y est pas par défaut?

Pour l'intégrer à ton classeur il faut juste copier le code de la fonction dans un module et elle sera automatiquement inscrite dans la liste des fonctions...

NB : Choisir la deuxième solution (facile) présentée dans mon précédent message...

Cordialement
 
Dernière édition:
Re : recherchev

Bonsoir,

Une proposition.
J'ai supposé, comme dans l'exemple, qu'un lot n'était présent qu'une fois et n'avait qu'une ligne de Nature.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim sh As Worksheet, c As Range
    If Intersect(Target, Range("B24")) Is Nothing Then Exit Sub
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    [B24:B28].ClearContents
    For Each sh In Worksheets
        If Left(sh.Name, 1) = "S" And IsNumeric(Mid(sh.Name, 2, 10)) Then
            Set c = sh.[A:A].Find([B24].Value, LookIn:=xlValues, Lookat:=xlWhole)
            If Not c Is Nothing Then
                [B25:B27] = Application.Transpose(c.Offset(, 1).Resize(, 3).Value)
                [B28] = sh.[A1]
            End If
        End If
    Next sh
    Application.ScreenUpdating = True
    Application.EnableEvents = True
End Sub
eric

Edit: phlaurent et pierrot vous avez raison. J'ai ajouté le clearcontents en dernière minute sans tenir compte du reste.
Code et fichier modifié en conséquence.
 

Pièces jointes

Dernière édition:
Re : recherchev

Bonjour à tous
Bonsoir,

Une proposition.
J'ai supposé, comme dans l'exemple, qu'un lot n'était présent qu'une fois et n'avait qu'une ligne de Nature.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim sh As Worksheet, c As Range
    If Intersect(Target, Range("B24")) Is Nothing Then Exit Sub
    Application.ScreenUpdating = False
    [B24:B28].ClearContents
    For Each sh In Worksheets
        If Left(sh.Name, 1) = "S" And IsNumeric(Mid(sh.Name, 2, 10)) Then
            Set c = sh.[A:A].Find([B24].Value, LookIn:=xlValues, Lookat:=xlWhole)
            If Not c Is Nothing Then
                [B25:B27] = Application.Transpose(c.Offset(, 1).Resize(, 3).Value)
                [B28] = sh.[A1]
            End If
        End If
    Next sh
    Application.ScreenUpdating = True
End Sub
eric


Attention, erreur dans ce bout de procédure, c'est le chien qui tourne en rond en se mordant la queue
If Intersect(Target, Range("B24")) Is Nothing Then Exit Sub
Application.ScreenUpdating = False
[B24:B28].ClearContents

à remplacer par:
[B25:B28].ClearContents

à+
Philippe
 
Dernière édition:
Re : recherchev

Bonjour à tous,

Si je peux me permettre, comme la macro modifie des cellules, perso je stopperais temporairement les événementielles pour éviter de boucler :
Code:
Application.EnableEvents = False
'le code
Application.EnableEvents = True

bonne journée
@+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
10
Affichages
1 K
Réponses
5
Affichages
632
Réponses
3
Affichages
562
J
  • Question Question
Réponses
9
Affichages
557
J
Retour