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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du 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
    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 membre du 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
    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
    13 169
    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 : 13 169
    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à.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Nouveau membre du 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
    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 membre du 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
    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 membre du 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
    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

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