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 :

Macro Copier données d'une feuille vers une feuille cible


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 121
    Points : 127
    Points
    127
    Par défaut Macro Copier données d'une feuille vers une feuille cible
    Bonsoir le forum,

    Je veux copier les données d'une feuille "Résultat" vers une feuille "Archive".

    Je me suis inspirée d'un exemple trouvé sur le forum par String

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    Dim Shc As Worksheet, Shs1 As Worksheet, Shs2 As Worksheet
     
    Set Shc = Sheets("feuille cible")
    Set Shs1 = Sheets("feuille source 1")
    Set Shs2 = Sheets("feuille source 2")
     
    Shs1.Range("A2:E" & Shs1.Range("E65535").End(xlUp).Row).Copy Shc.Range("A65535").End(xlUp)(2)
    Shs2.Range("A2:E" & Shs2.Range("E65535").End(xlUp).Row).Copy Shc.Range("A65535").End(xlUp)(2)
     
    End Sub

    A ce code j'ai ajouté dans la feuille cible la création d'une feuille, un nouveau formatage des données et le nom de l'onglet.

    Ma macro s'arrête sur la ligne indiquée ci-dessous
    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
    Sub  Archivage()
    'Je démarre ma macro depuis le dossier ouvert « Traitement » qui possède une feuille « Résultat »
    'C’est cette feuille « Résultat » que je veux archiver.
     
    Workbooks.Open Filename:="C:\Dossier\Archive2008.xls"
    Sheets.Add
        Range("A1").Select
     
    Dim Shc As Worksheet, Shsl As Worksheet
     
    Set Shc = Sheets("Archive2008.xls")
    Set Shs1= Sheets("Résultat") '<-- erreur sur cette ligne
     
    Shs1.Range("A1:V1")(Shs1.Range("A65535").End(xlUp).Row).Copy
    Shc.Range("A65535").End (xlUp)
     
    Cells.EntireColumn.AutoFit
        With Selection
            .HorizontalAlignment = xlLeft
            .ReadingOrder = xlContext
        End With
        Range("A1").Select
        Dim nom As String
        nom = ActiveCell.Value
        ActiveSheet.Name = Cells(2, 21).Value
        ActiveWorkbook.Save
        ActiveWindow.Close
     
    End Sub
    Je dois pas faire quelque chose mais quoi?

    Merci de me répondre et bonne nuit

    Je reviendrais demain comme pratiquement tous les jours

  2. #2
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Cela coince parce que quand tu ne précises le classeur, il prend en compte le classeur actif. Le classeur actif à ce moment là de ton code est le classeur "Archivage" et dans ce classeur il ne trouve pas la feuille "Résultat". Avant de te montrer comment faire je vais d'abord passer le reste de ton code en revue parce que la suite du code t'aurait provoqué de jolis bugs aussi...

    Je te propose donc d'essayer ceci :
    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
    Sub Archivage()
    Dim SHsource As Worksheet, WBcible As Workbook
     
    'feuille source
    Set SHsource = ThisWorkbook.Sheets("Résultat")
     
    'classeur cible
    Set WBcible = Workbooks.Open(Filename:="C:\Dossier\Archive2008.xls")
     
    'copie de la feuille source à la fin du classeur cible
    SHsource.Copy After:=WBcible.Sheets(Sheets.Count)
     
    'renommer la feuille cible
    WBcible.Sheets(Sheets.Count).Name = WBcible.Sheets(Sheets.Count).Cells(2, 21)
     
    'fermeture et sauvegarde du classeur cible
    WBcible.Close True
     
    'libération de la mémoire
    Set SHsource = Nothing
    Set WBcible = Nothing
    End Sub

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 121
    Points : 127
    Points
    127
    Par défaut
    Bonjour et merci Fring pour ta réponse

    Je vais corriger et je reviens pour dire mon résultat.

    A+

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

Discussions similaires

  1. [VB.Net] Comment copier une DataRow d'une table vers une autre ?
    Par YLF dans le forum Accès aux données
    Réponses: 7
    Dernier message: 05/09/2012, 23h23
  2. Réponses: 1
    Dernier message: 19/10/2011, 12h13
  3. [XL-2010] Copier données d'un tableau vers une cellule
    Par Caussols dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/03/2011, 22h30
  4. copier le contenu de cellule d'une colonne vers une autre feuille.
    Par vile-coyote dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/11/2010, 06h25
  5. copier une partie d'une image vers une autre
    Par gregcat dans le forum Langage
    Réponses: 1
    Dernier message: 14/04/2006, 13h39

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