Erreur 400 - Code de récupération de donnée
Bonjour à tous
J'ai un petit soucis: j'ai copié, et modifié un code existant selon mes besoins pour me permettre de récupérer et compiler des informations de multiples projets dans un excel "compilateur".
En gros, j'ai mis dans le même fichier un excel compilateur et les autres excels sont les rapports clients.
Problème : le code fonctionne, mais je dois ré-enregistrer-sous chaque excel de clients avant que l'erreur 400 ne s'enlève.
Deux solutions s'offrent à moi:
Solution bête : trouver le moyen de faire un code VBA qui enregistre-sous et écrase chaque fichiers
Solution intelligente: que quelqu'un puisse m'aiguiller sur une fonction qui permettrait de régler cette erreur
Voici le code que j'utilise :
Sub ImporterDonneesFichier()
Dim CC As Workbook 'déclare la variable CC (Classeur Cible)
Dim OC As Worksheet 'déclare la variable OC (Onglet Cible)
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 PL As Range 'déclare la variable PL (PLage)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Set CC = ThisWorkbook 'définit le classeur cible CC
Set OC = CC.Sheets("Client_Compilation") 'définit l'onglet cible OC (à adapter)
F = Dir(CC.Path & "\*.xls?") 'définit le fichier F (premier fichier Excel du dossier contenant ce classeur)
Do While F <> "" 'boucle tant qu'il existe des fichiers
If Not F = CC.Name Then 'condition : si F n'est pas ce classeur
Workbooks.Open (F) 'ouvre le fichier F
Set CS = ActiveWorkbook 'définit le classeur source CS
Set OS = CS.Sheets("Client_Planning") 'définit l'onglet source OS (à adapter)
Set PL = OS.Range("A1:B8") 'définit la plage PL (à adapter, peut aussi être PL=OS.Rows(1))
'définit la cellule de destination DEST (A1 si A1 est vide,
'sinon la première cellule vide de la colonne 1 (=A) de l'onglet cible OC (à adapter)
Set DEST = IIf(OC.Range("A3").Value = "", OC.Range("A3"), OC.Cells(Application.Rows.Count, 1).End(xlUp).Offset(3, 0))
PL.Copy DEST 'copy la plage PL dans DEST
CS.Close 'ferme le classeur source
End If 'fin de la condition
F = Dir 'redéfinit le fichier F (prochain fichier Excel du dossier contenant ce classeur)
Loop 'boucle
End SubQuelqu'un aurait-il une solution à me proposer s'il vous plait ?
N'hésitez pas à me dire si je n'ai pas été assez clair :)
Bonjour Muffet, bonjour le forum,
Tu commences mal : J'ai fait un code !
Marrant, ce code me parle et surtout les commentaires qui vont avec...
Pardon, "j'ai copié, et modifié un code existant selon mes besoins", j'ai tapé trop vite !
Bonjour,
essaie ainsi, (j'ai une erreur 1004 quand j'exécute ton code pas une erreur 400)
Sub ImporterDonneesFichier()
Dim CC As Workbook 'déclare la variable CC (Classeur Cible)
Dim OC As Worksheet 'déclare la variable OC (Onglet Cible)
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 PL As Range 'déclare la variable PL (PLage)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Set CC = ThisWorkbook 'définit le classeur cible CC
Set OC = CC.Sheets("Client_Compilation") 'définit l'onglet cible OC (à adapter)
F = Dir(CC.Path & "\*.xls?") 'définit le fichier F (premier fichier Excel du dossier contenant ce classeur)
Do While F <> "" 'boucle tant qu'il existe des fichiers
If Not F = CC.Name Then 'condition : si F n'est pas ce classeur
Workbooks.Open (CC.Path & "\" & F) 'ouvre le fichier F ' <----------- correction
Set CS = ActiveWorkbook 'définit le classeur source CS
Set OS = CS.Sheets("Client_Planning") 'définit l'onglet source OS (à adapter)
Set PL = OS.Range("A1:B8") 'définit la plage PL (à adapter, peut aussi être PL=OS.Rows(1))
'définit la cellule de destination DEST (A1 si A1 est vide,
'sinon la première cellule vide de la colonne 1 (=A) de l'onglet cible OC (à adapter)
Set DEST = IIf(OC.Range("A3").Value = "", OC.Range("A3"), OC.Cells(Application.Rows.Count, 1).End(xlUp).Offset(3, 0))
PL.Copy DEST 'copy la plage PL dans DEST
CS.Close 'ferme le classeur source
End If 'fin de la condition
F = Dir 'redéfinit le fichier F (prochain fichier Excel du dossier contenant ce classeur)
Loop 'boucle
End SubBonjour le fil, le forum,
Pas mieux que notre sulfurique ami...
Merci beaucoup !!!
ça fonctionne nickel (pour le moment) :)
Je reposterais si cela change! :)
Ha nouveau soucis :
J'ai dans les données de copie des données issues de listes...
Il semblerait que cela empêche le saut de ligne via le code... donc les données restent sur une ligne.
Vous sauriez comment obliger excel a sauter une ligne ?