Ma macro ne trouve pas le chemin d'un fichiers

Bonjour à tous,

j'ai un problème au niveau de ma macro. Cette macro consiste à ouvrir un ou plusieurs tableur Excel afin de copier des cases et de les coller dans un dossier englobant toutes les informations. Elle referme ensuite les tableur de données. J'ai réussi à trouver une macro qui réalise cela (https://forum.excel-pratique.com/excel/creation-macro-pour-aller-chercher-info-dans-autre-classeur-t...). Je l'ai modifié pour mon utilisation.

Je n'ai aucun problème au début. J'ai mon tableur Excel qui va regrouper tout mes données qui est ouvert. J'en ouvre un nouveau, je met les données que je veux et j'enregistre ce nouveau tableur dans le même dossier et je le ferme. Je lance ma macro, tout fonctionne. Je ferme le tableur qui regroupe toute les données, je le réouvre, je lance ma macro mais un message d'erreur me dit "qu'il ne trouve pas le fichier, que je l'aurais déplacé, renommé ou supprimer". Or, il n'a pas bouger.

je ne comprends pas d'où vient l'erreur et bloque dessus, donc si quelqu'un comprend, qu'il éclaire ma lanterne. Merci d'avance.

Sub Macro1()
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 DL As Long 'déclare la variable DL (Dernière Ligne)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set CD = ThisWorkbook 'définit le classeur destination CD
Set OD = CD.Sheets("Feuil1") 'définit l'onglet destination OD

CA = CD.Path & "\" 'définit le chemin d'accès CA
OD.Range("A1:AH" & Application.Rows.Count).Clear 'supprime d'éventuelles ancienne données dans l'onglet OD
F = Dir(CA & "*.xlsx") 'définit le premier fichier F avec l'extension ".xlsx" dans le dossier CA

Call ViderPressePapier

Do While F <> "" 'exécute tant qu'il existe des fichiers F

    Application.Workbooks.Open (F) 'ouvre le fichier F     
    'Lors du débogage, l'erreur se trouve sur la ligne au dessus, "ne trouve pas le fichier"

    Set CS = ActiveWorkbook 'définit le classeur source CS
    Set OS = CS.Sheets("Feuil1") 'définit l'onglet source OS
    'définit la cellule de destination DEST (A4, si A4 est vide, sinon, la première cellule vide de la colonne A de l'onglet OD)
    Set DEST = IIf(OD.Range("A1").Value = "", OD.Range("A1"), OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0))

    DL = OS.Cells(Application.Rows.Count, "A").End(xlUp).Row 'dédinit la dernière ligne éditée de la colonne A de l'onglet OS
    OS.Range("A20,C20" & DL).Copy 'copie la plage voulu...(DL)
    DEST.PasteSpecial (xlPasteValuesAndNumberFormats) 'renvoie dans DEST les valeurs et les formats de nombre de la plage copiée
    DEST.Offset(0, 33).Value = OS.Range("a1").Value 'récupère le nom de 'longlet source
    CS.Close SaveChanges = False 'ferme le fichier source sans enregister les changements
    F = Dir 'fichier suivant commençant par DM avec l'extension ".xlsx" dans le dossier CA
    Call ViderPressePapier

Loop 'boucle

OD.Range("A1").Select 'sélectionne la cellule A3 de l'onglet OD
CD.Save 'enregistre le fichier destination
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran

End Sub
7test1.xlsm (22.66 Ko)

Bonjour,

Le plus simple dans ce genre d'investigation est d’exécuter le code en mode pas à pas détaillé (F8 sur le clavier) afin de voir l'état des variables.

Sur quelle ligne de code s'arrête l’exécution ? Y a -t-il des fichiers .xlsx dans votre dossier ? Le classeur de destination se trouve-t-il dans le même dossier que les autres classeurs ? Selon votre code tous ces paramètres sont essentiels à la bonne exécution du code.

Malheureusement sans connaître votre architecture de dossier, difficile d'avoir des hypothèses.

Cdlt,

Bonjour,

Normalement, votre code ne peut marcher qu'avec des classeurs déjà ouverts car la variable F contient le nom du fichier et non son chemin complet.

Essayez :

Do While F <> "" 'exécute tant qu'il existe des fichiers F
    set CS = Workbooks.Open(CA & F)

Sinon, il est possible de gérer les 2 cas :

function GetClasseur(spath$) as workbook
on error resume next
set GetClasseur = workbooks(split(spath, "\")(ubound(split(spath, "\"))))
if err = 9 then set GetClasseur = workbooks.open(spath)
end function

'dans le code
Do While F <> "" 'exécute tant qu'il existe des fichiers F
    set CS = GetClasseur(CA & F)

Cdlt,

Edit : Salut Ergotamine

J'ai déjà effectuer le mode pas à pas et ma macro s'arrêter sur la ligne : " Application.Workbooks.Open (F)" juste après le début de la boucle While

Oui, il y a bien des fichiers .xlsx et oui le classeur de destination est dans le même dossier que les autres classeur. Cependant, je n'ai testé qu'avec un classeur à la fois

Merci de vos réponse rapide.

3GB, j'ai essayer ta première solution et elle fonctionne mais un autre problème est survenue. Je n'arrive plus à copier les cellules sélectionner. J'ai testé en mode pas à pas le fichiers s'ouvre bien mais je n'ai pas l'impressions qu'il sélectionner et copie les cellules concerné.

Cdlt

Bon j'ai réussi à résoudre mon problème de copie

Merci encore de vos réponse

Rechercher des sujets similaires à "macro trouve pas chemin fichiers"