VBA liste fichiers avec informations
Fermé
Michel
-
30 juin 2016 à 18:38
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 5 juil. 2016 à 16:04
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 5 juil. 2016 à 16:04
A voir également:
- VBA liste fichiers avec informations
- Liste déroulante excel - Guide
- Entrer les informations d'identification reseau - Guide
- Liste déroulante en cascade - Guide
- Wetransfer gratuit fichiers lourd - Guide
- Renommer plusieurs fichiers en même temps - Guide
10 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
4 juil. 2016 à 11:26
4 juil. 2016 à 11:26
Excusez moi d'avoir dérangé en essayant d'aider
tyranausor
Messages postés
3545
Date d'inscription
jeudi 6 août 2009
Statut
Membre
Dernière intervention
1 avril 2022
2 033
30 juin 2016 à 19:04
30 juin 2016 à 19:04
Bonjour, avec ton fichier contenant la macro et un des fichiers à vérifier (sans données perso) on pourrait t'aider. Tu compresse le tout et utilise cjoint.com pour le transmettre
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 1/07/2016 à 12:30
Modifié par michel_m le 1/07/2016 à 12:30
Bonjour,
EDIT: 12,30H
Pour travailler sans ouvrir les classeurs, il faut qu'il y ait une cellule commune qui dise 1 ou 2 suivant l'option bouton activée.(dans "propriétés")
mais j'en ai pas vu dans tes classeurs
Donc, tu vois le boulot...
mais si on a cette cellule "1-2" toujours à la m^me adresse on n'a pas besoin d'ouvrir les fichiers en utilisant une macro XL4
un exemple de cette macro XL4 pour le principe (syntaxe à aménager au cas par cas)
de +,
si tu boucles sur tous les classeurs sources dans le dossier, pourquoi les énumérer dans ton recap ?
Michel
EDIT: 12,30H
Pour travailler sans ouvrir les classeurs, il faut qu'il y ait une cellule commune qui dise 1 ou 2 suivant l'option bouton activée.(dans "propriétés")
mais j'en ai pas vu dans tes classeurs
Donc, tu vois le boulot...
mais si on a cette cellule "1-2" toujours à la m^me adresse on n'a pas besoin d'ouvrir les fichiers en utilisant une macro XL4
un exemple de cette macro XL4 pour le principe (syntaxe à aménager au cas par cas)
Cells(2, 2) = ExecuteExcel4Macro("'" & chemin & "\[source.xls]Feuil1'!R2C1") 'R2C1=A2
de +,
si tu boucles sur tous les classeurs sources dans le dossier, pourquoi les énumérer dans ton recap ?
Michel
tyranausor
Messages postés
3545
Date d'inscription
jeudi 6 août 2009
Statut
Membre
Dernière intervention
1 avril 2022
2 033
2 juil. 2016 à 00:15
2 juil. 2016 à 00:15
Bonjour, je pense plutôt à avoir dans un cellule du fichier à vérifier un booléen (vrai/faux ou complet/incomplet) car il n'est pas possible de savoir, sans ouvrir le fichier, si un checkbox est cochée
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
tyranausor
Messages postés
3545
Date d'inscription
jeudi 6 août 2009
Statut
Membre
Dernière intervention
1 avril 2022
2 033
4 juil. 2016 à 14:37
4 juil. 2016 à 14:37
Bonjour, si tu préfère, la macro peut ouvrir chaque classeur pour rechercher l'information ce qui évite par ailleurs e travailler avec des fichiers fermé ce qui complique moins les choses! Après, il faudra que tu dise si tu veux voir ou non les opérations à l’écran c'est-à-dire avoir un aperçu en direct
Et bien, si c'est possible en ouvrant chaque fichier d'aller rechercher l'info, alors ok :)
Et pour voir ou non les opérations à l'écran, je ne sais pas ce qui est le plus compliqué à coder ...
Et j'ai remarqué que ce code fonctionne :
Est-ce que ça veut dire que les cases option renvoient une information? Dans ce cas là, je pourrais l'adapter à mon problème :
Pour chaque fichier excel dans le dossier "C:\Users\...\...\TEST\"
Ecrire le nom du fichier dans la colonne A
Ouvrir le fichier
Si case.OptionButtons(1) cochée alors
Activer "Fichier liste"
Ecrire dans colonne B "Fait"
Sinon si case.OptionButtons(2) cochée alors
Activer "Fichier liste"
Ecrire dans colonne B "Pas Fait"
Fermer le fichier
... Vous pensez cela réalisable?
Merci beaucoup pour votre temps!
Et pour voir ou non les opérations à l'écran, je ne sais pas ce qui est le plus compliqué à coder ...
Et j'ai remarqué que ce code fonctionne :
Sub Test_case_option()
Dim NomOnglet As String
NomOnglet = ActiveWorkbook.ActiveSheet.Name
With Sheets(NomOnglet)
Select Case xlOn
Case .OptionButtons(1).Value
MsgBox "case Fait sélectionnée"
Case .OptionButtons(2).Value
MsgBox "case Pas Fait sélectionnée"
End Select
End With
End Sub
Est-ce que ça veut dire que les cases option renvoient une information? Dans ce cas là, je pourrais l'adapter à mon problème :
Pour chaque fichier excel dans le dossier "C:\Users\...\...\TEST\"
Ecrire le nom du fichier dans la colonne A
Ouvrir le fichier
Si case.OptionButtons(1) cochée alors
Activer "Fichier liste"
Ecrire dans colonne B "Fait"
Sinon si case.OptionButtons(2) cochée alors
Activer "Fichier liste"
Ecrire dans colonne B "Pas Fait"
Fermer le fichier
... Vous pensez cela réalisable?
Merci beaucoup pour votre temps!
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 4/07/2016 à 17:48
Modifié par michel_m le 4/07/2016 à 17:48
re,
dans tes classeurs source tu n'as pas besoin de tester les 2 boutons
quand tu en actives 1, automatiquement, l'autre se désactive...
Si case.OptionButtons(1) cochée alors
Activer "Fichier liste"
Ecrire dans colonne B "Fait"
Sinon
Activer "Fichier liste"
Ecrire dans colonne B "Pas Fait"
150 fichiers: 1 minute ----> 2000 fichiers >=13 mn....alors qu'on devrait parler en secondes
cependant:on pourrait quand m^me gagner pas mal de temps avec des variables- tableaux: j'va regarder çà
ce qui est très lent avec VBA-excel c'est les allers et retours entre le processeur, la ram, la carte graphique et l'écran (pour l'anecdocte, taper la lettre A à l'écran demande > 100 instructions binaires) et ouvrir un classeur est toujours très lent car c'est un objet complexe. c'est pour cela que pour un grand nombre de classeurs, on travaille en fichiers fermés.
On paye là l'erreur grave de conception du classeur ( oubli de la cellule liée)
dans tes classeurs source tu n'as pas besoin de tester les 2 boutons
quand tu en actives 1, automatiquement, l'autre se désactive...
Si case.OptionButtons(1) cochée alors
Activer "Fichier liste"
Ecrire dans colonne B "Fait"
Sinon
Activer "Fichier liste"
Ecrire dans colonne B "Pas Fait"
150 fichiers: 1 minute ----> 2000 fichiers >=13 mn....alors qu'on devrait parler en secondes
cependant:on pourrait quand m^me gagner pas mal de temps avec des variables- tableaux: j'va regarder çà
ce qui est très lent avec VBA-excel c'est les allers et retours entre le processeur, la ram, la carte graphique et l'écran (pour l'anecdocte, taper la lettre A à l'écran demande > 100 instructions binaires) et ouvrir un classeur est toujours très lent car c'est un objet complexe. c'est pour cela que pour un grand nombre de classeurs, on travaille en fichiers fermés.
On paye là l'erreur grave de conception du classeur ( oubli de la cellule liée)
tyranausor
Messages postés
3545
Date d'inscription
jeudi 6 août 2009
Statut
Membre
Dernière intervention
1 avril 2022
2 033
4 juil. 2016 à 15:50
4 juil. 2016 à 15:50
application.screenupdating=false signifie que l'écran ne se rafraichit pas, pas de mise à jour. Autrement dit, tu ne verras pas la macro travailler
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
5 juil. 2016 à 07:15
5 juil. 2016 à 07:15
Bonjour
proposition: 0,4 secondes pour 3 classeurs :-/
(extrapolation: pour 150 classeurs: 20 secondes au lieu de 60....bof!!!)
http://www.cjoint.com/c/FGffkEa5gst
proposition: 0,4 secondes pour 3 classeurs :-/
(extrapolation: pour 150 classeurs: 20 secondes au lieu de 60....bof!!!)
http://www.cjoint.com/c/FGffkEa5gst
Option Explicit
'----------------------------------------------------------
Sub recapituler_etats()
Dim T_etats, Chemin As String
Dim Fichier As String, Cptr As Integer
Dim Start As Single
Start = Timer 'mesure durée exécution _
à supprimer après essais
'-----------------------------------initialisations
'fige défilement écran: confort, rapidité
Application.ScreenUpdating = False
With Sheets("feuil1")
.Range("A2:B5000").Clear 'nettoyage
'préparation tablo fichier -état
ReDim T_etats(1 To 5000, 1 To 2)
'emplacement des fichiers d'états A ADAPTER
Chemin = ThisWorkbook.Path & "\" & "fichiers" & "\"
'------------------------------recherche etat dans les fichiers
'déplacement dans le dossier des classeurs-état
ChDir Chemin
Fichier = Dir(Chemin & "*.xls")
While Fichier <> ""
Cptr = Cptr + 1
Workbooks.Open (Fichier)
'mémorisation du nom de classeur
T_etats(Cptr, 1) = Fichier
'mémorisation de l'état du classeur
With ActiveSheet
Select Case xlOn
Case .OptionButtons(1).Value
T_etats(Cptr, 2) = "fait"
Case .OptionButtons(2).Value
T_etats(Cptr, 2) = " pas fait"
End Select
End With
ActiveWorkbook.Close
Fichier = Dir
Wend
'----------------------Récapitulatif de l'état par classeur
With .Range("A2").Resize(Cptr, 2)
.Value = T_etats
.Borders.Weight = xlThin
End With
End With
'a supprimer après essais
Application.ScreenUpdating = False
MsgBox "durée: " & Timer - Start & " secondes."
End Sub
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 5/07/2016 à 09:12
Modifié par michel_m le 5/07/2016 à 09:12
re moi,
pour le fun, je suis tombé à 3/100 de seconde pour les 3 fichiers...
si ca t'intéresse tu fais signe
attention dans ton classeur "135" il ya une discordance ente le nom du fichier er le nom de l'onglet : manque un espace dans la parenthèse du nom de fichier :-(
présentation de la bidouille:
2 classeurs: 1 qui construit la cellule liée (c'est long mais on le fait qu'une fois) et à prévoir pour de nouveaux classeurs (peut-^tre créer un modèle).
une fois créée la cellule liée,L'autre exécute la macro xl4 sans ouvrir les fichiers. de plus le code est + simple (au passage: toujours tourner 7 fois la souris sur le tapis avant de .... etc)
calcul théorique pour 2000 lignes= 20 secondes au lieu de 13 minutes prévues au départ
Michel
pour le fun, je suis tombé à 3/100 de seconde pour les 3 fichiers...
si ca t'intéresse tu fais signe
attention dans ton classeur "135" il ya une discordance ente le nom du fichier er le nom de l'onglet : manque un espace dans la parenthèse du nom de fichier :-(
présentation de la bidouille:
2 classeurs: 1 qui construit la cellule liée (c'est long mais on le fait qu'une fois) et à prévoir pour de nouveaux classeurs (peut-^tre créer un modèle).
une fois créée la cellule liée,L'autre exécute la macro xl4 sans ouvrir les fichiers. de plus le code est + simple (au passage: toujours tourner 7 fois la souris sur le tapis avant de .... etc)
calcul théorique pour 2000 lignes= 20 secondes au lieu de 13 minutes prévues au départ
Michel
ah oui effectivement ce serait vraiment plus pratique... Je vais réfléchir à une macro qui construirait des cellules liées aux OptionsButton!
Sinon j'ai essayé avec les 2000 fichiers et j'obtient le message d'erreur suivant :
je ne comprends pas car le chemin est bon et le fichier s'y trouve...
Je vais chercher d'où peux venir le problème!
Merci beaucoup pour le temps que tu m'as accordé :)
Sinon j'ai essayé avec les 2000 fichiers et j'obtient le message d'erreur suivant :
Erreur d’éxécution’1004’ :
’nom_d'un_des_fichiers.xls’ introuvable. Vérifiez l’orthographe du nom du classeur et la validité de l’emplacement.
Si vous essayez d’ouvrir le fichier à partir de la liste des fichiers les plus récents, assurez-vous que le fichier n’a pas été renommé, déplacé ou supprimé.
je ne comprends pas car le chemin est bon et le fichier s'y trouve...
Je vais chercher d'où peux venir le problème!
Merci beaucoup pour le temps que tu m'as accordé :)
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
>
Michel
Modifié par michel_m le 5/07/2016 à 10:57
Modifié par michel_m le 5/07/2016 à 10:57
ci joint les 2 macros en question: "créer_cellule" et "recap_vite"
http://www.cjoint.com/c/FGfiOSYa1it
tu dis le temps por récapituler tes 2000 classeurs
pour le bug, je ne sais pas...
mais chez les 3 classeurs sont en xlsx et dans les macros en .xls: il faudrait que ca soit la m^me chose et éventuellement que tu mettes les classeurs avec le m^me suffixe et modifier les macros
http://www.cjoint.com/c/FGfiOSYa1it
tu dis le temps por récapituler tes 2000 classeurs
pour le bug, je ne sais pas...
mais chez les 3 classeurs sont en xlsx et dans les macros en .xls: il faudrait que ca soit la m^me chose et éventuellement que tu mettes les classeurs avec le m^me suffixe et modifier les macros
Crois-tu que c'est possible de récupérer le nom du premier onglet d'un fichier excel fermé?
J'ai bien essayé ça :
mais ça me dit que Onglet est égal à "Feuil1" ... il faudrait préciser que
je cherche encore, je cherche...
J'ai bien essayé ça :
Onglet = Sheets(1).Name
Etat = ExecuteExcel4Macro("'" & Chemin & "\[" & Fich & "]" & Onglet & "'!R2C52")
mais ça me dit que Onglet est égal à "Feuil1" ... il faudrait préciser que
Onglet = Sheets(1).Name 'de chaque Fich
je cherche encore, je cherche...
tyranausor
Messages postés
3545
Date d'inscription
jeudi 6 août 2009
Statut
Membre
Dernière intervention
1 avril 2022
2 033
5 juil. 2016 à 12:35
5 juil. 2016 à 12:35
Bonjour, je viens avec une autre propositions avec des boutons radio en ActiveX avec une cellule liée indiquant l'état.
http://www.cjoint.com/c/FGfkEftcigB
Tu me diras ce que tu en pense
http://www.cjoint.com/c/FGfkEftcigB
Tu me diras ce que tu en pense
4 juil. 2016 à 11:33
Désolé de ne pas avoir répondu, ce n'est pas correct... mais je continuais d'essayer d'utiliser le morceau de code que tu m'as donné. Et surtout de comprendre comment il fonctionne..
Modifié par michel_m le 4/07/2016 à 15:43
tu peux bosser sur une seule case d'option; par ex case d'option 1 qui revoie "fait" si le bouton radio est activé
mais ca va ^tre très long
en début de macro n'oublie pas de mettre quand m^me cette ligne
maintenant, si toi ou tes collègues mettent à jour les "fait-pas fait" assez souvent, tu aurais peut-^tre intérêt à faire une macro, qui une bonne fois pour toutes sur les 500 classeurs, créerait une cellule liée commune aux 2 options. l'investissement en temps serait égal à a peu près la m^me chose que chaque mise à jour
un exemple de recherche rapide et simple malgré les dires de tyrannausor avec une macroXL4 sans ouvrir les fichiers.
http://www.cjoint.com/c/FGenKG2LXst
nota: extraire le zip et non l'ouvrir
4 juil. 2016 à 15:44
au final maintenant, j'ai près de 2000 fichier excel à classer ... et je viens de faire le test de ma macro, elle liste 150 fichier en environ 1 min. Comme j'ai repris des morceaux de codes un peu partout sur les forums, je pense que j'ai beaucoup de lignes inutiles et qu'il y a beaucoup plus simple... mais bon on met le fichier à jour seulement 1 fois par semaine donc ça devrait aller...
peux-tu m'expliquer ce que fait :
?
Sinon, je pense que je vais encore chercher un petit peu à alléger la macro...
Merci infiniment de ton temps!