Problème ouverture fichier si existe

Bonjour à tous,

Alors dans l'idée d'importer des données d'un fichier (LISTING_EXPORT.xlsm) se trouvant au même endroit que le classeur actif (LISTING_RESULTAT.xlsm) j'utilise pour sélectionner le fichier :

Sub SelectFichier()

    Dim QuelFichier As String
    QuelFichier = Dir(Workbooks(ActiveWorkbook.Name).Path & "\LISTING_EXPORT.xlsm")
    If QuelFichier <> "" Then
    Copie (Workbooks.Open(Workbooks(ActiveWorkbook.Name).Path & "\LISTING_EXPORT.xlsm"))
    Else
        MsgBox "Le fichier 'LISTING_EXPORT.xlsm' n'a pas été trouvé !" & Chr(10) & Chr(10) & "Il doit se trouver au même niveau que le fichier 'LISTING_RESULTAT.xlsm.", vbCritical, "Erreur !"
        End
    End If

End Sub

Le problème, c'est qu'il n'aime pas la ligne :

Copie (Workbooks.Open(Workbooks(ActiveWorkbook.Name).Path & "\LISTING_EXPORT.xlsm"))

Si je retire le "Copie" ça fonctionne mais du coup, c'est pas ce que je souhaite..

Voici l'erreur que j'obtiens :

190303093347477401

Je ne sais pas comment contourner le problème, enfin plutôt le régler !

Cordialement

Bonjour,

On ne sait pas ce que vous voulez faire !

On ne sait que ce qui ne fonctionne pas sans savoir ce que c'est sensé faire.

Copie() est une sub, une fonction ? qui fait quoi ? qui attend des paramètres ?

A+

Bonjour, alors oui "Copie " est une fonction, la voici :

Sub Copie(x As String)
    Dim NewBook As Workbook, tablo1, i&, tablo2(), tablo3(), n&, m&
    Set NewBook = Workbooks(x)
    tablo1 = NewBook.Sheets("EXPORT TOPSOLID").Range("A1").CurrentRegion.Resize(, 22)
    For i = 2 To UBound(tablo1)
        Select Case tablo1(i, 20)
            Case "PANNEAUX"
                ReDim Preserve tablo2(n)
                tablo2(n) = WorksheetFunction.Index(tablo1, i, 0)
                n = n + 1
            Case "ACCESSOIRES", "ECLAIRAGE", "ELECTRICITE", "IMPRESSION NUMERIQUE", "MATIERE PLASTIQUE", "METALLERIE", "MIROIR", "PROFIL", "QUINCAILLERIE", "QUINCAILLERIE / VRAC", "REVETEMENT", "VERRE"
                ReDim Preserve tablo3(m)
                tablo3(m) = WorksheetFunction.Index(tablo1, i, 0)
                m = m + 1
        End Select
    Next i
    With ThisWorkbook.Sheets("LISTING PANNEAUX").Range("R8")
        '.CurrentRegion.Offset(1).ClearContents
        If n > 0 Then .Resize(n, UBound(tablo1, 2)).Value = WorksheetFunction.Transpose( _
         WorksheetFunction.Transpose(tablo2))
    End With
    With ThisWorkbook.Sheets("LISTING BESOIN").Range("H8")
        '.CurrentRegion.Offset(1).ClearContents
        If m > 0 Then .Resize(m, UBound(tablo1, 2)).Value = WorksheetFunction.Transpose( _
         WorksheetFunction.Transpose(tablo3))
    End With
    NewBook.Close False
End Sub

Mais pour moi le code bloque avant, dans la procédure "SelectFichier" comme indiqué dans mon précédent message donc je ne pensais pas qu'il était nécessaire de mettre ce code.

Pour résumer :

Depuis le classeur actif "LISTING_RESULTAT.xlsm", j'importe le fichier "LISTING_EXPORT.xlsm" qui se situe au même endroit que le classeur actif.

Je test d'abord si le fichier existe, si il existe alors j'exécute la procédure "Copie" sinon je lance un msgbox.

Cordialement

pas sûr que l'ouverture d'un classeur comme paramètre ne pose pas de problème.

Mais sûr que la passer à une sub qui attend une chaine de caractère comme paramètre ne fonctionera pas bien.

une proposition de correction:

Dans Sub SelectFichier() remplacer:

Copie (Workbooks.Open(Workbooks(ActiveWorkbook.Name).Path & "\LISTING_EXPORT.xlsm"))

par

Copie (QuelFichier)

et dans Sub Copie(x As String) remplacer :

Set NewBook = Workbooks(x)

par

Set NewBook = Workbooks.Open(ThisWorkbook.Path & "\" & x)

A+

Salut, ça marche à la perfection..

Merci à toi !

Rechercher des sujets similaires à "probleme ouverture fichier existe"