Macro d'extraction multi classeurs multi onglets

Bonjour,

L'idée est de récupérer la même cellule dans tous les onglets dans tous les dossiers.

Le chemin de dossier est E:\DOC SERVICES\Equipe 1\Mme/Mr 001\2013\feuilles frais 2013.xlsx puis dans l'onglet janvier $J$39

Vous l'avez compris il y a les douze mois, multiplié par le nombre salariés.

Yvouille m'a déjà pas mal dépatouillé lors de précédente demande de ce type...

Si quelqu'un ce sens, il ne faut pas hésiter. J'ai laissé dans le fichier les précédente macro de Yvouille que je n'arrive pas à adapter à ce nouveau besoin.

Je pensai faire avec la fonction indirect mais avec les classeurs fermés c'est proscrit... J'ai cependant structuré le doc pour que le chemin du dossier se renseigne avec les infos dans les colonnes A et B et la ligne 4.

Cordialement,

Leakim

81kms-2013.xlsm (39.79 Ko)

Bonjour,

tu as essayé une formules de liaison ?

='D:\tmp\ccm\[Classeur2.xlsx]JANVIER'!$B$3

Tu ouvres un classeur pour la faire, puis tu le fermes pour avoir l'écriture complète. Plus qu'à remplacer les parties variables.

ou si c'est un tableau avec des titres de lignes (ou tout simplement si tu peux ajouter un titre à gauche de ta valeur à récupérer) tu peux aussi utiliser recherchev() sur classeur fermé.

Ex pour récupérer B3:

=RECHERCHEV("Titre_que_tu_as_mis_en_A3";'D:\tmp\ccm\[Classeur2.xlsx]JANVIER'!$A$3:$B$3;2;FAUX)

eric

Bonjour,

Salut Eriiic, je dois t'avouer que je n'y avais pas pensé... et c'est sûrement parce que ne savais pas que recherchev() fonctionne en classeur fermé.

Je tente.

Si un vbaiste veux tenter la macro ?

Cordialement,

Leakim

Bonjour,

avant le recherchev() tu as la formule de liaison toute simple proposée en premier vu que c'est une cellule bien précise que tu veux.

Et si tu tiens absolument au vba, bien que je pense que ça sera moins rapide dans ce cas, tu peux tester ça :

Sub recup()
    'E:\DOC SERVICES\Equipe  1\Mme/Mr 001\2013\feuilles frais 2013.xlsx
    Const chemin1 As String = "'E:\DOC SERVICES\"
    Const annee As String = "2013"
    Dim derlig As Long, lig As Long, col As Long
    Dim fichier As String
    For lig = 6 To Cells(Rows.Count, 1).End(xlUp).Row
        For col = 3 To 14
            fichier = chemin1 & Cells(lig, 1) & "\" & Cells(lig, 2) & "\" & annee _
                        & "\[feuilles frais " & annee & ".xlsx]" _
                        & Cells(4, col) & "'!$J$39"
            Cells(lig, col) = ExecuteExcel4Macro(fichier)
        Next col
    Next lig
End Sub

A tester.

Si pb contrôler si fichier est fabriqué correctement.

eric

Bonjour,

Merci Eriiic

j'ai un bug

Sub recup()
    'E:\DOC SERVICES\Equipe  1\Mme/Mr 001\2013\feuilles frais 2013.xlsx
   Const chemin1 As String = "'E:\DOC SERVICES\"
    Const annee As String = "2013"
    Dim derlig As Long, lig As Long, col As Long
    Dim fichier As String
    For lig = 6 To Cells(Rows.Count, 1).End(xlUp).Row
        For col = 3 To 14
            fichier = chemin1 & Cells(lig, 1) & "\" & Cells(lig, 2) & "\" & annee _
                        & "\[feuilles frais " & annee & ".xlsx]" _
                        & Cells(4, col) & "'!$J$39"
            Cells(lig, col) = ExecuteExcel4Macro(fichier)
        Next col
    Next lig
End Sub

Je seche

Leakim

Bonjour,

Je tente avec la formule mais N/A#

Qu'est ce qui ne va pas dans la rédaction de mon adresse ?

=RECHERCHEV($C$2;'E:\DOC SERVICES\"&$A6&"\"&$B6&"\2013\[feuilles de frais 2013.xlsx]"&C$4&"'!$H$39:$J$39;3;FAUX)

Sachant que si mon fichier est ouvert

