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 SubLe 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 :
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 SubMais 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 !