Pour les experts du ADO

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Byfranck

XLDnaute Occasionnel
Bonjour à tous,

un deuxième post ouvert en même temps .. c'est pas les vacances pour tout le monde 😉

Une nouvelle fonctionn alité qu'on me demande d'ajoter à aux Usf de ma base de donnée:

Il faudrait que je puisse extraire toutes les cellules des feuil1 des tous les fichiers Excel sauvegardé dans TOUS les sous répertoires à partir de:
C:\ReunionsHebdo (c'est la situation en France)

Pour une autre fonction j'arrive à lire dans le sous répertoire dans lequel je me trouve et seulement avec un niveau de sous répertoire.
Dans ce nouveau cas il faut que je puisse lancer l'apli de n'importe quel endroit du disque et que 'j'aspire' toutes les feuil1 de tous les Excel de tous les sous répertoires (on a testé sur 150 fichiers le nom est toujours Feuil1 .. en tous cas en France!).

Dans C:\Reunionhebdoj j'ai des sous répertoires avec des années, dans les années il y a 12 mois, dans chaque mois entre 1 et 5 semaines et dans chaque directory avec le num de semaine il y a 2 ou 3 fichiers Excel dont les noms ne sont jamais identiques (pour celui qui m'interesse).
le fichier Excel qui m'interesse a par contre toujours en A8 le texte: "ODJ"
Donc en plus il faut tester s'il y a bien ODJ avant de récupérer les données de la Feuil1.
Une fois aspiré, il faut vider la Feuil1 des fichiers aspirés.
Juste pour rire: parfois il y a des fichiers qui nous interessent (ceux de la semaine qui ont été enregistré sous le mois au lieu d'être plus bas sous la semaine
Beau challenge non?

Si quelqu'un sait faire ça!!! 😕
A mon avis il ne faut pas lire le nom des répertoires (suivant la filliale c'est en anglais, en allemand, Français, Italien ...) il faudrait donc que j'entre dans la macro le premier niveau de répertoire où il faut travailler et qu'en suite cela se débrouille tout seul en lisant dans les fichiers fermés et en testant sur A8


La bouteille est lancée à la mer ... s'il y ades courrageux qui ne sont pas à la plage ... où s'ils sont à la plage et qu'ils voient passer la bouteille !!! 😀


Cordialement
Franck
 

Pièces jointes

Re : Pour les experts du ADO

Bonjour ByFranck,

C'est chouette Excel, je suis le premier à le dire,
mais vous avez pensé à utiliser une "Base de données" ? genre assez gros (Oracle, SQL Server...) qui pourrait faire des requêtes sur beaucoup de données, comme tu as l'air d'en avoir besoin ?
Parce que si tu attend qu'il cherche dans 150 classeurs sur ton disque et qu'il te ramène le contenu de toutes les feuil1 (je n'ai pas bien compris où d'ailleurs) je te conseilles de te prévoir une activité sur un autre poste de travail, le tiens n'est pas prêt d'être disponible 😉
 
Re : Pour les experts du ADO

Bonsoir tototiti,

Hé oui ... la dure vie des PME ... qui ouvrent des bureau sans se structurer ..

En fait la "moulinette" devrait tourner une fois dans chaque service, il y a en gros une dizaine d'années à explorer x 52 semaines au maxi = 500 fichiers
Les Excel dont il faut extraire les donnéee de feuil1 ont au maxi une 20ene de lignes remplies (du texte sur 2 colonnes).
De toute façon même si ça prend qu temps c'est pas si grave... parceque l'autre solution c'est de le faire à la main !!!! en gros 500 fichiers par agence ... 🙁

@+
 
Re : Pour les experts du ADO

Re...
Bonjour ByFranck,

C'est chouette Excel, je suis le premier à le dire,
mais vous avez pensé à utiliser une "Base de données" ? genre assez gros (Oracle, SQL Server...) qui pourrait faire des requêtes sur beaucoup de données, comme tu as l'air d'en avoir besoin ?
Parce que si tu attend qu'il cherche dans 150 classeurs sur ton disque et qu'il te ramène le contenu de toutes les feuil1 (je n'ai pas bien compris où d'ailleurs) je te conseilles de te prévoir une activité sur un autre poste de travail, le tiens n'est pas prêt d'être disponible 😉
Approuvé !
Ça me fait penser au titre d'un bon bouquin de Roland MORENO :
_
attachment.php
_
C'est peut-être d'actualité...​
Bonne soirée à vous.
ROGER2327
 

Pièces jointes

  • TBA_MORENO.jpg
    TBA_MORENO.jpg
    13.5 KB · Affichages: 168
Re : Pour les experts du ADO

Il y a 2 gros problèmes 2 grosses macros ;

Le 1er (ou 1er macros) est de parcourir l'arboresence de tous tes répertoire et sous-répertoires

La 2 ème macro je rejoins l'avis de tototiti2008 devra comporter des requetes SQL notamment une recherche sur la chaine de caractère "ODJ" .A l'inverse de lui , je pense que access ou oracle ne sont pas nécessaires .

Pour t'aider jette un oeil dans le menu donnée/source de donnée externe
et sort la barre d'outils "external data source" ou quelque chose du genre en français .

Et interresses-toi aussi à la fenetre "Microsoft Query" qui te permettra de manipuler tes tables
(avec ecriture de requête SQL automatique)

voici une amorce de code pour te connecter à tes fichiers excels à la sauce TCD ;
mais le principe de la connection externe reste le même ...

Bon courage parce que ce que tu demandes est un peu raide ...

Code:
Sub Solution2()
Dim pt As PivotTable
 
 With ActiveWorkbook.PivotCaches.Add(SourceType:=xlExternal)
        .Connection = _
        "ODBC;DSN=Test;DBQ=C:\Documents and Settings\a\Bureau\Test.xls;DefaultDir=C:\;DriverId=790;FIL=excel 8.0;MaxBufferSize=2048;PageTimeout=5;"
        .CommandType = xlCmdSql
        .CommandText = Array( _
        "SELECT `Liste$`.Date, `Liste$`.Agc, `Liste$`.Surfaces" & Chr(13) & "" & Chr(10) & "FROM `C:\Test`.`Liste$` `Liste$`" _
        )
        .CreatePivotTable TableDestination:= _
        "'[Création_TCD.xls]Sheet1'!R3C1", TableName:="PivotTable1", _
        DefaultVersion:=xlPivotTableVersion10
    End With
                      
                                    
End Sub

nota :ci dessous on observe que la requete SQL est integrés dans le code VBA

Code:
        "SELECT `Liste$`.Date, `Liste$`.Agc, `Liste$`.Surfaces" & Chr(13) & "" & Chr(10) & "FROM `C:\Test`.`Liste$` `Liste$`"
 
Re : Pour les experts du ADO

Bonjour a tous

Je te prose cet excellent Fichier , pris sur ce site

Vois si cela te convient
Cordialement
 

Pièces jointes

Re : Pour les experts du ADO

Bonjour à tous,

je n'ai pas regardé les codes proposés mais l'objet FileSearch permet de faire des recherches de fichiers dans tous les sous-dossiers également. Malheureusement, il n'existe plus en XL 2007. Quelle est ta version d'Excel ?
 
Re : Pour les experts du ADO

Bonjour Franck, le fil,

Voici un code qui copie la première feuille si celle-ci à la cellule A2 non vide de tous les fichiers excel d’un répertoire ainsi que ses sous-répertoires, dans le fichier courant.

Code:
[SIZE=3][FONT=Times New Roman]Sub rechfich()[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]Dim XFile As Workbook[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]Application.ScreenUpdating = False[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]With Application.FileSearch[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    .LookIn = "D:\VBA\Forum Excel"[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    .SearchSubFolders = True[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    .Filename = "*.xls"[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    .FileType = msoFileTypeExcelWorkbooks[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    If .Execute > 0 Then[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]        For i = 1 To .FoundFiles.Count[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]            Set XFile = GetObject(.FoundFiles(i))[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]            If XFile.Sheets(1).Range("A2").Value <> "" Then XFile.Sheets(1).Copy after:= ThisWorkbook.Sheets(Sheets.Count)[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]            XFile.Close[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]        Next i[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    End If[/FONT][/SIZE]
[FONT=Times New Roman][SIZE=3]End With[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3] [/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]End Sub[/SIZE][/FONT]

Si ça peut t'aider.
 
Re : Pour les experts du ADO

Bonjour Tototiti et Skoobi,

Pour tototiti : je suis sous Excell 2003.

Skoobi j'ai testé ton code mais ça plante sur:
Code:
            Set XFile = GetObject(.FoundFiles(i))

de mon côté je fais des essai sur la base du fichier joint par Jean-Marcel et je ne suis pas loin d'y arriver.
Un prob tout de même:
j'ouvre les fichiers avec :
Code:
       Workbooks.Open Filename:=FileItem 
'activation de la feuille
       ActiveSheet.Visible = True

          ActiveCell.Columns("A:X").EntireColumn.Select
    Selection.Delete Shift:=xlToLeft
(Pour l'instant je me contente de supprimer des colonnes pour tester plus vite)

el là mauvaise surprise: comme il y a des classeurs avec macros qui ouvrent un Usf plein écran, je suis obligé de cliquer sur le bouton "accès feuilles" qu'il y a dans ces Usf pour continuer l'exécution.


Y a t-il moyen d'accéder à une feuille dont on connait le nom et la modifier sans ouvrir le classeur?
(c'est un peu ce que j'ai espéré en voyant le code de Skoobi et je me suis jetté dessus comme un mort de faim!)
Autre idée: désactiver les macros des fichier que j'ouvre à distance?

Cordialement
 
Dernière édition:
Re : Pour les experts du ADO

Re,

Bonjour Tototiti et Skoobi,

Pour tototiti : je suis sous Excell 2003.

Skoobi j'ai testé ton code mais ça plante sur:
Code:
            Set XFile = GetObject(.FoundFiles(i))

Ah bon, bizarre...
Un point à éclaircir: tu veux modifier les fichiers que tu consultes? car dans ce cas mon code ne marchera pas car il ne fait que l'ouvrir pour en récupérer ce que l'on veut et le coller dans le fichier source.
 
Re : Pour les experts du ADO

Bonsoir à tous

pas tout suivi, mais à tout hasard, une ligne de code pour désactiver les macros événementielles, à placer avant l'ouverture du fichier en question :

Code:
Application.EnableEvents = False

pour les réactiver, en fin de procédure :
Code:
Application.EnableEvents = True

bonne soirée
@+
 
Re : Pour les experts du ADO

Bonsoir Pierrot ...
Hou lala dangereux ces codes !!!

Code:
Application.EnableEvents = Falsepour les réactiver, en fin de procédure :


Application.EnableEvents = True

ma macro a planté 2 lignes après la désactivation des macros de l'autre fichier... (une erreur dans mes codes)
Ben ça marche bien ! pour réactiver l'exécution des macro du fichier que je voulais ouvrir il a fallu que je fasse executer Application.EnableEvents = True depuis un autre fichier !


Je vais y aller doucement!

pour l'instant je butte sur le fait que la Feuil1 à ouvrir est une feuille masquée..
ActiveSheet.Visible = True
Sheets("Feuil1").visible = True
ça marche pas ...

@+
bonne soirée
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Personal.xlsb
Réponses
4
Affichages
259
Réponses
4
Affichages
119
Réponses
5
Affichages
215
Retour