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 des données dans des onglets différents vers un onglet cible


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Points : 5
    Points
    5
    Par défaut Macro Copier des données dans des onglets différents vers un onglet cible
    Bonjour,

    Etant novice dans le domaine de l'utilisation de VBA, je souhaiterais de l'aide sur une macro que j'ai fait, il s'agit en fait d'une boucle, voici comment elle se décompose :

    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
    Sheets("feuille cible").Select
        Range("A1").Select
    Sheets("feuille source").Select
        Selection.End(xlUp).Select
        Selection.End(xlUp).Select
        Range("A2:E2").Select
        Range(Selection, Selection.End(xlDown)).Select
        Range("A2:E40104").Select
        Selection.Copy
    Sheets("feuille cible").Select
    Range("A1:A65000").Activate
    En_Colonne = ActiveCell.Column
    En_Ligne = ActiveCell.Row + 1
    While Not IsEmpty(ActiveCell.Value)
    Cells(En_Ligne, En_Colonne).Activate
    En_Ligne = En_Ligne + 1
    Wend
    With ActiveSheet.Paste
    End With
    Sheets("2ème feuille source").Select
        Range("A2:E2").Select
        Range(Selection, Selection.End(xlDown)).Select
        Range("A2:E41000").Select
        Selection.Copy
        Sheets("Feuille cible").Select
        Range("A1").Select
    Range("A1:A65000").Activate
    En_Colonne = ActiveCell.Column
    En_Ligne = ActiveCell.Row + 1
    While Not IsEmpty(ActiveCell.Value)
    Cells(En_Ligne, En_Colonne).Activate
    En_Ligne = En_Ligne + 1
    Wend
    With ActiveSheet.Paste
    End With
    Donc en gros la macro consiste à copier les données de plusieurs onglets source vers un onglet cible. Ces données doivent être collées les unes à la suite des autres.
    Ma première question, est ce que ma Macro est correct ?, ma second question c'est que je cherche a optimiser cette macros, non pas en copiant une plage donnée, mais en copiant ligne à ligne les données de chaque onglet pour les mettre les unes derrières les autres, est-ce possible ??

    Merci de votre aide


  2. #2
    Membre confirmé Avatar de zandru
    Homme Profil pro
    Ingénieur conception mécanique
    Inscrit en
    Mars 2008
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 507
    Points : 551
    Points
    551
    Par défaut
    Bonjour et bienvenu sur le forum,

    Ton code contient beaucoup de choses inutiles et non fonctionnelles (en particulier les selects.)

    Pour moi le plus simple pour copier les lignes une à une d'une feuille à une autre c'est quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To Worksheets("feuillesource").Cells(Rows.Count, 3).End(xlUp).Row
        Worksheets("feuillecible").Rows(i & ":" & i) = Worksheets("feuillesource").Rows(i & ":" & i)
    Next
    le for boucle du début de ta feuille source jusqu'à sa fin et copie les lignes entières.

    Pour plus de détail n'hésite pas à demander.

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Merci Zandru pour ton accueil et ta réponse rapide !!

    Etant très, voir très novice, ma question va paraître stupide, mais je met quoi comme valeur dans les zones suivantes :

    Et pourquoi il y a le chiffre 3 dans cette ligne ?

    Merci de ton aide

  4. #4
    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,

    Tout ton code peut se résumer à ceci :
    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

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Merci pour vos réponses, mais les solutions qui me sont proposé ne fonctionne pas. Est-il possible de me dire comment l'intégrer dans ma macro.

    Merci !!!

  6. #6
    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
    Citation Envoyé par ouskel'n'or Voir le message
    tu as le code pour copier les données des classeurs d'un répertoire dans une feuille d'un autre classeur.
    Je ne sais pas si ça va l'aider, il ne me semble pas qu'on parle ici de copier d'un classeur à un autre

    Cela ne fonctionne pas pour plusieurs raisons possibles mais c'est toi qui es devant ton écran donc pas évident de trouver la cause exacte

    • As-tu bien remplacé l'entièreté de ton code par celui que je t'ai proposé ?
    • As-tu adapté le nom des feuilles sources et cible ?
    • Le code repère la dernière cellule utilisée de la colonne E des feuilles sources, il y a bien quelque chose dans la colonne E de ces feuilles ?

  7. #7
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Bonjour

    Désolé d'avoir répondu tardivement, mais j'étais pris par autre choses

    As-tu bien remplacé l'entièreté de ton code par celui que je t'ai proposé ?
    Oui j'ai bien remplacé l'intégralité de mon ancien code par le tien

    As-tu adapté le nom des feuilles sources et cible ?
    Oui j'ai bien adapté le nom des feuilles sources et cible

    Le code repère la dernière cellule utilisée de la colonne E des feuilles sources, il y a bien quelque chose dans la colonne E de ces feuilles ?
    Oui il y a bien des données dans la colonnes E des feuilles sources.


    Voici ton code

    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("Recap")
    Set Shs1 = Sheets("INTER")
    Set Shs2 = Sheets("SAP")
     
    Shs1.Range("A2:E13581" & Shs1.Range("E65535").End(xlUp).Row).Copy Shc.Range("A65535").End(xlUp)(2)
    Shs2.Range("A2:E31682" & Shs2.Range("E65535").End(xlUp).Row).Copy Shc.Range("A65535").End(xlUp)(2)
     
    End Sub

    Merci de ton aide

  8. #8
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Shs1.Range("A2:E13581" & Shs1.Range("E65535").End(xlUp).Row)
    Shs2.Range("A2:E31682" & Shs2.Range("E65535").End(xlUp).Row)
    Là ça coince, regarde la syntaxe dans mon code et compare avec ce que tu as écrit

  9. #9
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Soit j'ai besoin de changer de lunettes , soit je suis débile, mais je n'arrive pas à faire de différence entre ton code et le miens, la syntaxe est là même, à la virgule près... Montre moi exactement où ça coince !! merci

  10. #10
    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
    Un ptit tour chez Aflelou...
    ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Shs1.Range("A2:E13581" & Shs1.Range("E65535").End(xlUp).Row)
    Shs2.Range("A2:E31682" & Shs2.Range("E65535").End(xlUp).Row)
    mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Shs1.Range("A2:E" & Shs1.Range("E65535").End(xlUp).Row)
    Shs2.Range("A2:E" & Shs2.Range("E65535").End(xlUp).Row)

  11. #11
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    ça fonctionne, mais le souci, c'est que j'ai déjà des données présente dans la feuille "recap" et je voudrais copier les données sources, en-dessous des données déjà présente dans le fichier cible ..

    Merci de ton aide

  12. #12
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Citation de Fring
    Un ptit tour chez Aflelou...
    Avec la pub que tu lui fais à Alain, tu devrais essayer négocier des royalties.

  13. #13
    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
    Citation Envoyé par spawn95 Voir le message
    ça fonctionne, mais le souci, c'est que j'ai déjà des données présente dans la feuille "recap" et je voudrais copier les données sources, en-dessous des données déjà présente dans le fichier cible ..
    Oui cela je j'avais bien compris et...en principe...ça devrait le faire puisque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Shc.Range("A65535").End(xlUp)(2)
    le code copie les données à partir de la première cellule vide de la colonne A

    @ Godzestla : j'espère bien avoir une bonne réduction sur l'achat de ma 1ère paire parce que je commence à en avoir vachement besoin

  14. #14
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse rapide..., si vous voulez je peut vous filez des action chez Affelou
    Moi je comprend vite mais il faut m'expliquer longtemp !!

    Ta ligne de code je l'ai positionné comme ceci, est ce que c'est bon ?? si oui ça ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    Dim Shc As Worksheet, Shs1 As Worksheet, Shs2 As Worksheet
     
    Set Shc = Sheets("Recap")
    Set Shs1 = Sheets("INTER")
    Set Shs2 = Sheets("SAP")
     
    Shc.Range("A65535").End(xlUp)(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

    Merci..

    J'aurais du mettre comme pseudo, coco bel oeil l'écureuil....

  15. #15
    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
    Non non il ne faut pas ajouter cette ligne de code ça ne sert à rien, c'était pour t'expliquer, elle se trouve déjà dans le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    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)
    Je t'assure que ce code fonctionne parfaitement, je viens à nouveau de le tester

  16. #16
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Ok , mais voici l'erreur que j'ai en exécutant la macro :

    "-Cliquez sur une seule cellule puis collez."
    "-Sélectionnez une zone rectangulaire de taille et de forme identiques à celles des informations et puis collez"

    Si j'ai bien compris ton code, il va chercher la dernière pour copier les données.

  17. #17
    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
    Points : 15 546
    Points
    15 546
    Par défaut
    Hello fring,
    Pour ma gouverne, à quoi correspond le (2) dans Shc.Range("A65535").End(xlUp)(2) ? A à "A2" ?

  18. #18
    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
    Hello Ousk'

    Pour ta gouvernante End(xlUp)(2) correspond à End(xlUp).Offset(1, 0)


  19. #19
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    oh c'est la même question que j'allais te poser !! mais alors pourquoi ça ne fonctionne pas ...

    Tu veux que je t'envoi mon fichier ??

  20. #20
    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
    Citation Envoyé par spawn95 Voir le message
    Ok , mais voici l'erreur que j'ai en exécutant la macro :

    "-Cliquez sur une seule cellule puis collez."
    "-Sélectionnez une zone rectangulaire de taille et de forme identiques à celles des informations et puis collez"

    Si j'ai bien compris ton code, il va chercher la dernière pour copier les données.
    Que viennent faire les sélections ici ?
    Ca sort d'où ces messages d'erreur ?

    En français, le code prend la plage de cellules depuis A2 jusqu'à la dernière cellule (non vide) de la colonne E et copie cette plages de cellules sur la feuille "Recap" à partir de la première cellule vide de la colonne A

    Oui envoie ton fichier parce que là je vois pas ce qui fait couiner

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2010] Pb Macro pour ouvrir un fichier Word et copier des données dans des signets
    Par MPRIBOM dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 30/10/2014, 14h00
  2. [XL-2003] Copier plusieurs données dans des pages Internet
    Par Nonno 94 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/10/2012, 06h04
  3. Réponses: 1
    Dernier message: 09/05/2012, 10h22
  4. [XL-2003] Copier coller des données dans des onglets différents
    Par trycoon dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 25/06/2010, 11h20
  5. Stocker des données dans plusieurs matrices différentes
    Par setsuko974 dans le forum Langage
    Réponses: 6
    Dernier message: 23/03/2007, 23h48

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