[CHERCHE] Macro pour controler/modifier

Résolu
Bonjour,

Pour les besoins de mon travail, j'aurais besoin d'une macro qui me permettrai de récupérer et lister des infos situées dans plusieurs classeurs et une deuxième qui pourrai réaliser l'opération inverse. Je m'explique :

J'ai un Classeur A et un dossier B contenant 3 classeurs, B1, B2 et B3. Ces classeurs ont tous en cellule A1 une date.
Je souhaite récupérer toutes ces dates dans la feuille "DATE" de mon classeur A sous cette forme :
colonne A|colonne B
Date B1 | B1.xls
Date B2 | B2.xls
Date B3 | B3.xls

La seconde macro me permettrai de réinjecter les valeurs Date B1, Date B2 et Date B3 dans les classeurs correspondants, sachant que j'aurais peut être modifier certaines dates pour les besoins de mon travail.

Je sais que c'est une requête qui n'est pas simple, en tout cas j'espère que certains pourront m'aider.

D'avance merci

Bilou

2 réponses

  1. Modérateur
    Re-
    Tu n'as que 3 classeurs concernés par cet Import-export de date?
    Le dossier contenant ces 3 classeurs contient-il d'autres fichiers? classeurs?
    Ces classeurs ont tous en cellule A1 une date. Cellule A1 ok, mais de qu'elle feuille? les noms de ces feuilles sont ils identiques dans les 3 classeurs??
    Cordialement,
    Franck P
    1. Bonjour,
      Le dossier peut contenir plus d'une centaine de classeur en fonction de l'affaire, tous identiques dans leur structure. la date se trouve en A1 sur la feuil1.
      Si cela marche je me plongerai dedans pour l'adapter mais si déjà ca fonctionne, ce serai vraiment super!
      Si tu as besoin d'autres infos n'hésite pas, je surveille le thread.

      Merci pour l'attention portée a mon problème en tout cas

      Bilou
      1. Modérateur
        S'agit-il toujours du même répertoire?
      2. Oui, en fait le principe c'est de coller dans le répertoire les classeurs que je veut contrôler en masse et modifier si besoin sans avoir à tout ouvrir.
      3. Modérateur
        Bon alors :

        Tu ouvres ce classeur.
        Pour "importer" tes dates : ALT+F8 choix : ImporterDates
        Pour "exporter" tes dates : ALT+F8 choix : ExporterDates

        Les codes :
        Option Explicit
        
        Sub ImporterDates()
        Dim objShell As Object, objFolder As Object
        Dim Chemin As String, fichier As String
        
            Set objShell = CreateObject("Shell.Application")
            Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)
        
        If objFolder Is Nothing Then
            MsgBox "Abandon opérateur", vbCritical, "Annulation"
        Else
            Columns(1).NumberFormat = "m/d/yyyy"
            Chemin = objFolder.ParentFolder.ParseName(objFolder.Title).Path & "\"
            [B1] = Chemin
            fichier = Dir(Chemin & "*.xls")
            Do While Len(fichier) > 0
                ThisWorkbook.Names.Add "Plage", _
                    RefersTo:="='" & Chemin & "[" & fichier & "]Feuil1'!$A$1"
                With Sheets("Feuil2")
                    .[A1] = "=Plage"
                    .[A1].Copy
                    Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
                    Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Offset(0, 1) = fichier
                End With
                fichier = Dir()
            Loop
        End If
        End Sub
        
        Sub ExporterDates()
        Dim Chemin As String, fichier As String
        Dim maDate As Date
        Dim Lign As Long, DrLig As Long
        
        Application.ScreenUpdating = False
        With Sheets("Feuil1")
            DrLig = .Range("A" & Rows.Count).End(xlUp).Row
            For Lign = 2 To DrLig
                maDate = .Cells(Lign, 1).Value
                If Not IsDate(maDate) Then
                    MsgBox "Format de date incorrecte à la ligne : " & Lign
                    Exit Sub
                End If
                Chemin = [B1]
                fichier = .Cells(Lign, 2).Value
                Workbooks.Open Chemin & fichier
                With ActiveWorkbook
                    .Sheets("Feuil1").Range("A1") = CDate(maDate)
                    .Save
                    .Close
                End With
            Next
        End With
        Application.ScreenUpdating = True
        End Sub
        
      4. Merci beaucoup Pijaku, je teste ça tout de suite!!
        Je m'attendais pas a une réponse aussi rapide, c'est vraiment cool.

        Bilou
      5. Rebonjour,

        C'est impeccable, ça marche du tonnerre et dans les deux sens, je vais y mettre un peu le nez pour voir comment lui faire récupérer d'autres cellules sous le même principe et se sera exactement comme je le voulais.

        Un grand grand merci pour ton aide pijaku, grâce a toi je vais gagner un temps fou et j'aurais un vrai visu sur mes tableaux de rendus.

        merci encore!

        Bilou