Impossible d'ouvrir un fichier xlsx même si Workbooks.Open voit le fichier
Bonjour à tous,
c'est la première fois que je poste sur un forum. En général je trouve la solution en me baladant par ci par la mais dans ce cas, j'ai l'impression que c'est de la magie binaire. Je m'explique:
Je souhaite transférer des données de plusieurs fichiers .xlsx contenant plusieurs feuilles identiques. Voici le début de code que j'ai fait:
'Sub principale récupérant toute les données.
Sub Inventory()
Dim CD As Workbook 'déclare la variable CD (Claseur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim F As String 'déclare la variable F (Fichiers)
Dim CS As Workbook 'déclare la variable CS (Claseur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Dim NFS As Integer 'déclare la variable NFS (nombre feuille source)
Dim CF As Integer 'déclare la variable CF (compteur feuille)
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set CD = ThisWorkbook 'définit le classeur destination CD
Set OD = CD.Sheets("Inventaire") 'définit l'onglet destination OD
CA = CD.Path & "\" 'définit le chemin d'accès CA
F = Dir(CA & "*.xlsx") 'définit le premier fichier F avec l'extension ".xlsx" dans le dossier CA
Do While F <> "" 'exécute tant qu'il existe des fichiers F
Application.Workbooks.Open (F) 'ouvre le fichier F
Set CS = ActiveWorkbook 'définit le classeur source CS
NFS = CS.Sheets.Count 'récupère le nombre de feuille à traiter
For CF = 1 To NFS 'parcour des feuilles
Set OS = CS.Sheets(CF) 'définit l'onglet source OS
If OS.Name <> "data" Then 'on exclu la feuille data
'copie de l'heure
'définit la cellule de destination DEST (A2, si A2 est vide, sinon, la première cellule vide de la colonne A de l'onglet OD)
Set DEST = IIf(OD.Range("A2").Value = "", OD.Range("A2"), OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0))
OS.Range("B2").Copy 'copie la date
DEST.PasteSpecial (xlPasteValuesAndNumberFormats) 'renvoie dans DEST les valeurs et les formats de nombre de la plage copiée
End If
Next
CS.Close SaveChanges = False 'ferme le fichier source sans enregister les changements
F = Dir 'fichier suivant avec l'extension ".xlsx" dans le dossier CA
Loop 'boucle
CD.Save 'enregistre le fichier destination
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
MsgBox "Fin du traitement des données !" 'message
'Se place sur la feuille nommée Inventaire
Sheets("Inventaire").Activate
End SubLe problème: lorsque la ligne "Application.Workbooks.Open (F)" vas s'exécuter, un popup d'erreur me dit "nous ne trouvons pas 'monfichier.xlsx', l'avez vous déplacer, renommer ou supprimer?". Or, c'est lui même qui va chercher le nom. J'ai déjà essayé avec d'autres fichier mais rien ne change. Aidez le moldu VBA que je suis s'il vous plait.
Bon, j'ai résolu mon problème en déplaçant l'ensemble des fichiers .xlsm et .xlsx dans un autre répertoire. Je suppose qu'il y a du y avoir un problème dans le pathing du .xlsm mais si quelqu'un à la réponse exact je suis quand même preneur pour ma culture ^^.
Bonjour,
il faut rajouter également le chemin dans l'instruction Open
Application.Workbooks.Open (CA & F)Merci, c'est vrai que sans le chemin complet, c'est plus compliqué ^^