Conversion Variant to String : l'indice n'appartient pas à la sélection

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 !

jbballeyguier

XLDnaute Nouveau
Bonjour,

j'ai un petit soucis avec une macro.
L'idée est de faire une recherche de fichiers, d'ouvrir un par un les fichiers et de traiter les données dans ces fichiers. J'utilise la fonction filesearch, et je place le nom de chaque fichier dans un variant.
Le problème c'est que je voudrais récupérer le nom du fichier et le placer dans une variable string (j'ai l'impression que c'est plus simple à traiter.) Cependant, lorsque j'exécute la macro, il bute justement sur le passage de cette variant en string :
Code:
Ench = Cstr(NomFic)
Erreur : "l'indice n'appartient pas à la sélection"

Voilà la totalité du code :

Code:
Declare Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As Long
Declare Function CloseClipboard Lib "user32" () As Long
Declare Function EmptyClipboard Lib "user32" () As Long
Function ClipBoard_Clear()
    Call OpenClipboard(0&)
    Call EmptyClipboard
    Call CloseClipboard
End Function
Sub ploum()
    Call macro1
    Call Module2.InputPourRax
End Sub
Sub MaJ_PlandeTests()
    Dim ScanFic As Office.FileSearch
    Dim NomFic As Variant
    Dim racine As String
    Dim chemin As String
    Dim Ench As String
    Dim NomEnch As String
    Dim ligne As Integer

    ThisWorkbook.Worksheets("INPUT").Range("A2:Q12000").ClearContents
    ThisWorkbook.Worksheets("Suivi global").Range("C2:C500").ClearContents
    Application.CutCopyMode = False
    Set ScanFic = Application.FileSearch

ligne = 2
h = 1

    Do While ThisWorkbook.Sheets("Nomenclature").Cells(h, 1) <> ""
        ThisWorkbook.Activate
            Sheets("Nomenclature").Activate
            Cells(h, 1).Select
            racine = ThisWorkbook.Sheets("Nomenclature").Cells(h, 1)
            chemin = (ThisWorkbook.Path & "\" & racine)
            
    ' On recherche les fichiers dans l'arborescence et on les ouvre
            With ScanFic
                .NewSearch
                .LookIn = chemin
                .SearchSubFolders = True
                .FileType = msoFileTypeExcelWorkbooks
                .Execute
                
    ' On ouvre les fichiers trouvés et on les traite un par un
               For Each NomFic In .FoundFiles
                    Workbooks.Open Filename:=NomFic, UpdateLinks:=False
                    Ench = CStr(NomFic)
                    'MsgBox Ench
                    Workbooks(Ench).Activate
                    ActiveWorkbook.Sheets("CR détaillé").Activate
                    NomEnch = Range("C1").Value
                    'NomEnch = Workbooks(Ench).Sheets("CR détaillé").Range("C1").Value
        
        
    ' Effectue la copie des colonnes A à N
Dim j As Integer
j = 1
blanc = 0
                    Sheets("CR détaillé").Activate
                    Do While blanc < 2
                        If Worksheets("CR détaillé").Cells(j, 1) = "" Then blanc = blanc + 1
                        If Worksheets("CR détaillé").Cells(j, 1) <> "" Then blanc = 0
                        j = j + 1
                    Loop
                    MsgBox j
Dim fin As Integer
fin = 1
                    fin = j - 2
                    Cells(fin, 8).Value = "FIN"
                
    ' On supprime les lignes inutiles
                    Worksheets("CR Détaillé").Activate
                    Range(Cells(3, 15), Cells(fin, 15)).Value = NomEnch 'Met le numéro de l'enchainement dans la colonne O
                    j = 2
                        Do While Cells(j, 8).Value <> "FIN"
                        Cells(j, 8).Select
                        ' On se sert de la mise en forme des lignes que l'on veut supprimer, c'est bourrin mais ça marche
                            If Cells(j, 2).Interior.ColorIndex = 56 And Cells(j + 1, 1) = "" Then
                                Range(Cells(j, 1), Cells(j + 1, 15)).Select
                                Selection.Delete xlUp
                             ElseIf Cells(j, 1) = "" Or Cells(j, 2).Interior.ColorIndex = 16 Or Cells(j, 2).Interior.ColorIndex = 56 Then
                                Range(Cells(j, 1), Cells(j, 15)).Select
                                Selection.Delete xlUp
                            End If
                            'MsgBox True
                            j = j + 1
                        Loop
                    fin = j - 1
    
    'On copie les lignes qui nous intéressent
                    Range(Cells(4, 1), Cells(fin, 15)).Select
                    Selection.Copy
                    ThisWorkbook.Activate
                    Worksheets("INPUT").Activate
                    Range(Cells(ligne, 1), Cells(fin, 14)).Select
                    ActiveSheet.Paste
                        ' On ferme la fiche d'enchainement pour passer à la suivante
                    ClipBoard_Clear
                    Workbooks(Ench).Close savechanges:=False
                    ligne = fin - 1 'Pour éviter d'écraser les lignes collées par les suivantes
                Next
            End With
            h = h + 1
    Loop
    
'On supprime les mises en forme et les colonnes inutiles
                ThisWorkbook.Sheets("INPUT").Cells.Select
                    Selection.ClearFormats
                    With Selection.Validation
                        .Delete
                        .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _
                        :=xlBetween
                        .IgnoreBlank = True
                        .InCellDropdown = True
                        .InputTitle = ""
                        .ErrorTitle = ""
                        .InputMessage = ""
                        .ErrorMessage = ""
                        .ShowInput = True
                        .ShowError = True
                    End With
                    
                    Range("U1").Activate
                    Range("C:C,F:G,K:N").Select
                    Selection.Delete shift:=xlToLeft
                    
                    ' Renommage des colonnes
                    Range("A1").Value = "Pas"
                    Range("B1").Value = "Action"
                    Range("C1").Value = "Domaine"
                    Range("D1").Value = "M.A"
                    Range("E1").Value = "Fiche"
                    Range("F1").Value = "Titre"
                    Range("G1").Value = "N° de cas"
                    Range("H1").Value = "Enchainement"
                    
                    With Range("A1:F1")
                        .Interior.ColorIndex = 1
                        .Font.ColorIndex = 2
                        .Font.Bold = True
                    End With
                    
                    Cells.Select
                    Cells.EntireColumn.AutoFit
End Sub

Auriez-vous une idée pour résoudre ce problème ? 😉
 
- 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
4
Affichages
177
Réponses
1
Affichages
180
Réponses
2
Affichages
153
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
169
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
479
Réponses
3
Affichages
665
Retour