(re)bjr à tous,

j'ai un module vba qui recherche un nom dans un fichier xlsx et qui renvoie VRAI ou FAUX selon le cas.

Au 1er appel du module, c'est nickel, mais au suivant, ca plante avec "l'indice n'appartient pas à la sélection" sur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
    ActiveWorkbook.Worksheets(1).ListObjects("effectifHbx").Sort. _
        SortFields.Clear
je vous mets le code en entier, précédé de l'appel.

1er appel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
                            If Not Application.Run("'PERSONAL.XLSB'!Check_Effectifs", Nom_Presta, FirstSearch) Then 'si vérif est false
                                GoTo errorPrestaNameHandler
                            End If
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
Public Function Check_Effectifs(Nom_Presta As String, FirstSearch As Boolean) As Boolean
 
    '-------------------------------
 
Dim Effectifs_FullFileName As String
Dim fich As Object
Dim Trouve As Range, PlageDeRecherche As Range
'Dim Valeur_Cherchee As String, AdresseTrouvee As String
Dim estouvert As Boolean
 
    Effectifs_FullFileName = "Tdb_Effectifs.xlsx"
    Sheets(1).Select
 
    If FirstSearch Then 'si on est à la 1ere rech. on check l'ouverture du xls
 
        'test si le classeur est ouvert
        estouvert = False
        For Each fich In Workbooks
            'Debug.Print fich.Name
            If fich.Name = Effectifs_FullFileName Then estouvert = True
        Next
        If estouvert = False Then
            If FileDateTime("C:\fichiersxls\" & Effectifs_FullFileName) < Date Then
                MsgBox ("les fichiers shpt n'ont pas été copiés en local ! :-(")
                'ChDir "C:\fichiersxls"
                Exit Function
            Else
                Workbooks.Open filename:="C:\fichiersxls\" & Effectifs_FullFileName, UpdateLinks:=0
            End If
        End If
    End If
 
    'Effectifs
    Windows(Effectifs_FullFileName).Activate
 
    'supp filtres éventuels
    Range("A1").Select
    Application.CutCopyMode = False
    Selection.AutoFilter
    Range("A1").Select
    Selection.AutoFilter
 
    ActiveWorkbook.Worksheets(1).ListObjects("effectifHbx").Sort. _
        SortFields.Clear
    ActiveWorkbook.Worksheets(1).ListObjects("effectifHbx").Sort. _
        SortFields.Add Key:=Range("effectifHbx[[#All],[Nom]]"), SortOn:= _
        xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets(1).ListObjects("effectifHbx"). _
        Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
 
    Set PlageDeRecherche = ActiveSheet.Columns(1)
 
    'méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole)
    Set Trouve = PlageDeRecherche.Cells.Find(what:=Nom_Presta, lookat:=xlWhole)
 
    'traitement de l'erreur possible : Si on ne trouve rien :
    If Trouve Is Nothing Then
        'ici, traitement pour le cas où la valeur n'est pas trouvée
        'AdresseTrouvee = Nom_Presta & " n'est pas présent dans " & PlageDeRecherche.Address
        Check_Effectifs = False
    Else
        'ici, traitement pour le cas où la valeur est trouvée
        'AdresseTrouvee = Trouve.Address
        Check_Effectifs = True
        Cells.Find(what:=Nom_Presta, lookat:=xlWhole).Select
    End If
    'MsgBox AdresseTrouvee
    'vidage des variables
    Set PlageDeRecherche = Nothing
    Set Trouve = Nothing
 
 
End Function
comme ca ne trouve pas le nom, ca va à l'étiquette "errorPrestaNameHandler" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
errorPrestaNameHandler:
    'MsgBox ("Le nom du prestataire " & Nom_Presta & " n'est pas correct.")
    continuer = MsgBox("Le nom du prestataire " & Nom_Presta & " n'est pas correct." & vbCrLf & "voulez-vs continuer ?", vbYesNo, Admin)
    If continuer = vbNo Then Exit Sub
    GoTo SaisiePresta
je dis "ok", ca va à l'étiquette "SaisiePresta" où là, comme son nom l'indique, on saisit un prestataire :-)
ensuite j'appelle une 2e fois le module... et ca plante à la ligne 43 :-(

pour paraphraser le père d'Amélie Poulain : "je ne comprends pas"...

Un énorme MERCI d'avance pour vos lumières !!!

cordt