Besoin d'aide : macro VBA

FloR54 -  
michel_m Messages postés 18903 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

9 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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

    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
    0
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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.

    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)
    0
  3. FloR54
     
    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
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      re,

      Curieux, chez moi ca marche
      ci joint la maquette
      http://www.cijoint.fr/cjlink.php?file=cj201009/cijdUzvJ8q.zip
      tu dis...
      0
  4. 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
    0
    1. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      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.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. FloR54
     
    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
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Re,

      il faut que les 4 classeurs sv1,Sv2,sv3,consolidation, soient les seuls dans le m^me répertoire

      salut lermite (ca va?)
      0
  7. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Au final, le plus simple..
    Un classeur exemple
    0
  8. 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 !!
    0
  9. FloR54
     
    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
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Excuses moi de t'avoir dérangé avec une solution qui marche sans ouvrir les fichiers...
      0
    2. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      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..
          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+
      0
    3. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      Bon, pour les #REF! j'ai trouvé, j'ajoutais un slash inverse au chemin.
      Maintenant il m'affiche tout des 0 (zéro) ?
      0
  10. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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+
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
      0