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

Macros et VBA Excel Discussion :

création d'un fichier en copiant des feuilles d'un fichier excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Avril 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 30
    Points : 17
    Points
    17
    Par défaut création d'un fichier en copiant des feuilles d'un fichier excel
    Bonjour,

    J'essai de créer des fichiers de manière automatique, sachant que j'ai un fichier avec une multitude d'onglets et que je souhaite créer des fichiers en sélectionnant certains onglet. Dans mon code test je sélectionne 3 onglet que je souhaite copier dans un autre classeur et enregistrer ensuite dans un répertoire.

    J'ai 2 problèmes :

    Problème 1 :
    Lorsqueje sélectionne dans mon test 3 onglets, j'ai une erreur de type 1004 "impossible de copier ou déplacer un groupe de feuille contenant un tableau" , j'ai d'ailleurs le même message lorsque je fais la manio sans macro... alors que si je copie feuille par feuille il n'y a pas de problème.....

    Problème 2:
    mon fichier ne s'enregistre pas dans le répertoire final que je souhaite alors que le MSGbox me donne bien le bon chemin et nom de fichier... j'ai un fichier False qui se crée dans le répertoire du fichier initial...

    Voici mon code, sauriez vous comment résoudre mes pb ?

    Merci pour votre aide


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Macro3()
    '
     
    MoisAnnée = Sheets("INDEX").Range("F3").Value
    TargetName = ActiveWorkbook.Path & "\" & MoisAnnée & "\test.xlsx"
    MsgBox (TargetName)
     
    Sheets(Array("1400", "Détails 1400", "1400 par frais")).Select
    'Sheets(Array("1400")).Select
    ActiveSheet.Copy
    ActiveSheet.SaveAs Filename = TargetName
     
    '
    End Sub

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 103
    Points : 9 908
    Points
    9 908
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    le problème 1 se suffit à lui-même : s'il contient des listobjects (tableaux excel appelés improprement "listes") tu ne peux pas le copier via un groupe de travail. Il faut donc faire les copies séparément

    pour le problème 2, c'est le chemin complet du fichier qui est faux ==> ça renvoie à la place le nom "FALSE"

    essaye comme ça, j'ai ajusté sans toutefois tester

    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
    23
    24
    25
    Sub Macro3()
     
    Dim Wb As Workbook
    Dim MoisAnnee As String
    Dim ListeFeuille() As String
    Dim WbSource As Workbook
    Dim WbDest As Workbook
     
    Set WbSource = ActiveWorkbook
    Set WbDest = Workbooks.Add
     
    MoisAnnée = WbSource.Sheets("INDEX").Range("F3").Value
    TargetName = WbSource.Path & "\" & MoisAnnée & "\test.xlsx"
     
    ListeFeuille = Array("1400", "Détails 1400", "1400 par frais")
     
    For i = LBound(ListeFeuille) To UBound(ListeFeuille)
        WbSource.Sheets(ListeFeuille(i)).Copy Before:=WbDest.Sheets(1)
    Next i
     
    WbDest.SaveAs Filename:=TargetName
     
    Set WbSource = Nothing
    Set WbDest = Nothing
    End Sub

  3. #3
    Membre à l'essai
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Avril 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    Merci JOE j'ai effectivement vu le pb num 2 : J'avais omis le : avant le = qui suit FileName....

    Par contre pour le pn num 1 je vais tester ton code pour traiter les feuilles une à une puisque je n'ai pas le choix...

    Du coup j'ai une nouvelle question : saurais tu si je peux utiliser le code suivant pour rompre les liaisons du fichier destination avec le fichier Source sachant que j'ai l'impression que cette liaison n'apparait qu'une fois le fichier destination sauvegadrer....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ActiveWorkbook.Breaklink Name:= _
    "H:\2015\..........\suiviW4.xlsm", _
    Type:=xlExcelLinks

  4. #4
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 103
    Points : 9 908
    Points
    9 908
    Billets dans le blog
    5
    Par défaut
    je n'en ai pas la moindre idée

    essaye de mettre ça après la ligne 21 du code (après le SaveAs fait sur WbDest)

    remplace ton "ActiveWorkbook" par la variable WbDest

  5. #5
    Membre à l'essai
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Avril 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    j'ai testé code et c'est bon avec type variant pour listefeuille (au lieu de string)

    dernière question Joe, j'utilise le code suivant pour supprimer les feuil1,2 et 3 qui sont là automatiquement mais je n'arrive pas à gérer la fenètre qui demande confirmation de suppression....

    aurais tu une idée ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WbDest.Sheets(Array("Feuil1", "Feuil2", "Feuil3")).Delete

  6. #6
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 103
    Points : 9 908
    Points
    9 908
    Billets dans le blog
    5
    Par défaut
    Lorsque tu ne veux neutraliser les demande de confirmations, comme par exemple ici la confirmation de suppression de la feuille, il te suffit d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Application.DisplayAlerts = False
    ' ton code qui supprime les feuilles
    Application.DisplayAlerts = True
    cette instruction indique à Excel "tu n'affiches pas les messages d'alertes, tu les valides directement avec le choix par défaut"

  7. #7
    Membre à l'essai
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Avril 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    merci Joe. Effectivement ca a résolu mon probleme. Mais j'en ai un nouveau

    J'essai d'utiliser dans un autre cas et je ne comprends pas pkoi ca ne convient pas... sauf que dans ce cas je n'ai pas deux choix dans le message mais seulement un bouton OK (je demande de dissocier des lignes qui ne sont parfois pas groupées donc j'ai un message disant que ce n'est pas possible de dissocier.... bouton OK

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Application.DisplayAlerts = False
        Rows("35:84").Select        'dégroupe le regroupement existant
        Selection.Rows.Ungroup
    Application.DisplayAlerts = True
    y aurait il un autre code pour ce genre de cas ?

  8. #8
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 103
    Points : 9 908
    Points
    9 908
    Billets dans le blog
    5
    Par défaut
    quand je test ton code, j'ai un message d'erreur plutôt qu'un avertissement

    j'ai contourné comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    On Error Resume Next
    Rows("35:84").Ungroup
    On Error GoTo 0
    si une ligne plante, on passe à la suivante comme si de rien était mais à utiliser avec parcimonie et prudence !
    j'ai raccourci au passage l'instruction

  9. #9
    Membre à l'essai
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Avril 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    merci joe . En testant dans excel le message faisait apparaitre un triangle jaune avec un point d'intérrogation donc je pensais qu'il s'agissait d'un avertissement...
    Mais ton astuce me va bien car pas dangereux dans ce cas.

    Merci pour ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/11/2014, 17h34
  2. Importer des données d'un fichier PDF dans une feuille Excel
    Par pourinfo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/03/2010, 14h58
  3. Lire les noms des feuilles d'un fichier
    Par funkykid dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 27/05/2008, 13h56
  4. Réponses: 2
    Dernier message: 30/01/2006, 22h19
  5. Obtenir la liste des feuilles d'un fichier Excel
    Par Jean Bonnisme dans le forum Access
    Réponses: 3
    Dernier message: 15/10/2004, 10h53

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