Recherche dans plusieurs onglet

Bonjour,

Je suis à la recherche d'une formule ou méthode pour rechercher une info dans plusieurs onglets.

Cette info se trouve toujours dans la même colonne "G" de chaque onglets.

Si dans la cellule il y a un "FAUX" alors il faudrait que la référence en cellule I soit reporter dans l'onglet "SYNTHESE".

Si possible avoir aussi le nom de l'onglet dans la synthèse.

20recherche.xlsx (21.99 Ko)

Merci d'avance.

Bonjour,

Voici un début de réponse
Ma proposition concerne la feuille 1 uniquement

Private Sub CommandButton1_Click()

onglet = Sheets("Feuil1").Name
With Sheets(onglet)
rg = 3
    For I = 2 To .Cells(Rows.Count, 7).End(xlUp).Row
    'MsgBox .Cells(I, 7)
        If .Cells(I, 7) = "Faux" Then Sheets("Synthèse").Cells(rg, 3) = onglet: Sheets("Synthèse").Cells(rg, 4) = .Cells(I, 11): Sheets("Synthèse").Cells(rg, 5) = .Cells(I, 10): rg = rg + 1
     Next I
End With

End Sub

Merci Jacky, mais je ne sais pas ou placé la macro.

Bonjour,

Ci-joint une proposition VBA, avec le code associé ci-après.

Option Explicit

Public Sub RechercheFeuilles()
  Dim wsht As Worksheet, c As Range
  Dim resRefs As Object: Set resRefs = CreateObject("System.Collections.Arraylist")
  Dim resShts As Object: Set resShts = CreateObject("System.Collections.Arraylist")

  For Each wsht In ThisWorkbook.Worksheets
    If Not (wsht.Name Like "Synth?se") Then
      With wsht.Range("G1")
        .Resize(1, 2).Value2 = Array("V/F", "F")
        .AutoFilter 1, False
        If .Offset(1, 0).End(xlDown).Row <> .Worksheet.Rows.Count Then
          For Each c In Range(.Offset(1, 2), .Offset(1, 2).End(xlDown)).SpecialCells(xlCellTypeVisible)
            resRefs.Add c.Value2
            resShts.Add wsht.Name
          Next c
        End If
        .AutoFilter
      End With

    End If
  Next wsht

  With ThisWorkbook.Worksheets("Synthèse").Range("D3")
    Range(.Cells, .Offset(0, -1).End(xlDown)).ClearContents
    .Resize(resRefs.Count).Value2 = WorksheetFunction.Transpose(resRefs.ToArray)
    .Offset(0, -1).Resize(resShts.Count).Value2 = WorksheetFunction.Transpose(resShts.ToArray)
  End With
End Sub

EDIT : Salut @Jacky, je viens de voir que tu t'y étais mis aussi

10recherche.xlsm (34.76 Ko)

EDIT 2 : @Jacky très bonne solution itérative que tu proposes, il suffit ensuite de boucler sur les feuilles et tu avais tout. Juste un conseil dans ton If :

Tu vérifies .Cells(I, 7) = "Faux". C'est une source d'erreur : comme les cellules contient véritablement les booléens VRAI/FAUX, il vaut mieux écrire .Cells(I, 7) = False

Car il suffit que les options changent un peu (si on met en début de module Option Compare Binary, ou que le PC n'est pas en français) alors ton code ne marche plus. En mettant False, il fonctionne partout. (et pour les chasseurs de millisecondes comme @curulis et moi, c'est plus optimisé).

Merci Saboh, mais j'ai un message d'erreur 'incompatibilité 13".

debogage: .Resize(resRefs.Count).Value2 = WorksheetFunction.Transpose(resRefs.ToArray)

Étrange... Qu'as-tu modifié ?

Car à part le cas très particulier où il n'y a aucune valeur trouvée, il ne devrait pas y avoir d'erreur. Si tu veux gérer ce cas, ajoute simplement On Error Resume Next avant ce dernier "bloc With".

