Extraire des données de classeur vers une base de données

Fermé
yannes.cgn Messages postés 1 Date d'inscription mercredi 6 août 2014 Statut Membre Dernière intervention 6 août 2014 - 6 août 2014 à 09:14
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 - 6 août 2014 à 12:17
Bonjour bonjour,
je souhaiterai répertorier des factures que j'ai répertorié dans un classeur vers une base de donnée à l'aide d'une macro VBA.
Mais voilà! Dès que je lance la macro le fameux message d'erreur propre au cas échant m'indique " Propriété non gérée par cet objet"
Naturellement je me suis renseigné avant et malgrés avoir vérifié chaque paramètre le problème persiste: HELP :) !

Nota: je souhaite aussi que tous les fichiers se mettent à la suite

LA ZONE QUI ME POSE PROBLEME EST SOULIGNEE



Sub recup()
Dim i%, chemin$, Fichier$, Factures$
Application.ScreenUpdating = False
i = Range("A1").Row 'sélectionner la cellule de début
chemin = "C:\factures" 'saisir le chemin complet du dossier où se trouvent les fichiers
Fichier = Dir(chemin & "*.xls") ' Premier fichier

Do While Fichier <> ""

Workbooks.Open Filename:=chemin & Fichier 'charge le classeur
With ActiveWorkbook.Worksheets(1)
.Range("A2:C5").Copy Workbooks("classeur_steph_solution2").Worksheets(2).Cells(i, 1).Paste
.Range("A65536").End(xlUp).Select
.Close savechanges:=False
End With
MsgBox ("pb")
i = Range("A65536").End(xlUp)(2).Select
Fichier = Dir ' Fichier suivant
Loop

End Sub

3 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
6 août 2014 à 09:40
Bonjour,

Sub recup()
Dim i%, chemin$, Fichier$, Factures$

Application.ScreenUpdating = False
'i = Range("A1").Row 'sélectionner la cellule de début ??????????????
i = 1
chemin = "C:\factures" 'saisir le chemin complet du dossier où se trouvent les fichiers
Fichier = Dir(chemin & "*.xls") ' Premier fichier

Do While Fichier <> ""
Workbooks.Open Filename:=chemin & Fichier 'charge le classeur
With ActiveWorkbook.Worksheets(1)
'.Range("A2:C5").Copy Workbooks("classeur_steph_solution2").Worksheets(2).Cells(i, 1)
.Range("A2:C5").Copy Workbooks("classeur_steph_solution2").Worksheets(2).Range("A" & i).Resize(i + 3, 2)
.Close savechanges:=False
End With
MsgBox ("pb")
i = Range("A65536").End(xlUp)(2).Select
Fichier = Dir ' Fichier suivant
Loop

End Sub
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
6 août 2014 à 09:43
Bonjour,

1- vérifier que le(s) classeur(s) concerné(s) s'ouvre(nt) bien.
 chemin = "C:\factures"
dans ton cas ne fonctionnera pas. Il faut ajouter le "" en fin de chemin, soit :
chemin = "C:\factures"


2- pas top top :
With ActiveWorkbook.Worksheets(1)
.Range("A2:C5").Copy Workbooks("classeur_steph_solution2").Worksheets(2).Cells(i, 1).Paste
.Range("A65536").End(xlUp).Select
.Close savechanges:=False
End With

A remplacer par :
With ActiveWorkbook
    .Worksheets(1).Range("A2:C5").Copy Workbooks("classeur_steph_solution2").Worksheets(2).Range("A65536").End(xlUp).Offset(1, 0)
    .Close savechanges:=False
End With


=> pas de paste : inutile
=> c'est le workbook que l'on ferme, pas WorkBook.WorkSheets(1)...
=> suppression du i et du Select inutile.

3- Ton code devient donc :
Sub recup()
Dim chemin$, Fichier$, Factures$

Application.ScreenUpdating = False
chemin = "C:\factures" 'saisir le chemin complet du dossier où se trouvent les fichiers
Fichier = Dir(chemin & "*.xls")  ' Premier fichier

Do While Fichier <> ""
  Workbooks.Open Filename:=chemin & Fichier  'charge le classeur
  With ActiveWorkbook
    .Worksheets(1).Range("A2:C5").Copy Workbooks("classeur_steph_solution2").Worksheets(2).Range("A65536").End(xlUp).Offset(1, 0)
    .Close savechanges:=False
  End With
  'MsgBox ("pb")
  Fichier = Dir ' Fichier suivant
Loop

End Sub


4- Si tu le souhaites, tu n'es même pas obligé d'ouvrir tes classeurs... Voir cette astuce.
On peut l'appliquer à ton cas très facilement, si tu le veux...
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
6 août 2014 à 10:27
Bonjour Pijaku,

viens seulement de voir ca:

chemin = "C:\factures" manque "\" a la fin

pour lecture fichier sans ouvrir, il faut que je m'y mette ca doit etre top si pas mal de fichier
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
6 août 2014 à 10:30
Salut f894009,

pour lecture fichier sans ouvrir, il faut que je m'y mette ca doit etre top si pas mal de fichier
Oui. Un gain de temps appréciable.
En plus la méthode décrite est loin d'être aussi complexe qu'une méthode par ADO ou autre connexion...
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
6 août 2014 à 12:17
Re,

En effet, moins complexe que ADO, ayant fait pas mal de programme avec connexion ADO, DAO en VB6, excel et autre, je sais que de temps en temps ca coince pour un truc tout bete
0