=RECHERCHEV($C$2;INDIRECT("'E:\DOC SERVICES\"&$A6&"\"&$B6&"\2013\[feuilles de frais 2013.xlsx]"&C$4&"'!$H$39:$J$39");3;FAUX)

La formule fonctionne avec indirect() mais même problème d'ouverture de fichier

Leakim

j'ai un bug

Pour la macro j'ai fait le fainéant, désolé.

J'ai mis la référence en style A1, mais il la faut absolument en R1C1.

Donc & "'!R39C10" à la fin, si je compte bien.

Dans la 1ère réponse j'avais démarré par :

tu as essayé une formules de liaison ?

='D:\tmp\ccm\[Classeur2.xlsx]JANVIER'!$B$3

Au post suivant je t'ai attiré l'attention dessus car tu parlais uniquement du recherchev()

Et là, à nouveau, tu occultes complètement cette possibilité, pourtant la plus simple. Lève un peu le nez du guidon, je n'en parlerai pas une 4ème fois.

Maintenant ton adresse est assez longue, donc compliquée. Que ce soit pour une macro ou une formule, à toi de t'arrêter dessus et de la comparer caractère par caractère avec la réalité. Il n'y a que toi qui puisse faire ça.

eric

Re,

Tu as raison il n'y a que moi qui puisse faire le comparatif, et bien c'est ce que j'ai fait... donc

Tu évoques la formule de liaison, je pensé que c'était ça que je faisais avec

=RECHERCHEV($C$2;'E:\DOC SERVICES\"&$A6&"\"&$B6&"\2013\[feuilles de frais 2013.xlsx]"&C$4&"'!$H$39:$J$39;3;FAUX)

Je vais cherche sur la toile mais tu peux peut-être m'en dire plus.

Je regarde pour la macro.

Cordialement,

Leakim

tu as essayé une formules de liaison ?

='D:\tmp\ccm\[Classeur2.xlsx]JANVIER'!$B$3

Tu ouvres un classeur pour la faire, puis tu le fermes pour avoir l'écriture complète. Plus qu'à remplacer les parties variables.

Tu saisis "=", tu vas cliquer sur J39 de ton autre classeur, tu valides et tu fermes l'autre classeur.

Mais peut-être que je me suis trop avancé vu que je ne vois pas de " ", on ne peut sans doute pas la rendre variable.

Mais là je dois m'absenter.... En attendant contrôle le chemin fourni pour recherchev() ou/et la macro. Il faut qu'il soit existant en fonction de l'exemple que tu as fourni.

eric

Re,

Je ne sais pas si finalement on peux combiner des variable dans une liaison hormis avec indirect() donc quid des classeurs fermés.

J'ai modifer la référence dans la macro et nickel

J'ai pu faire le rapatriement des mes données.

La question sur la fonction de liaison reste entière... Mais là je dois indiquer résolu.

Je reviendrais peut-être avec cette question de la liaison, je vois bien la procédure et la mise en oeuvre j e l'ai validé avec un autre fichier sans souci, mais j'ai pas inclu de variables dans l'adresse... tiens peut-être avec la fonction adresse?!?

A suivre...

Merci encore,

Cordialement,

Leakim

Pour recherchev() c'est vrai que je n'ai fait qu'un essai sommaire.

Toi ton chemin est décomposé en plusieurs parties et on risque de retourner sur indirect().

Je devais être fatigué... -;)

eric

Bonjour,

de retour...

J'ai virtualisé le serveur de données et j'ai changé le chemin du répertoire...

Après avoir cherché un moment j'ai réussi à rédiger correctement le chemin de mon fichier.

Reste que je retrouve le bug avec

Sub recup_2014()
   'Const chemin1 As String = "'E:\DOC SERVICES\"
   Const chemin1 As String = "\\serveur2008D\DOC SERVICES\"
    Const annee As String = "2014"
    Dim derlig As Long, lig As Long, col As Long
    Dim fichier As String
    For lig = 6 To Cells(Rows.Count, 1).End(xlUp).Row
        For col = 3 To 14
            fichier = chemin1 & Cells(lig, 1) & "\" & Cells(lig, 2) & "\[feuilles de frais " & annee & ".xlsm]" & Cells(4, col) & "'!R39C10"
            Cells(lig, col) = ExecuteExcel4Macro(fichier)
        Next col
    Next lig
End Sub

Malgré mon changement R93c10 de la fin ???

As-tu un piste... qu'est ce qut tu entendais par

eriiic a écrit :

Pour la macro j'ai fait le fainéant, désolé.

J'ai mis la référence en style A1, mais il la faut absolument en R1C1.

Donc & "'!R39C10" à la fin, si je compte bien.

Merci de me redire,

Tu verras sur le fichier que cela fonctionnais nickel jusqu'à ???

Leakim

Bonjour,

houlaaaa, c'est trop vieux ça...

qu'est ce qut tu entendais par

Exactement ce que tu as fait : utiliser des références RC

En simplifiant, un exemple qui fonctionne :

Sub recup_2014()
   'Const chemin1 As String = "'E:\DOC SERVICES\"
  Const chemin1 As String = "'d:\tmp\"
    Const annee As String = "2014"
    Dim derlig As Long, lig As Long, col As Long
    Dim fichier As String
'    For lig = 6 To Cells(Rows.Count, 1).End(xlUp).Row
'        For col = 3 To 14
            fichier = chemin1 & "[test " & annee & ".xls]" & "Feuil1" & "'!R5C3"
            [A1].Value = ExecuteExcel4Macro(fichier)
           '           = ExecuteExcel4Macro("'D:\tmp\[test 2014.xls]Feuil1'!R5C3")
'        Next col
'    Next lig
End Sub

eric

edit: je n'ai vu qu'après que tu avais mis un fichier.

Il y a un pb dans ton chemin :

"'E:\DOC SERVICES\Equipe 1\\2013\[feuilles de frais 2013.xlsx]janvier'!R39C10"

Cells(lig, 2) est vide

Re,

Oui sur le fichier j'ai ôté le nom des collègues.

Mais sur mon fichier j'ai pas de bug sur le chemin mais sur la ligne du dessous???

Leakim

Oui, au moment où tu utilises un chemin erroné.

Essaie d'abord en local en recréant l'arborescence, tu t'affranchiras des problèmes de serveurs.

eric

Bonjour,

Je ne sais pas pour le probleme du serveur je te redonne un code de Yvouille qui fonctionne avec la nouvelle organisation de serveurs.

Ce code va chercher dans un calendrier que tu connais les valeurs des cellules jours et les remets sur un fichier recap annuelle.

Il y a un boucle pour les colonnes vers les lignes...

Je me demande comment le convertir celui de Yvouille qui fonctionne avec cette histoire de chemin et le tien qui trouve le contenu de la cellule fixe de chaque onglets mensuels ???

Sub aa()
Dim i As Integer, j As Integer, k As Integer, m As Integer, Dossier_traité As String, Nom_traité As String

Dim Tableau_A(400) As String

Application.ScreenUpdating = False

Call RAZ

For i = 7 To Range("A1048576").End(xlUp).Row
    Dossier_traité = Range("A" & i)
    Nom_traité = Range("B" & i)

    Workbooks.Open Filename:="\\serveur2008D\DOC SERVICES\" & Dossier_traité & "\" & Nom_traité & "\suivi et demande de congés 2014.xlsm"

    Sheets("CALENDRIER").Activate

    For j = 3 To 36 Step 3   '3 to 47 step 4
        For k = 17 To 48
            If Cells(k, j) = "" Then GoTo Prochain_j
            m = m + 1
            ThisWorkbook.Sheets("RECAP").Cells(i, m + 3) = Cells(k, j + 1)
        Next k
Prochain_j:
    Next j

    Application.DisplayAlerts = False
    ActiveWorkbook.Close
    Application.DisplayAlerts = True

    m = 0
Next i

Sheets("données").Activate ' Afin de sélectionner en dernier la feuille RECAP et déclencher ainsi la macro Private Sub Worksheet_Activate() sur cette feuille
Sheets("RECAP").Activate

    MsgBox ("Fin de l'importation !")

End Sub

En espérant que cela inspire...

Cordialement,

Leakim

Bonjour,

Ca n'inspire rien, yvouille ouvre le classeur, là tu veux travailler classeur fermé. Ca n'a rien à voir.

Tente en mettant la lettre du lecteur réseau au lieu de son nom.

eric

Bonjour,

Merci de ta réponse, je vais essayer à nouveau.

Je te redis.

Leakim

Bonjour,

Force est de constater que le chemin de mon dossier est le probleme. J'ai plus de bug de macro... pour autant il ne trouve pas le fichier ??... (sûrement des problemes de droits serveurs)

Je continue et te redis

Merci

Leakim

Re,

J'ai fini par trouver ma boulette

J'oubliais l’apostrophe devant le double antislash

Sub recup_2014()
   Const chemin1 As String = "'\\serveur2008D\DOC SERVICES\"
    Const annee As String = "2014"
    Dim derlig As Long, lig As Long, col As Long
    Dim fichier As String
    For lig = 6 To Cells(Rows.Count, 1).End(xlUp).Row
        For col = 3 To 14
            fichier = chemin1 & Cells(lig, 1) & "\" & Cells(lig, 2) & "\[feuilles de frais " & annee & ".xlsm]" & Cells(4, col) & "'!R39C10"
            Cells(lig, col) = ExecuteExcel4Macro(fichier)
        Next col
    Next lig
End Sub

Merci Eriiic de m'avoir encourager dans cette voie... qui était la seule

Encore merci pour cette macro.

Cordialement,

Leakim

Rechercher des sujets similaires à "macro extraction multi classeurs onglets"