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 :

Méthode Copy ne fonctionne pas [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 148
    Par défaut Méthode Copy ne fonctionne pas
    Bonjour à tous,

    JE suis en train d'écrire une macro qui à partir d'un fichier principal crée un second fichier contenant des onglets du premier fichier.
    Pour cela j'ai besoin de copier les onglets d'un fichier à l'autre.
    Voici le code que j'utilise:

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    Private Sub Extraire_Click()
    compt = ThisWorkbook.Worksheets.Count
     
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlBook1 As Excel.Workbook
    Set xlBook1 = ThisWorkbook
     
    'On créer l'objet Excel
    Set xlApp = CreateObject("Excel.Application")
    'On défini le nombre d'onglets (ici 0)
    xlApp.SheetsInNewWorkbook = 1
    'On ajoute un classeur
    Set xlBook = xlApp.Workbooks.Add
    'On donne un nom au classeur
    xlBook.SaveAs ("Extraction.xls")
    'On rend le classeur visible
    xlApp.Visible = True
    'On créer la page de garde
     
    xlBook1.Sheets("Page de garde").Copy xlBook.Sheets("Feuil1")
    ActiveSheet.Name = "Liste de Fiches"
     
    For r = 5 To compt
     
    n = Feuil2.Cells(r, 1)
     
    i = InStr(xlBook1.Sheets(r).Cells(1, 3), Specs.Value)
    j = InStr(xlBook1.Sheets(r).Cells(1, 4), Projet.Value)
    k = InStr(xlBook1.Sheets(r).Cells(1, 5), Produit.Value)
    l = InStr(xlBook1.Sheets(r).Cells(1, 6), Fonction.Value)
     
    If i > 0 And j > 0 And k > 0 Then
    xlBook.Activate
     
     
    xlBook.Sheets().Add After:=xlBook.Worksheets(xlBook.Worksheets.Count)
    xlBook.Sheets(xlBook.Worksheets.Count).Name = xlBook1.Sheets(r).Cells(1, 1)
    xlBook1.Sheets(r).Copy after:=xlBook.Sheets(xlBook.Worksheets.Count)
    End If
     
    Next r
    End Sub
    Le problème est que la copie ne fonctionne pas.
    Pouvez vous m'éclairer sur le sujet.

    Merci d'avance.

  2. #2
    Membre éclairé Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Par défaut
    Bonjour sagitarium

    Pourquoi ne pas faire un simple CopyAs ?

    pardon, SaveAS

  3. #3
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Bonjour,

    as-tu essayé le debogueur pas à pas pour savoir ou ça coince, pour moi cette ligne ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xlBook1.Sheets("Page de garde").Copy xlBook.Sheets("Feuil1")
    il faudrait faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xlBook1.Sheets("Page de garde").Copy after:=xlBook.Sheets("Feuil1")

  4. #4
    Membre éclairé Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Par défaut
    Si tu veux vraiment créer un deuxième fichier, tu peux aussi faire simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Workbooks.Add
        Windows("Classeur1").Activate
        Sheets("tata").Select
        Sheets("tata").Copy Before:=Workbooks("Classeur2").Sheets(1)
        Windows("Classeur1").Activate
        Sheets("toto").Select
        Sheets("toto").Copy Before:=Workbooks("Classeur2").Sheets(1)
        Windows("Classeur1").Activate

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par babybell Voir le message
    Bonjour sagitarium

    Pourquoi ne pas faire un simple CopyAs ?

    pardon, SaveAS
    babybell voulait sans doute dire "SaveCopyAs"
    Effectivement, il ne te resterait plus qu'à supprimer les feuilles "en trop"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.SaveCopyAs "C:\Rep\blabla.XLS"
    Permet de" rester dans Thisworkbook et de travailler sur blabla.xls
    Une question : Pourquoi crées-tu une autre instance d'Excel ? Pour aller plus vite ?

    Bon après-midi

  6. #6
    Membre éclairé Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Par défaut
    Merci ouskel'n'or, j'ai tapé trop vite

    Bon AM

  7. #7
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Par contre pour les Windows("Classeur1"), Activate et les Select partout dans la 2ème proposition, je ne vois pas l'utilité

  8. #8
    Membre éclairé Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Par défaut
    moi non plus, et en plus c'est plus long, mais ça existe

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 148
    Par défaut
    Bonjour à tous,

    Je n'ai pas pu essayer vos petites astuces jusqu'à aujourd'hui.

    Je n'ai pas beaucoup avancer. En effet j'ai réussi à faire une copie entre deux feuille du même fichier.

    Mais j'ai toujours la même erreur quand il s'agit d'un second fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xlBook1.Sheets(r).Copy after:=xlBook.Sheets(xlBook.Worksheets.Count)
    Je pense que je n'ai pas la main sur le fichier d'où je veux copier les données ou vers lequel j'ai envie de copier les donnée.

    Pour rappel, le principe de ma macro est d'extraire des infos à partir d'un fichier et de les copier dans un nouveau fichier.

    Si vous avez d'autres façon de réaliser cette copie, je suis ouvert à toute propositions.

    Merci.

  10. #10
    Membre éclairé Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Par défaut
    Salut sagitarium, le Forum

    J'ai changé une instruction et ça marche

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Private Sub Extraire_Click()
    compt = ThisWorkbook.Worksheets.Count
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlBook1 As Excel.Workbook
    Set xlBook1 = ThisWorkbook
     
       'On créer l'objet Excel
    Set xlApp = CreateObject("Excel.Application")
      'On défini le nombre d'onglets (ici 0)
    xlApp.SheetsInNewWorkbook = 1
      'On ajoute un classeur
    Set xlBook = Workbooks.Add
    'On donne un nom au classeur
    Application.DisplayAlerts = False
    xlBook.SaveAs ("Extraction.xls")
    'On rend le classeur visible
    xlApp.Visible = True
    'On créer la page de garde
     
    xlBook1.Sheets("Page de garde").Copy xlBook.Sheets("Feuil1")
    ActiveSheet.Name = "Liste de Fiches"
     
    For r = 5 To compt
     
    n = Feuil2.Cells(r, 1)
     
    i = InStr(xlBook1.Sheets(r).Cells(1, 3), Specs.Value)
    j = InStr(xlBook1.Sheets(r).Cells(1, 4), Projet.Value)
    k = InStr(xlBook1.Sheets(r).Cells(1, 5), Produit.Value)
    l = InStr(xlBook1.Sheets(r).Cells(1, 6), Fonction.Value)
     
    If i > 0 And j > 0 And k > 0 Then
    xlBook.Activate
     
    xlBook.Sheets().Add after:=xlBook.Worksheets(xlBook.Worksheets.Count)
    xlBook.Sheets(xlBook.Worksheets.Count).Name = xlBook1.Sheets(r).Cells(1, 1)
    xlBook1.Sheets(r).Copy after:=xlBook.Sheets(xlBook.Worksheets.Count)
    End If
     
    Next r
    End Sub

  11. #11
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Par défaut
    Bonjour

    Le problème venait du CreateObject qui ouvre une deuxième instance d'Excel ; ce qui ne permet pas d'utiliser xlBook1.Sheets(r).Copy after:=xlBook.Sheets(xlBook.Worksheets.Count) qui ne fonctionne que dans une même instance d'Excel.
    La solution apportée par babybell permet de tout gérer dans la même instance.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 148
    Par défaut
    Merci à tous!
    J'ai réussi avec vos astuces à corriger le bug.

    A bientôt

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/08/2010, 11h45
  2. [EasyPHP] Unlink, rename et copy ne fonctionnent pas sous Win7 64 avec EasyPHP ?
    Par clavier12AZQSWX dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 29/04/2010, 08h18
  3. Méthode objet ne fonctionne pas (4D 2003)
    Par Jimmy Jazz dans le forum 4D
    Réponses: 7
    Dernier message: 18/09/2009, 14h03
  4. Ma méthode ajouter ne fonctionne pas
    Par beegees dans le forum C++
    Réponses: 6
    Dernier message: 14/05/2008, 15h50
  5. méthode OfType() ne fonctionne pas
    Par maa dans le forum C#
    Réponses: 7
    Dernier message: 21/01/2008, 09h12

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