IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Récupérer la feuille d'un autre classeur


Sujet :

Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Points : 51
    Points
    51
    Par défaut Récupérer la feuille d'un autre classeur
    Bonjour à tous,
    Je vous expose mon problème, je fournis à chacun de mon équipe un tableau excel afin de saisir le temps passé sur les dossiers. Je souhaite pouvoir n'avoir qu'un fichier a ouvrir et qu'il récupère les feuilles des autres fichiers (chaque fichier n'ayant qu'une feuille).
    Ce qui donnerait donc :
    Feuil1 : ma propre feuille
    Feuil2 = Feuil1 du classeur xx.xlsx stocké dans le même dossier
    Feuil3 = Feuil1 du classeur yy.xlsx stocké dans le même dossier

    J'ai beau chercher, je ne trouve pas de piste à ce que je souhaite.

    Merci par avance si l'un de vous a une solution.

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Tu ouvres le fichier source avec un Workbooks.Open
    https://docs.microsoft.com/fr-FR/off...workbooks.open
    Tu copies la feuille souhaitée du fichier source vers le fichier destination (ton fichier) avec la méthode Copy de Worksheet.
    https://msdn.microsoft.com/fr-fr/lib...4(v=office.15)
    Eventuellement tu renommes la feuille copiée dans le fichier de destination avec sa propriété Name.
    https://msdn.microsoft.com/fr-fr/lib...4(v=office.15)
    Tu fermes le fichier de destination avec un Close sur sa référence Workbook.
    https://docs.microsoft.com/fr-FR/off...workbook.close
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Points : 51
    Points
    51
    Par défaut
    Bonjour @Menhir et merci de ta réponse.

    Du coup j'ai fait un bouton avec dedans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Recap()
    Workbooks.Open "foobar.xlsx"
    Worksheets("Feuil1").Copy After:=Workbooks("Recap.xlsm").Sheets(1)
    Workbooks("foobar.xlsx").Close SaveChanges:=False
    End Sub
    Ça ouvre bien le classeur foobar, copie Feuil1, repasse sur Recap et colle la feuille "Feuil1" après ma première feuille et ferme foobar.

    Par contre, cela demande de faire ce bloc pour tous les membres de l'équipe.
    Serait-ce possible de faire un truc du genre :

    Dans Feuil1 dans le tableau recap :
    Cellule A1 = foobar
    Cellule A2 = toto

    Dans le bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Ligne=1
    Colonne=A
    NuméroCellule = Colonne+Ligne
    Si NuméroCellule n'est pas vide =
    Workbooks.Open "Contenu de "NuméroCellule".xlsx"
    Worksheets("Feuil1").Copy After:=Workbooks("Recap.xlsm").Sheets(1)
    Workbooks("Contenu de "NuméroCellule".xlsx").Close SaveChanges:=False
    V=V+1
    Et on boucle jusqu'à ce que NuméroCellule soit vide

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Il faut faire un For Each sur la plage de cellules où se trouve ta liste et remplacer le nom de fichier (dans le Open et dans le Close) par la valeur de la cellule courante.
    Pour la structure For Each : https://docs.microsoft.com/fr-fr/off...next-statement
    Pour tout savoir sur les boucles : http://silkyroad.developpez.com/vba/boucles/

    Je te conseille de nommer la plage de cellule contenant les noms de fichiers.
    Comme ça, tu peux désigner directement la plage nommée dans le For Each sans te soucier de sa taille.

    Attention aussi : je crois que tu as zappé mon conseil de renommé la feuille après copie. J'espère que tes feuilles n'ont pas toutes le même nom dans les fichiers sources.
    Personnellement, j'utiliserai aussi le contenu des cellules scrutées pour renommer les feuilles.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Points : 51
    Points
    51
    Par défaut
    Pfiou, après moult tatonements, je tiens un truc qui fonctionne :

    Sub Recap()
    Application.DisplayAlerts = False
    For Each var_Rge In Range("Liste")
    If var_Rge.Value <> "" Then
    Sheets(var_Rge.Value).Delete
    Workbooks.Open var_Rge.Value + ".xlsx"
    Worksheets("Feuil1").Copy After:=Workbooks("Recap.xlsm").Sheets(1)
    ActiveSheet.Name = var_Rge.Value
    Workbooks(var_Rge.Value + ".xlsx").Close SaveChanges:=False
    End If
    Next var_Rge
    Application.DisplayAlerts = True
    End Sub


    J'ai rajouté au début le fait de supprimer la feuille (sinon ça fait un doublon).

    Tu as raison pour le fait de renommer, même si en théorie je n'en ai pas besoin, on ne sait jamais ;-)

    Du coup, ça fonctionne, mais :
    - Est-ce qu'il y a des adaptations possible (je ne connais pas vba, je me dis que j'ai peut être alourdie des trucs)
    - Est-ce possible de comparer la feuille dans mon classeur avec la feuille que j'ouvre et d'effacer et modifier uniquement si c'est différent ?

    En tous, merci encore de l'aide ;-)

    Edit :

    En vérifiant mon code, je me suis rendu compte que j'avais une erreur à la suppression d'une feuille si elle n'existe pas, j'ai trouvé un code à cette adresse : https://www.developpez.net/forums/d6...euille-existe/
    Que j'ai repris et rajouté dans mon code.

    ça donne donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Function FeuilleExiste(Nom As String) As Boolean
        Dim sh As Object
        For Each sh In Sheets
            If UCase(sh.Name) = UCase(Nom) Then
                FeuilleExiste = True
                Exit For
            End If
        Next
    End Function
    Sub Recap()
    Application.DisplayAlerts = False
    For Each var_Rge In Range("Liste")
    If var_Rge.Value <> "" Then
    If FeuilleExiste(var_Rge.Value) Then Sheets(var_Rge.Value).Delete
    Workbooks.Open var_Rge.Value + ".xlsx"
    Worksheets("Feuil1").Copy After:=Workbooks("Recap.xlsm").Sheets(1)
    ActiveSheet.Name = var_Rge.Value
    Workbooks(var_Rge.Value + ".xlsx").Close SaveChanges:=False
    End If
    Next var_Rge
    Application.DisplayAlerts = True
    End Sub

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/03/2009, 03h44
  2. Copie d'une feuille vers un autre classeur
    Par zeralium dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/10/2008, 16h08
  3. Réponses: 2
    Dernier message: 26/08/2008, 20h55
  4. Réponses: 2
    Dernier message: 15/02/2008, 09h24
  5. Imprimer une feuille d'un autre classeur?
    Par Amkhar dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/09/2007, 15h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo