Erreur 1004 avec mon workbook.open

Bonjour/Bonsoir

c'est la première fois que demande de l'aide sur un forum excusez moi donc pour les erreur d'usage,

c'est la première fois que je développe en vba n'hésitez pas a me corriger si vous voyez des erreurs non-liées a mon problème !

je doit faire un macro qui répertorie les infos de 30 fichiers différents dans un seul, j'ai donc fait un bouton sur la page qui doit recevoir les infos et le macro associé est censé ouvrir les autres fichiers Excel et prendre les infos.

pour la récupération d'info je sait que c'est bon puisque le macro marchait mais il ne marche plus et je ne comprend pas pourquoi.

j'ai donc une erreur 1004 qui dit que le fichier est introuvable alors que je n'ai pas changé le chemin et qu'il marchait au début, de plus le fichier qui reçoit et les fichiers ou sont stockés les données sont dans le même dossier.

j'espère avoir été assez clair et je vous remercie de m'avoir lu j'espère vraiment que vous pourrez m'aider

ci-joint un screen de mon code:

aidezmoi

Bonjour,

Pouvez-vous poster ce code à l'aides balises </> du ruban de commentaire ? C'est plus facile à modifier qu'une image .

Pouvez-vous essayer dans un premier temps :

do while F <> ""
    Set CS = workbooks.open(F)
    Set OS ...
    'suite du code

Edit : il faut être sûr de la ligne F = dir(CA & "*.xls") également. A votre place, je modifierais "*.xls" par "*.xls*".

Cdlt,

merci pour la réponse rapide !

je n'ai pas le code sur moi je testerai tout ça demain et je posterai le code en même temps !

J'ai essayé vos proposition et malheureusement ca ne change rien, il ne trouve toujours pas le fichier alors qu'il l'identifie bien..

le code :

Sub Macrostage()
Dim CD As Workbook 'déclare la variable CD (Classeur 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 (Classeur 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 CN As Long 'déclare la variable CN (Colonne N')

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set CD = ThisWorkbook 'définit le classeur destination CD
Set OD = CD.Sheets("Saisievaleurs") 'définit l'onglet destination OD
CA = CD.Path & "\" 'définit le chemin d'accès CA
OD.Range("F16:AI23").Clear  'supprime d'éventuelles ancienne données
F = Dir(CA & "*.xls*") 'définit le premier fichier F avec l'extension ".xls" dans le dossier CA
CN = 6

Do While F <> "" 'exécute tant qu'il existe des fichiers F
    Set CS = Workbooks.Open(F)  'ouvre le fichier F
    Set CS = ActiveWorkbook 'définit le classeur source CS
    Set OS = CS.Sheets("01") 'définit l'onglet source OS

    'définit la cellule de destination DEST (F16, si F16 est vide, sinon, la première ligne vide de l'onglet OD)
    Set DEST = IIf(OD.Rows(16).Columns(CN).Value = "", OD.Rows(16).Columns(CN), OD.Cells(Application.Columns.Count, CN).End(xlUp).Offset(0, 1))
    OS.Range("H9,H13,H17,H21,H25,H29,H33,H37").Copy 'copie les valeurs de la colonne H , h13, h17, h21, h24, h27, h30, h33, h37
    DEST.PasteSpecial (xlPasteValues) 'renvoie dans DEST les valeurs
    CN = CN + 1
    CS.Close SaveChanges = False 'ferme le fichier source sans enregister les changements
    F = Dir 'fichier suivant avec l'extension ".xls" 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
End Sub

Bon j'ai réussi a faire ouvrir le fichier avec :

Set CS = Workbooks.Open(CA & F)  'ouvre le fichier F

maintenant le problème est que le programme etait censé prendre les fichier dans l'ordre (ils sont numérotés de 1 à 30) mais les informations sont données dans un ordre aléatoire sauf pour le pour le fichier n'1, je ne sait pas trop comment régler ce problème.

avec une boucle peut être mais si les fichiers sont emmener a changer de nom ce sera compliqué.

Bonjour,

Merci pour le code ! Et bravo d'avoir trouvé la solution !

Pour ce qui est de l'ordre, en principe, je crois qu'ils sont ouverts selon leur ordre dans le dossier, donc suivant un classement alphabétique. Donc de 1 à 9 ça va mais par contre 10 à 19 apparaissent avant 2. Le mieux serait de remplacer les chiffres 1 à 9 par 01 à 09.

Est-ce qu'il est possible que ce soit ça ?

Cdlt,

C'etait bien le problème ! en rajoutant un 0 devant le 1 à 9 les fichiers sont sortis dans le bon ordre ! Merci beaucoup !

Maintenant j'ai un dernier problème assez spécial, quand j'exécute mon macro le fichier se ferme (pas Excel juste le fichier, il faut juste le rouvrir) mais les données sont entrées correctement après la réouverture, un problème dans ma boucle peut-être ?

j'y ai pas mal touché depuis tout a l'heure alors je remet mon code:

Sub Macrostage()
Dim CD As Workbook 'déclare la variable CD (Classeur 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 (Classeur 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 CN As Long 'déclare la variable CN (Colonne N')

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set CD = ThisWorkbook 'définit le classeur destination CD
Set OD = CD.Sheets("Saisievaleurs") 'définit l'onglet destination OD
CA = CD.Path & "\" 'définit le chemin d'accès CA
OD.Range("F16:AI23").Clear  'supprime d'éventuelles ancienne données
F = Dir(CA & "*.xls") 'définit le premier fichier F avec l'extension ".xls" dans le dossier CA
CN = 6

Do While F <> "" 'exécute tant qu'il existe des fichiers F
    Set CS = Workbooks.Open(CA & F)  'ouvre le fichier F
    Set CS = ActiveWorkbook 'définit le classeur source CS
    Set OS = ActiveSheet 'définit l'onglet source OS

    'définit la cellule de destination DEST (F16, si F16 est vide, sinon, la première ligne vide de l'onglet OD)
    Set DEST = IIf(OD.Rows(16).Columns(CN).Value = "", OD.Rows(16).Columns(CN), OD.Rows(1).Columns(1)) '(Application.Columns.Count, CN).End(xlUp).Offset(0, 1))
    OS.Range("H9,H13,H17,H21,H25,H29,H33,H37").Copy 'copie les valeurs de la colonne H , h13, h17, h21, h24, h27, h30, h33, h37
    DEST.PasteSpecial (xlPasteValues) 'renvoie dans DEST les valeurs
    CN = CN + 1
    CS.Close SaveChanges = False 'ferme le fichier source sans enregister les changements
    F = Dir 'fichier suivant avec l'extension ".xls" 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
End Sub

Les fichiers ouverts (CS : classeurs sources) se referment à la fin de chaque itération en effet, sans qu'il n'y ait de sauvegarde dessus :

CS.Close SaveChanges = False 'ferme le fichier source sans enregister les changements

Ca me semble assez normal, on va pas garder 30 fichiers ouverts...

Le fichier exécutant (CD : classeur destinataire) ne se ferme pas dans le code, à moins que j'aie loupé la ligne... Il est sauvegardé cependant à la fin.

Je trouve ça normal que les autres se ferment mais le classeur destination n'est pas censé ce fermer !

le fait de le sauvegarder ne le ferme pas j'imagine, il doit donc y avoir un problème ailleurs mais ou, bonne question une erreur aurait été utile

je continue de chercher mais je pense fermer ce poste bientôt étant donné que le problème n'est plus vraiment le même !

Merci beaucoup 3GB pour ton temps !

Oui, c'est bizarre. Avec le dernier code que tu as posté, la seule explication qui semble plausible, c'est que le classeur de destination soit lui aussi dans ce même dossier, qu'il soit ouvert (sans bug) et sauvegardé par magie...

Quelle est l'extension des fichiers que tu ouvres ? Je t'ai recommandé de mettre "*.xls*" mais il y avait peut-être une raison à garder "*.xls"...

Voici un essai quand même :

Sub Macrostage()
Dim CD As Workbook 'déclare la variable CD (Classeur 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 (Classeur 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 CN As Long 'déclare la variable CN (Colonne N')

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set CD = ThisWorkbook 'définit le classeur destination CD
Set OD = CD.Sheets("Saisievaleurs") 'définit l'onglet destination OD
CA = CD.Path & "\" 'définit le chemin d'accès CA
OD.Range("F16:AI23").Clear  'supprime d'éventuelles ancienne données
F = Dir(CA & "*.xls") 'définit le premier fichier F avec l'extension ".xls" dans le dossier CA
CN = 6

Do While F <> "" 'exécute tant qu'il existe des fichiers F
    if F <> CD.name then
        Set CS = Workbooks.Open(CA & F)  'ouvre le fichier F
        Set CS = ActiveWorkbook 'définit le classeur source CS
        Set OS = ActiveSheet 'définit l'onglet source OS

    'définit la cellule de destination DEST (F16, si F16 est vide, sinon, la première ligne vide de l'onglet OD)
        Set DEST = IIf(OD.Rows(16).Columns(CN).Value = "", OD.Rows(16).Columns(CN), OD.Rows(1).Columns(1)) '(Application.Columns.Count, CN).End(xlUp).Offset(0, 1))
        OS.Range("H9,H13,H17,H21,H25,H29,H33,H37").Copy 'copie les valeurs de la colonne H , h13, h17, h21, h24, h27, h30, h33, h37
        DEST.PasteSpecial xlPasteValues 'renvoie dans DEST les valeurs
        CN = CN + 1
        CS.Close False 'ferme le fichier source sans enregister les changements
    end if
    F = Dir 'fichier suivant avec l'extension ".xls" 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
End Sub

Mais ça me semblerait bizarre...

PS : Il faut vraiment que tu copies le code issu de ton fichier car le dernier n'aurait pas pu s'exécuter à cause d'un problème de compilation...

Les 30 fichiers a ouvrir sont en .xls alors que le fichier destination est en .xlsm je pensait donc qu'en laissant *.xls que le fichier destination ne chercherait pas à s'ouvrir lui même mais visiblement je me suit trompé.

Ton code fonctionne parfaitement !

Sur ce je ferme le sujet, Merci encore 3GB !

Bon très bien ! Bonne continuation alors et peut-être à bientôt,

Cdlt,

Rechercher des sujets similaires à "erreur 1004 mon workbook open"