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 :

copier cellule d'une feuille à une autre


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2015
    Messages : 54
    Par défaut copier cellule d'une feuille à une autre
    Bonjour

    Le tout parait simple, mais il y a un HIC.

    J'ai tout d'abord une feuille fixe au nom "Compilation". dans le classeur "compilation_stats.xlsm"

    À l'aide d'une macro provenant du classeur "X", je crée des feuilles aux noms variables dans le classeur "compilation_stats.xlsm"

    Je dois récupérer les données des cellules B6 à AL6 des feuilles créées pour les envoyées dans la feuille "compilation" du même classeur.

    Dans la feuille "compilation", les données de la première feuille doivent apparaître dans les cellules B6 à AL6. Les données de la seconde feuille doivent apparaitre dans les cellules B7 à AL7 et ainsi de suite.

    Je suis un peu à bout de recherche.

    Merci encore une fois de votre aide.

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    si ta problématique c'est de gérer ces feuilles crées dynamiquement, tu as plusieurs méthodes

    en voici une : lors de la création de la feuille dynamique, on l'affecte directement à une variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub toto()
        Dim Sh As Worksheet
        Set Sh = ThisWorkbook.Worksheets.Add
    End Sub
    Ainsi, pour faire ton copier, tu utilisera Sh pour faire référence à la feuille


    Ensuite, comment gérer le fait qu'il ny' a pas qu'une mais plusieurs feuille ? Là ça dépend de ce que fais ta procédure.
    Le plus simple et de faire une boucle pour chaque feuille :

    - création de la feuille avec instanciation dans la variable Sh
    - actions à faire sur la feuille
    - copie vers la feuille compilation
    - on recommence la boucle avec la création d'une autre feuille
    - etc..

  3. #3
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2015
    Messages : 54
    Par défaut
    Bonjour

    Je reviens à la charge. Pour la création dynamique des feuilles je sais le faire.

    Je suis un peu pris à cette étape. Je vous explique:

    Le fichier maître (Création) contient des noms de joueurs. Avec une macro, je créer un dossier compilation et un fichier compilation.xlsm contenant une feuille compilation et tout les feuilles des joueurs.

    Dans chaque feuille de joueurs, les statistiques se retrouve de B6 à AL6.

    J'aimerais pouvoir récupérer les valeurs contenu dans le B6-AL6 et les faire apparaître dans la feuille compilation.

    J'ai réussi avec cette macro:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Sheets("compilation").Select
        Range("B6") = "=test!B6"
    Par contre, le problème c'est que j'ai plusieurs feuilles donc les cellules de la feuille compilation doivent ce voir comme suit B7 pour la feuille suivante, B8 et ainsi de suite.

    Je sais qu'il y a surment une solution.

    Merci

  4. #4
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,
    Essaye ça. A adapter à ton fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Compilation()
    Dim ws As Worksheet, Rw&, Der_L As Long
     
    Der_L = Sheets("COMPILATION").Range("B5").CurrentRegion.Resize(, 1).Rows.Count
     
            For Each ws In Worksheets
               If ws.Name <> "COMPILATION" Then
                Sheets("COMPILATION").Range("B" & 5 + Rw + Der_L & ":" & "AL" & 5 + Rw + Der_L).Value = ws.Range("B6:AL6").Value
                Rw = Rw + 1
            End If
        Next ws
     
    End Sub
    Merci de cliquer sur ça te convient
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  5. #5
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Merci de cliquer sur ça te convient [/QUOTE]

    Question bête :p
    Pourquoi utiliser Rw au lieu d'incrémenter directement Der_L

  6. #6
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    tout simplement par ce que je fais du vba qu'à de rare occasion (quand jen ai besoin pour me créer un outil de travail), je suis pas un pro et en plus je suis en train d'apprendre; répondre à des post me sert d'exercices concret
    mais si tu veux simplifier le code je suis preneur ça permettra de m' (nous) améliorer
    et le rôle du forum c'est l'entraide, et je le fait avec les moyens que j'ai
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  7. #7
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    un exemple d'adaptation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Compilation()
    Dim Ws As Worksheet
        With Sheets("Compilation")
            If .Cells(5, 2) = "" Then .Cells(5, 2) = "TEMP"
     
            For Each Ws In Workbooks("Création").Worksheets
                .Cells(.Rows.Count, 2).End(xlUp)(2).Resize(1, 37).Value = Ws.Cells(6, 2).Resize(1, 37).Value
            Next Ws
     
            If .Cells(5, 2) = "TEMP" Then .Cells(5, 2).Clear
        End With
    End Sub
    étant donné qu'on doit commencer à copier vers B6, et ne sachant pas comment est la structure de la feuille de destination, j'ai ajouté l'écriture d'une valeur temporaire en B5 (si elle était vide) afin de pointer B6 au premier tour de boucle s'il n'y a rien d'écrit après la ligne 6

    à adapter, c'était juste un exemple

  8. #8
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour à vous, Bonjour au forum,

    Je me permets.

    1 - Pour la création des feuilles du fichier "maître" vers le fichier de destination
    Si les noms de joueurs sont reportés dans une colonne sans doublon, alors il faut balayer cette liste pour créer le feuilles correspondantes dans le classeur de destination
    S'il y a doublons, alors utiliser un dictionnaire

    2 - Dans ce dossier de classeur de destination, le plus simple, à mon avis et si cette notion est intégrée, serait d'utiliser une variable tableau qui serait
    - alimentée par les différentes feuilles, dont le nom est différent de "compilation"
    - transposée dans la feuille "compilation"

    A votre disposition.

  9. #9
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Hi Joe,
    je crois qu'il y a une erreur dans ton code, a toi de me le dire :
    dans la boucle for each il prends en compte toutes les feuilles? car si c'est le cas, il prends aussi Range("B6:AL6") de la feuille compilation
    alors?

    En tout cas j'ai une erreur type 9 : "l'indice n'appartient pas à la sélection" ??

    ok autant pour moi j'ai trouvé :
    1) j'avais viré : Workbooks("Création"). | pour tester sur le même classeur, d'où la ligne supp
    2) sur Mac vaut mieux éviter les é et écrire "Creation" et mettre ".xls" ou autre comme "Creation.xls"
    Voilà
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  10. #10
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2015
    Messages : 54
    Par défaut
    Re bonjour

    J'ai tester le code de RyuAutodidacte et le tout fonctionne a merveille.

    Un nouveau problème se pointe.

    J'ai placé ce code dans Workbook_Open car je veux que ce code s'exécute dès l'ouverture pour mettre à jour la feuille compilation automatiquement.

    Cela fonctionne très bien.

    Par contre, j'aimerai que les nouvelles feuilles se placent à la fin des autres.

    Ensuite, vu que j'ai placé la macro dès l'ouverture, le tout fait une mise à jour de la feuille compilation. Lorsque je place une donnée dans une cellule de la feuille compilation, elle s'efface dès l'ouverture, car elle ne se trouve pas dans la feuille de provenance des données.

    Je sais pas si je suis claire

    Merci de votre aide

  11. #11
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    bonsoir,
    désolé mais pour ma part ce n'est pas assez claire

    il faudrait que tu posts un fichier d'exemple xlsx avec de fausses données (si c'est confidentiel) avec ce que tu as au départ (ex : feuille compilation1),
    l'erreur que ça te fait (ex : feuille compilation2), et ce que tu aimerai comme résultat (ex : feuille compilation3). Poster ton code…

    il faudrait aussi que tu expliques exactement la façon dont ton fichier marche, car si les données sont sur le même classeur (où se trouve compilation),
    à chaque fois que tu vas ouvrir ton fichier, il ajoutera les mêmes données se trouvant dans les autres feuilles de ton classeur, sur la feuille compilation

    Dans le cas où tes données sont sur un classeur différent, la solution de joe.levrai est adéquate (par contre il faut que le classeur où se trouve tes données soit ouvert)

    Après dans le cas où tes données sont sur un classeur différent, rien ne t'empêche de rajouter du code dans le"Workbook_Open" pour ouvrir automatiquement le fichier "base de données" (par exemple) et
    ajouter les données dans compilation automatiquement => sur la base du code de joe.levrai
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  12. #12
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Workbook_Open()
    'Dans le cas où ton classeur de données est dans le même dossier que le classeur compilation
    Workbooks.Open Workbooks(ActiveWorkbook.Name).Path & ":" & "Donnees.xls" 'Workbooks.Open Workbooks(ActiveWorkbook.Name).Path = chemin du dossier
                                            'Pour mac => ":" | Pour PC => "\" | "Donnees.xls" = nom de ton fichier de données
    Me.Application.Workbooks(1).Activate 'Pour mettre ton fichier compilation au 1er plan
    MaCompilation 'nom de la macro (dans module 1 par exemple) copiant les données dans la feuille compilation
    'Attention : la macro "MaCompilation" (nom fictif ici) est basée sur le code de joe.levrai
    Me.Application.Workbooks(2).Close False 'Pour fermer ton fichier de données sans sauvegarder celui-ci
    End Sub
    Cf. code de joe.levrai sur le post #7
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/12/2012, 13h29
  2. [XL-2003] Copier le code VBA d'une feuille à une autre avec une macro
    Par Pimpampoum dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/02/2012, 15h57
  3. [XL-2007] Copier/Coller de formules d'une feuille à une autre
    Par Maady dans le forum Excel
    Réponses: 4
    Dernier message: 09/09/2010, 16h59
  4. Comment copier des option boutons d'une feuille à une autre en vba?
    Par muska78 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/06/2008, 16h50
  5. [VBA-E]Copier un lien hypertexte d'une feuille à une autre
    Par DomBourti dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/04/2006, 17h01

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