importation de données sur feuilles existantes

  • Initiateur de la discussion loic38
  • Date de début
L

loic38

Guest
je cherche à consolider dans une seule feuille des donées provenant d'adresses de cellules d'une foultitude de fichiers excel qui sont censés être identiques
ces fichiers (Devis) sont créés à partir d'un modèle dont le récap s'effectue sur une feuille appelée Page_Garde.
Mais il y a eu plusieurs modèles :

le premier n'avait pas de feuille de Page de Garde
les seconds avait une page de garde mais les données que je cherche sont stockées dans des adresses de cellule différentes
les derniers sont précisément ceux que je veux importer dans ma consolidation

J'ai déjà fait une macro qui recense tous les noms de fichiers excel comprenant des devis

Mais si j'importe chaque devis, je bloque sur certains fichiers qui n'ont pas de page de garde

Question 1 :

comment n'importer que les fichiers devis avec la feuille Page_Garde. Autrement dit dans la liste des fichiers à importer comment exclure ceux dont la feuille Page_Garde n'existe pas ?

Question 2 :

Dans la liste des fichiers utiles, comment exécuter une condition pour selon le type de classeur (modèle Devis 1 ou modèle Devis 2) rechercher les données aux bonnes adresses de cellules.
 
P

Pascal76

Guest
Bonjour Loïc

Une première approche se trouve ICI sur ce lien

Sinon pour ta question 1 et je pense aussi question 2

Une condition du style

for each ws in worksheets
if ws.name ="page_garde then mapageexiste=true
next

et après tu traites tes imports en fonction de la valeur de mapageexiste

Pascal
 
M

michel

Guest
bonsoir Loic ,bonsoir Pascal

pour compléter la reponse de Pascal
dans l'exemple joint , si un classeur contient un onglet nommé "Page_Garde , la valeur de la cellule A1 de ce classeur est
exportée dans la feuille 2 du classeur "FiltrefichierDevis" .
(testé avec XP )

par contre tu n'as pas précisé comment reconnaitre les fichiers de type modèle Devis 1 ou modèle Devis 2


bonne soiree
michel
 

Pièces jointes

  • FiltreFichiersDevis.zip
    31.6 KB · Affichages: 27
L

loic38

Guest
en réalité les deux types de devis se distinguent par leur présentation

ce qui a modifié les adresses de cellules où se trouvent les données

les deux modèles contiennent les mêmes infos mais les emplacements ne sont plus les mêmes

par exemple :
pour le modèle de devis 1 : la dénomination du devis est en D5
pour le modèle devis 2 : elle est en G5

etc..etc

on pourrait concevoir de faire un test sur D5
si D5 n'est pas vide, alors on prend sa valeur, et on traite les 18 autres cellules à importer dans la conso

sinon on va en G5 et on copie/colle les 18 autres
 
M

michel

Guest
Je suis déçu ....déçu , déçu , déçu.....

bonsoir Loic

as tu pris le temps de lire la charte du forum XLD qui etait en lien dans le message de Pascal .

je constate que les formules de politesse ne font pas partie de ton vocabulaire ...c'est bien dommage...


bonne soirée
michel
 
L

loic38

Guest
Re: Je suis déçu ....déçu , déçu , déçu.....

MERCI DE L ENVOI DU FICHIER ZIP JOINT
Cependant je n'ai pas pu utiliser la macro jointe pour les raisons suivantes :

1. je n'ai pas l'expérience d'un grand programmeur VBA et bp d'instructions de la macro me sont totalement incompréhensibles :

par exemple :

Do While Len(Direction) > 0
NbFichiers = NbFichiers + 1
ReDim Preserve Tableau(1 To NbFichiers)
Tableau(NbFichiers) = Direction
Direction = Dir()
Loop


Application.ScreenUpdating = False
Set Cn = CreateObject("ADODB.Connection")
Set Cat = CreateObject("ADOX.Catalog")
Fichier = ThisWorkbook.Path & "\" & Tableau(X)
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier & ";Extended Properties=Excel 8.0;"


ce n'est pas ton apport qui es source de pb, mais mon niveau de compréhension et d'adaptation à la situation

Merci de t'intéresser dans tous les cas à mes questions

NOTA : cette réponse est indépendante du mail sur la charte de XLD

bonne journée
 
M

michel

Guest
bonjour Loic

Direction = Dir(ThisWorkbook.Path & "\*.xls")
Do While Len(Direction) > 0
NbFichiers = NbFichiers + 1
ReDim Preserve Tableau(1 To NbFichiers)
Tableau(NbFichiers) = Direction
Direction = Dir()
Loop

permet de lister les fichiers du repertoire cible . les nom sont enregistrés dans un tableau dynamique nommé"Tableau"



Set Cn = CreateObject("ADODB.Connection")
Set Cat = CreateObject("ADOX.Catalog")
Fichier = ThisWorkbook.Path & "\" & Tableau(X)
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier & ";Extended Properties=Excel 8.0;"
Set Cat.ActiveConnection = Cn
For Each xlSheet In Cat.Tables
If xlSheet.Name = "Page_Garde$" Then
Nb = Nb + 1
ReDim Preserve Tableau2(1 To Nb)
Tableau2(Nb) = Tableau(X)
End If
Next
Set Cn = Nothing: Set Cat = Nothing

permet de controler dans chaque classeur , si un onglet est nommé "Page_Garde" sans ouvrir le classeur . si c'est le cas
le nom du classeur est enregistré dans "Tableau2"


j'espere que cela pourra t'aider .

bon apres midi
michel
lapin4.gif
 

Discussions similaires

Statistiques des forums

Discussions
312 492
Messages
2 088 912
Membres
103 983
dernier inscrit
AlbertCouillard