"Etre sur la même feuille" en VBA

Résolu
Bonjour,

J'ai 2 classeur distincts, l'un contenant une liste de prenom et l'autre plusieurs feuilles avec diverses données.
Je cherche à faire un test pour savoir si 2 cellules consécutives de mon classeur 1 ("Paul" et "Pierre" par exemple) sont sur la même feuille du classeur 2 en "scannant" à chaque fois toutes les feuilles par une boucle for.
Je serai vraiment reconnaissant si quelqu'un pouvait m'aider, merci.

6 réponses

  1. J'ai tenté ça mais ça marche pas:

    If [B:B].Find(Wbk2.Worksheets("Structure").Cells(I, 8).Value, LookIn:=xlValues, lookat:=xlWhole) = True & [B:B].Find(Wbk2.Worksheets("Structure").Cells(I + 1, 8).Value, LookIn:=xlValues, lookat:=xlWhole) = True Then

    J'ai vraiment besoin d'aide, merci à tous ceux qui m'aidront
    0
    1. Il y a vraiment personne pour me dire en quoi cette ligne est fausse?
      0
      1. Contributeur
        bonjour

        Si tu pouvais nous mettre un exemple sans éléments personnels mais avec la structure des données sur https://www.cjoint.com/ puis nous mettre le lien généré ici ce serait plus facile.
        0
        1. Voila, j'ai 2 classeurs je voudrais vérifier si 2 éléments consécutifs de la colonne "éléments" dans le classeur2 se trouvent sur une même feuille dans le classeur1. Si oui, je veux que le nom de l'onglet soit copier en face des 2 éléments comparées dans la colonne "nom" du classeur2.
          Si nom, passer au 2 prochains termes.
          Et ainsi de suite...

          Voici les 2 fichiers et ma tentative de code:

          http://cjoint.com/?3FvaXtcL7G3
          http://cjoint.com/?3FvaXYCyRLg

          Dim Wbk1 As Workbook, Wbk2 As Workbook
          Dim ws As Worksheet
          Dim ws_count As Integer

          Set Wbk1 = ThisWorkbook
          Set Wbk2 = Workbooks("Classeur2.xls")
          ws_count = ActiveWorkbook.Worksheets.Count

          For I = 2 To 7
          For J = 1 To ws_count
          Wbk1.Worksheets(J).Activate
          If [B:B].Find(Wbk2.Worksheets("Feuil1").Cells(I, 5).Value, LookIn:=xlValues, lookat:=xlWhole) = True And [B:B].Find(Wbk2.Worksheets("Feuil1").Cells(I + 1, 5).Value, LookIn:=xlValues, lookat:=xlWhole) = True Then
          Wbk2.Worksheets("Feuil1").Cells(I, 3) = Wbk1.Worksheets(I).Name
          Wbk2.Worksheets("Feuil1").Cells(I + 1, 3) = Wbk1.Worksheets(I).Name
          Else
          End If
          Next J
          Next I
          0
          1. Contributeur
            Bonsoir tout le monde,

            pas :
            If [B:B].Find(...) = True
            mais :
            If not [B:B].Find(...) is nothing
            Je n'ai pas testé ton code avec cette modif, j'ai vu l'erreur après avoir créé le mien.

            Dim wb2 As Workbook, sh1 As Worksheet, sh2 As Worksheet
            Dim item1 As String, item2 As String, c1 As Range, c2 As Range
            Dim lig As Long
            Set sh1 = Workbooks("classeur2.xlsx").Worksheets("Feuil1")
            Set wb2 = Workbooks("classeur1.xlsx")
            
            For lig = 2 To sh1.[E65536].End(xlUp).Row Step 2
                item1 = sh1.Cells(lig, 5)
                item2 = sh1.Cells(lig + 1, 5)
                For Each sh2 In wb2.Worksheets
                    Set c1 = sh2.Cells.Find(item1, LookIn:=xlValues, LookAt:=xlWhole)
                    Set c2 = sh2.Cells.Find(item2, LookIn:=xlValues, LookAt:=xlWhole)
                    If Not c1 Is Nothing And Not c2 Is Nothing Then
                        sh1.Cells(lig, 6) = sh2.Name
                        sh1.Cells(lig + 1, 6) = sh2.Name
                        Exit For
                    End If
                Next sh2
            Next lig

            eric
            0
            1. ça marche très bien, merci beaucoup eriiic de ton aide précieuse.
              0