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 coller valeur dans une autre feuille avec itération de colonne


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 1
    Points
    1
    Par défaut copier coller valeur dans une autre feuille avec itération de colonne
    Bonjour,

    Je suis débutant avec vba (je teste depuis hier soir). Voilà ce que je veux faire :
    - Dans excel, j'ai une feuille par élève regroupant des calculs.
    - Sur la feuille de chaque élève je veux copier les valeurs (et non les formules) de 3 colonnes.
    - Les infos copiées, je veux les coller sur 1 seule feuille permettant de tout centraliser.
    -La difficulté est que je veux coller le premier élève sur les 3 premières colonnes, puis le second sur les colonne 5 6 et 7 (une colonne d'espace entre chaque élève) et ainsi de suite.

    Voici le code que j'ai écrit mais qui ne fonctionne pas car aucune information n'est collée :

    Sub CopierColler()
    Dim i, x, y, z As Integer
    i = 3
    x = 1
    y = 2
    z = 3
    Worksheets(i).Select
    Columns(34).Formula = Columns(34).Value
    Columns(35).Formula = Columns(35).Value
    Columns(36).Formula = Columns(36).Value
    Worksheets(i).Select
    Columns(34).Copy
    With Sheets("parents T1")
    Columns(x).PasteSpecial xlPasteAll
    End With
    Worksheets(i).Select
    Columns(35).Copy
    With Sheets("parents T1")
    Columns(z).PasteSpecial xlPasteAll
    End With
    Worksheets(i).Select
    Columns(36).Copy
    With Sheets("parents T1")
    Columns(z).PasteSpecial xlPasteAll
    End With
    i = i + 1
    x = x + 3
    y = y + 3
    z = z + 3
    If i = 33 Then Exit Sub
    End Sub

    Pouvez me donner un coup de main ?

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut Pouvez me donner un coup de main ?
    Bonjour,
    Si tu donnais un exemple de classeur Excel ça aiderait bien

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Je n'arrive pas à mettre en pièce jointe mon fichier

  4. #4
    Invité
    Invité(e)
    Par défaut
    il faut le ziper le forum ne veut pas de xlsm

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Dans cette première partie de code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Worksheets(i).Select
    Columns(34).Formula = Columns(34).Value
    Columns(35).Formula = Columns(35).Value
    Columns(36).Formula = Columns(36).Value
    Worksheets(i).Select
    Columns(34).Copy
    Alors à moins que la valeur de la variable i ait changé entre temps pourquoi deux Select ?
    Et cette ligne
    Columns(x).Formula = columns(x).value ???
    Peut se traduire par
    Columns(x).Value = Columns(x).Value
    Et comme, les 3 colonnes sont contiguës et pas insérées dans une boucle, tu peux utiliser les lettres des colonnes en plaçant les bornes inférieures et supérieures comme cet exemple Columns("G:I").Value = Columns("G:I").Value. Attention, c'est un exemple. Je sais que G n'est pas la 34ème colonne.
    Première remarque, inutile d'utiliser les Select, Activate, Selection
    Il est préférable d'utiliser le bloc With
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Worksheets(i)
    .Columns("G:I").Value = .Columns("G:I").Value
    End With
    Deuxième remarque dans le bloc With End With, il y a lieu d'utiliser le point d'union afinc de ratacher l'objet Columns(x) à l'objet Parent Sheets("parents T1")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Sheets("parents T1")
    .Columns(x).PasteSpecial xlPasteAll
    End With
    Je me suis arrêté là.

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    J'ai simplifié le code,

    Sub boucle_while()
    Dim i, x, y, z As Integer
    i = 4
    x = 1
    y = 2
    z = 3
    While i <= 6

    Worksheets(i).Select
    Columns(34).Copy
    Sheets("pT1").Select
    Columns(x).PasteSpecial xlPasteValues

    Worksheets(i).Select
    Columns(35).Copy
    Sheets("pT1").Select
    Columns(y).PasteSpecial xlPasteValues

    Worksheets(i).Select
    Columns(36).Copy
    Sheets("pT1").Select
    Columns(z).PasteSpecial xlPasteValues

    i = i + 1
    x = x + 4
    y = y + 4
    z = z + 4
    Wend
    End Sub

    Par contre, est-il possible de copier la valeur et le format d'une cellule sans faire columns(x).formula=columns(x).values parce que c'est très long pour l’exécution du code pour 30 feuilles élèves ?

    Merci d'avance

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Dans cette première partie de code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Worksheets(i).Select
    Columns(34).Formula = Columns(34).Value
    Columns(35).Formula = Columns(35).Value
    Columns(36).Formula = Columns(36).Value
    Worksheets(i).Select
    Columns(34).Copy
    Alors à moins que la valeur de la variable i ait changé entre temps pourquoi deux Select ?
    Et cette ligne
    Columns(x).Formula = columns(x).value ???
    Peut se traduire par
    Columns(x).Value = Columns(x).Value
    Et comme, les 3 colonnes sont contiguës et pas insérées dans une boucle, tu peux utiliser les lettres des colonnes en plaçant les bornes inférieures et supérieures comme cet exemple Columns("G:I").Value = Columns("G:I").Value. Attention, c'est un exemple. Je sais que G n'est pas la 34ème colonne.
    Première remarque, inutile d'utiliser les Select, Activate, Selection
    Il est préférable d'utiliser le bloc With
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Worksheets(i)
    .Columns("G:I").Value = .Columns("G:I").Value
    End With
    Deuxième remarque dans le bloc With End With, il y a lieu d'utiliser le point d'union afinc de ratacher l'objet Columns(x) à l'objet Parent Sheets("parents T1")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Sheets("parents T1")
    .Columns(x).PasteSpecial xlPasteAll
    End With
    Je me suis arrêté là.
    Merci beaucoup pour le temps passé à répondre ! Je mets du temps à comprendre, je débute. Je vais faire les modifs conseillées

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Columns(x).Formula = columns(x).value ???
    Peut se traduire par
    Columns(x).Value = Columns(x).Value

    Si je ne mets pas cette étape, il me colle les formules, du coup je perds toutes les bonnes valeurs

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Je ne peux pas faire columns(34:36), la syntaxe n'est pas bonne. Cela marche avec range mais en utilisant range, il faut mettre les lettres des colonnes. Le problème c'est que je ne sais pas faire les itérations avec les lettres

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par profnans Voir le message
    Je ne peux pas faire columns(34:36), la syntaxe n'est pas bonne. Cela marche avec range mais en utilisant range, il faut mettre les lettres des colonnes. Le problème c'est que je ne sais pas faire les itérations avec les lettres
    Je n'ai certainement pas écrit d'utiliser cette syntaxe columns(34:36), il faut bien lire ce que j'ai écrit.
    Et comme, les 3 colonnes sont contiguës et pas insérées dans une boucle, tu peux utiliser les lettres des colonnes en plaçant les bornes inférieures et supérieures comme cet exemple Columns("G:I").Value = Columns("G:I").Value
    Et je n'ai pas oublié de préciser "Je sais que G n'est pas la 34ème colonne".

  11. #11
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par profnans Voir le message
    Columns(x).Formula = columns(x).value ???
    Peut se traduire par
    Columns(x).Value = Columns(x).Value
    Si je ne mets pas cette étape, il me colle les formules, du coup je perds toutes les bonnes valeurs
    Je doute que tu aies testé, ce que je fais toujours avant de déposer une réponse sur ce forum même si je suis sûr à 95%

  12. #12
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tu dis avoir simplifié ton code et tu écris encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Worksheets(i).Select
    Columns(34).Copy
    Sheets("pT1").Select
    Columns(x).PasteSpecial xlPasteValues
    Lis-tu vraiment les réponses jusqu'au bout.
    Pas de Select, Selection et Activate. Cela ne sert à rien et cela ralenti les procédures.

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    T'es gentil philippe mais tu as sans doute un problème de communication... Tu n'es pas obligé d'être méprisant.

    De plus le code simplifié je l'ai envoyé avant avoir lu ta réponse car même si je pose la question, je cherche encore de mon côté.

    Merci encore pour ton aide, mais je vais me débrouiller autrement

  14. #14
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par profnans Voir le message
    T'es gentil philippe mais tu as sans doute un problème de communication... Tu n'es pas obligé d'être méprisant.
    De plus le code simplifié je l'ai envoyé avant avoir lu ta réponse car même si je pose la question, je cherche encore de mon côté.
    Merci encore pour ton aide, mais je vais me débrouiller autrement
    Je ne pense avoir été méprisant.
    Excédé peut-être suite à deux messages qui étaient en contradiction avec ce que j'avais écrit et dont l'un affirmait une chose que je n'avais pas écrite.
    Alors désolé si tu n'avais pas déjà lu mon premier message.

Discussions similaires

  1. Copier coller une feuille dans une autre feuille avec condition
    Par souhail72 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 06/03/2015, 09h52
  2. [XL-2010] Pb avec le copier coller conditionnel vers une autre feuille
    Par awa123 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/08/2014, 09h10
  3. copier coller couleur dans une autre feuille grâce a un bouton
    Par antoine2933 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/07/2011, 22h52
  4. copier donnée valide dans une autre feuille
    Par marie33000 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 16/04/2009, 20h25
  5. Pour chaque ligne supprimée, copier cette ligne dans une autre feuille
    Par athos7776 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/10/2008, 03h35

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