Ou... es-tu sur MacOS ?

Je n'ai rien changé, j'ai juste ouvert le fichier que tu as mis et cliqué sur le bouton.

Et je ne suis pas sous MacOS.

Ahhhhhh...

La fonction Transpose n'existe pas sur Excel 2010 ! Voilà pourquoi. J'ai corrigé avec une petite fonction ci-dessous.

Private Function VBAVertical(arrH As Variant) As Variant
  Dim arrV As Variant
  ReDim arrV(LBound(arrH) To UBound(arrH), 1 To 1)
  Dim i As Long
  For i = LBound(arrH) To UBound(arrH)
    arrV(i, 1) = arrH(i)
  Next i
  VBAVertical = arrV
End Function
10recherche.xlsm (35.72 Ko)

Décidément

11test-pta.xlsm (166.42 Ko)

cela ne veut toujours pas, si joint mon fichier dans lequel je travail.

bonjour

une contribution de "faisabilité" sans VB ni PQ

cordialement

16benetop.xlsx (24.58 Ko)

Merci Tulipe, j'essai de comprendre les formules mais honnêtement j'y arrive pas lol, et quand j'essai de mettre tes formules dans mon fichier test PTA cela ne fonctionne pas.

Bonjour Saboh,

Content de te retrouver sur le Forum
Tu viens de m'apprendre encore une chose de plus (false et non "FAUX"), j'essaierai de ne pas oublier
Bonne journée à toi
Je te laisse poursuivre avec Benetop
Au plaisir

cela ne veut toujours pas, si joint mon fichier dans lequel je travail.

Désolé… Je viens de lancer la macro sur ton fichier et je n'ai aucune erreur. J'ai aucune idée d'où cela peut venir malheureusement. Ca m'étonnerait que les Collections ArrayLists ne soient pas disponibles sur ton PC : auquel cas tu devrais avoir une autre erreur lors de la création.

Mais la ligne d'erreur que tu as est pour la copie d'une Array (VBA) sur le classeur, tout ce qu'il y a de plus standard…

Je te remets ci-joint un dernier test avec l'argument optionnel (nombre de colonnes) du Resize = 1, mais sinon je sèche..

Peut-être qu'il faudra passer par une solution comme celle de @Jacky pour du code VBA. Ou @tulipe sans.

12test-pta.xlsm (156.21 Ko)

Saboh, le message que j'ai la quand je lance est: Erreur d'execution '9' L'indice n'appartient pas à la selection.

Ton fichier m'a l'air à moitié corrompu : tu as un grand nombre de "workbooks", alors qu'il devrait etre unique. Encadrés en rouge sur le screenshot ci-dessous. Cela pourrait créer des erreurs. En dehors de ça, comme tu as pu le voir sur le dernier fichier joint, j'ai lancé la macro sans soucis. Le problème c'est que sans "reproduire le problème" je ne sais pas comment t'aider.

image

Pour l'indice : Ajoute tout en haut du module, sous "option Explicit" : Option Base 0

Si ça ne change rien, je ne sais vraiment pas désolé.

Saboh, même dans le fichier que tu as mis PTA TEST si je l'ouvre chez moi que j'ajoute une ligne dans l'onglet HAB et lance la macro j'ai l'erreur. Donc je dois peut-être avoir un souci de config avec le pc.

Oui probablement...

Dans ce dossier, C:\Windows\Microsoft.NET\Framework vous avez bien un sous-dossier "3.5" ?

@Saboh12617, et avc un dictionaire au lieu de 2 arraylists, on ne doit pas transposer ...

@Saboh12617, et avc un dictionaire au lieu de 2 arraylists, on ne doit pas transposer

ah ? je ne savais pas... Mais il faudrait 2 dictionnaires, ou s'assurer qu'on n'a aucune redondance dans la colonne I, ce qui n'a pas été précisé...

Alors oui j'ai bien un dossier v3.5

Rechercher des sujets similaires à "recherche onglet"