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
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