"Etre sur la même feuille" en VBA

Résolu
Sam -  
 Sam -
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. Sam
     
    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
  2. Sam
     
    Il y a vraiment personne pour me dire en quoi cette ligne est fausse?
    0
  3. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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
  4. Sam
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  7. Sam
     
    ça marche très bien, merci beaucoup eriiic de ton aide précieuse.
    0