Besoin d'aide : macro VBA
FloR54
-
michel_m Messages postés 16602 Date d'inscription Statut Contributeur Dernière intervention -
michel_m Messages postés 16602 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous
Je cherche un code en VBA pour une macro pour mon travail.
J'ai un répertoire avec plusieurs classeurs excel. Chaque classeur à un nom différent mais la forme du fichier est le même pour tous (un tableau dans lequel je rentre mes informations).
J'aimerais, à partir d'un autre classeur « recap », récupérer les cellules C6, C81 et C83 de chaque classeur de ce répertoire sans les ouvrir. Ce qui serait génial c'est d'avoir les 3 données de ces 3 cellules, les unes en dessous des autres (donc 3 colonnes et autant de lignes que de classeurs dans le répertoire).
Je n'ai pas de connaissance en VBA et cherche tant bien que mal à comprendre sur les forum comment cela marche. A chaque fois que je teste un code, il y a toujours quelques choses qui ne va pas.
Je serais très reconnaissant aux personnes qui voudront bien m'aider !!
Merci à TOUS
Je cherche un code en VBA pour une macro pour mon travail.
J'ai un répertoire avec plusieurs classeurs excel. Chaque classeur à un nom différent mais la forme du fichier est le même pour tous (un tableau dans lequel je rentre mes informations).
J'aimerais, à partir d'un autre classeur « recap », récupérer les cellules C6, C81 et C83 de chaque classeur de ce répertoire sans les ouvrir. Ce qui serait génial c'est d'avoir les 3 données de ces 3 cellules, les unes en dessous des autres (donc 3 colonnes et autant de lignes que de classeurs dans le répertoire).
Je n'ai pas de connaissance en VBA et cherche tant bien que mal à comprendre sur les forum comment cela marche. A chaque fois que je teste un code, il y a toujours quelques choses qui ne va pas.
Je serais très reconnaissant aux personnes qui voudront bien m'aider !!
Merci à TOUS
9 réponses
Bonjour,
macro à mettre dans un module VBA du classeur recapitulatif
le classeur "recapitatif" et les classeurs source doivent être dans le m^me répertoire
tu n'avais pas précisé dans quelle feuille étaient C6,C81,C83: à adapter dans la macro
tu dis...
Michel
:-x
macro à mettre dans un module VBA du classeur recapitulatif
le classeur "recapitatif" et les classeurs source doivent être dans le m^me répertoire
tu n'avais pas précisé dans quelle feuille étaient C6,C81,C83: à adapter dans la macro
Sub recapituler() Dim lig As Long Dim recap As String, chemin As String, onglet As String Dim fich As String recap = ThisWorkbook.Name onglet = "feuil1" ' A ADAPTER chemin = ThisWorkbook.Path Application.ScreenUpdating = False Range("A2:C1000").ClearContents lig = 2 ChDir chemin fich = Dir("*.xls") While fich <> "" If fich <> recap Then Cells(lig, 1) = ExecuteExcel4Macro("'" & chemin & "\[" & fich & "]" & onglet & "'!R6C3") 'R6C3 <==> C6 Cells(lig, 2) = ExecuteExcel4Macro("'" & chemin & "\[" & fich & "]" & onglet & "'!R81C3") 'R81C3<==>C81 Cells(lig, 3) = ExecuteExcel4Macro("'" & chemin & "\[" & fich & "]" & onglet & "'!R83C3") lig = lig + 1 End If fich = Dir Wend MsgBox "récapitulatif terminé avec succès" End Sub
tu dis...
Michel
:-x
Bonjour,
Comme tu dis que tu ne connaît pas le VBA je vais essayer d'être clair.
Déjà, lire dans un classeur sans l'ouvrir est trop compliquer, les ouvrir et fermer directement pose moins de problème.
Il faut que tout les classeurs à ouvrir aient une feuille avec le même nom.
Marche à suivre...
1°) Sur la feuille de ton classeur Recap où tu veux voir les données tu colle un bouton de la barre d'outils (pas formulaire)
2°) Tu clic droit sur le nom de l'onglet > Visualiser le code.
Dans la fenêtre qui s'ouvre tu colle TOUT le code ci-dessous.
3°) Tu adapte le chemin de ton répertoir.
4°) Tu adapte le nom de la feuille des classeurs à ouvrir.
Si tu à bien tout suivi, les données s'afficheront dans la feuille où tu à mis le bouton.
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Comme tu dis que tu ne connaît pas le VBA je vais essayer d'être clair.
Déjà, lire dans un classeur sans l'ouvrir est trop compliquer, les ouvrir et fermer directement pose moins de problème.
Il faut que tout les classeurs à ouvrir aient une feuille avec le même nom.
Marche à suivre...
1°) Sur la feuille de ton classeur Recap où tu veux voir les données tu colle un bouton de la barre d'outils (pas formulaire)
2°) Tu clic droit sur le nom de l'onglet > Visualiser le code.
Dans la fenêtre qui s'ouvre tu colle TOUT le code ci-dessous.
Option Explicit Private Sub CommandButton1_Click() Dim e As Integer e = LireRepertoir("C:\Le chemin\complet du répertoir\") End Sub 'Obtenir tous les fichiers d'un répertoire. 'Le nom du répertoire source doit être dans Rep Function LireRepertoir(ByVal Rep As String) As Integer Dim Obj, RepP, F, S, sf, F1, Fsous Dim i As Integer, Ext As String Dim Chem As String Dim Lig As Double Dim Wsh As Worksheet Dim WshData As Worksheet Set Wsh = ActiveWorkbook.ActiveSheet Lig = 3 'commence la copie à la ligne 3 Application.EnableEvents = False Application.DisplayAlerts = False Set Obj = CreateObject("Scripting.FileSystemObject") Set RepP = Obj.Getfolder(Rep) Chem = Rep: If Right(Chem, 1) <> "\" Then Chem = Chem & "\" Set F = RepP.Files For Each F1 In F Ext = LCase(Right(F1.Name, 3)) If Ext = "xls" Then 'extension à adapter (en minuscule) Workbooks.Open F1.Name 'Adapter le nom de la feuille où sont les données Set WshData = ActiveWorkbook.Sheets("feuil1") Wsh.Cells(Lig, 1) = F1.Name Wsh.Cells(Lig, 2) = WshData.Range("C6") Wsh.Cells(Lig, 3) = WshData.Range("C81") Wsh.Cells(Lig, 4) = WshData.Range("C83") Lig = Lig + 1 WshData.Parent.Close End If Next F1 Set WshData = Nothing Set Wsh = Nothing Application.EnableEvents = True Application.DisplayAlerts = True End Function
3°) Tu adapte le chemin de ton répertoir.
4°) Tu adapte le nom de la feuille des classeurs à ouvrir.
Si tu à bien tout suivi, les données s'afficheront dans la feuille où tu à mis le bouton.
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Bonjour michel_m
J'ai bien essayé le code mais j'obtiens un résultat étrange.
J'ai plusieurs fois le nom du même fichier qui apparaît et je récupère des noms de cellules que je ne désire pas ?? Je ne sais pas si tu peux y faire quelques choses ?
Flor54
J'ai bien essayé le code mais j'obtiens un résultat étrange.
J'ai plusieurs fois le nom du même fichier qui apparaît et je récupère des noms de cellules que je ne désire pas ?? Je ne sais pas si tu peux y faire quelques choses ?
Flor54
Merci lermite222 pour ton aide.
Je n'ai pas bien compris (je suis un vrai néophite) ce que je dois faire en premier : creer un bouton ??
J'ai été dans outil --> macros --> v.B.E. puis j'ai copié dans un module ton code.
J'ai un message d erreur qui me dit qu il ne peut pas lire le premier fichier de mon repertoire.
Je ne suis pas censé changer "Rep" ?
Est ce que tu as une réponse à cela ?
encore merci
Flor54
Je n'ai pas bien compris (je suis un vrai néophite) ce que je dois faire en premier : creer un bouton ??
J'ai été dans outil --> macros --> v.B.E. puis j'ai copié dans un module ton code.
J'ai un message d erreur qui me dit qu il ne peut pas lire le premier fichier de mon repertoire.
Je ne suis pas censé changer "Rep" ?
Est ce que tu as une réponse à cela ?
encore merci
Flor54
Salut Michel,
Je ne vois pas ce que je pourrais expliquer en plus SUIS LES POSTES UN PAR UN
Pour créer le bouton..
Dans Excel >> Affichage >> Barre d'outils >> cocher : Boite à outils contrôls
Dans cette boite tu sélectionne <Bouton de commande> et tu le colle sur la feuille. RIEN D'AUTRE pour le bouton
Dans cette même boite tu décoche le bouton <Mode création> pour que les poignées du bouton disparaissent.
En suite suis les postes 2,3 etc..
Et ça fonctionne, j'ai tester.
Je ne vois pas ce que je pourrais expliquer en plus SUIS LES POSTES UN PAR UN
Pour créer le bouton..
Dans Excel >> Affichage >> Barre d'outils >> cocher : Boite à outils contrôls
Dans cette boite tu sélectionne <Bouton de commande> et tu le colle sur la feuille. RIEN D'AUTRE pour le bouton
Dans cette même boite tu décoche le bouton <Mode création> pour que les poignées du bouton disparaissent.
En suite suis les postes 2,3 etc..
Et ça fonctionne, j'ai tester.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
déjà : Merci michel_m pour ton aide.
Je ne sais pas pourquoi mais ce n est pas ce à quoi je m'attendais.
Quand j'ouvre le classeur "consolidation" je n'ai pas les valeurs que tu as entré dans les cellules c6, c81, c83 de sv1, sv2, sv3. Ou alors c est que je fais la mauvaise manip. ???
Je ne sais pas isi tu vois ou est mon probleme ?
En tout cas merci !!
flor54
Je ne sais pas pourquoi mais ce n est pas ce à quoi je m'attendais.
Quand j'ouvre le classeur "consolidation" je n'ai pas les valeurs que tu as entré dans les cellules c6, c81, c83 de sv1, sv2, sv3. Ou alors c est que je fais la mauvaise manip. ???
Je ne sais pas isi tu vois ou est mon probleme ?
En tout cas merci !!
flor54
je sais que le travail est tout maché et que je passe pour un c** . Merci lermite222. Quand je clique sur le bouton il me mets erreur d'exécution 1004 ??
Mon premier fichier est introuvable or le chemin est exact et les noms avec. Je suis sur qu'il ya un petit truc simple à faire non ?
en tout cas merci !!
Mon premier fichier est introuvable or le chemin est exact et les noms avec. Je suis sur qu'il ya un petit truc simple à faire non ?
en tout cas merci !!
Bonjour Lermite222
J'ai suivi le protocole que tu m'as donné hier...et ca marche !!
je vois les fichier s'ouvrir et se fermer les uns après les autres et je vois aussi les données s'inscrire sur un classeur à part mais lorsque tous les dossiers ont été ouvert, je ne retrouve pas le tableau récapitulatif.
Où est il ? Où vont les données recueillies ?
J'y suis presque, alors vraiment : un grand merci !!
flor54
J'ai suivi le protocole que tu m'as donné hier...et ca marche !!
je vois les fichier s'ouvrir et se fermer les uns après les autres et je vois aussi les données s'inscrire sur un classeur à part mais lorsque tous les dossiers ont été ouvert, je ne retrouve pas le tableau récapitulatif.
Où est il ? Où vont les données recueillies ?
J'y suis presque, alors vraiment : un grand merci !!
flor54
Re Michel,
Je ne connais pas ce système pour lire des données dans un classeur fermer, toutefois y a comme qui dirait un ti problème,
Pour avoir des données qui s'affiche j'ai changer les adresses comme suit..
J'ai vérifier dans les 3 classeurs j'ai bien des nombres (pas des formules) dans ces cellules.
et il me met
#REF!
Dans toutes le cellules ?
Où est l'erreur ?
A+
Je ne connais pas ce système pour lire des données dans un classeur fermer, toutefois y a comme qui dirait un ti problème,
Pour avoir des données qui s'affiche j'ai changer les adresses comme suit..
If fich <> recap Then Cells(lig, 1) = ExecuteExcel4Macro("'" & chemin & "\[" & fich & "]" & onglet & "'!R6C1") 'R6C3 <==> C6... pour A6 Cells(lig, 2) = ExecuteExcel4Macro("'" & chemin & "\[" & fich & "]" & onglet & "'!R7C1") 'R81C3<==>C81... pour A7 Cells(lig, 3) = ExecuteExcel4Macro("'" & chemin & "\[" & fich & "]" & onglet & "'!R8C1") ... Pour A8 lig = lig + 1 End If
J'ai vérifier dans les 3 classeurs j'ai bien des nombres (pas des formules) dans ces cellules.
et il me met
#REF!
Dans toutes le cellules ?
Où est l'erreur ?
A+
Ca y est, ça fonctionne mais c'est pas tellement évident.
Ca n'est pas repris (apparement) par FloR54, mais ça aura quand même servit.
Merci et A+
Ca n'est pas repris (apparement) par FloR54, mais ça aura quand même servit.
Merci et A+
Salut Lermite,
La syntaxe de cette macro, dite de Walkenbach le grand Sachem mondial Excel, est effectivement pointilleuse (pour rester poli) mais très efficace et rapide lorsqu'il y a peu de cellules à copier dans des fichiers devant rester fermés comme le demandait floxxx... Elle est d'ailleurs souvent utilisée.
cordialement
Michel
La syntaxe de cette macro, dite de Walkenbach le grand Sachem mondial Excel, est effectivement pointilleuse (pour rester poli) mais très efficace et rapide lorsqu'il y a peu de cellules à copier dans des fichiers devant rester fermés comme le demandait floxxx... Elle est d'ailleurs souvent utilisée.
cordialement
Michel