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 1plage dans plusieur feuilles [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 46
    Points : 14
    Points
    14
    Par défaut copier/coller 1plage dans plusieur feuilles
    bonjour,
    j'aimerais pouvoir crée une macro qui copie des plages de 720 cellules de ma colonne B et qui les colle sur ma feuille cylindre 1
    mais il faut que pour chaque plage de 720cellules il y ai un titre variable en fonction du nombre de colonne , de cycle 1 a cycle X
    mais j'aimerais aussi qu'elle fasse pareille pour la colonne C mais qu'elle la colle dans la feuille cylindre 2
    le nombre de feuilles est variable et le nombre de cycles aussi
    j'ai commencer un code , mais je n'y arrive pas seul , j'aurais besoin que quelqu'un m'explique comment faire plutot qu'on me donne un code tout fait
    voila mon code complet
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Sub Macro2()
    '
    'Ouvrire boite de dialogue
     
    Application.Dialogs(xlDialogOpen).Show
    'copie du fichier
           Range("A1:E57618").Select
        Range(Selection, Selection.End(xlDown)).Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets.Add before:=Sheets(Sheets.Count)
        ActiveSheet.Paste
        Sheets("Feuil1").Select
        Sheets("Feuil1").Name = "donner traiter"
     
    'suppresion d'une ligne sur deux
     
    Dim i As Long
     
    For i = Range("A" & Rows.Count).End(xlUp).Row To 20 Step -2
        Rows(i).Delete
    Next i
     'copie des cycles
        Set Plage = Sheets("donner traiter").Range("A18")
        Set Plage = Range(Plage, Plage.End(xlDown))
        Plage.Copy
     
        'Création des feuilles et collage
        nbfeuilles = Sheets("donner traiter").Range("C11")
        For i = 1 To nbfeuilles
            Sheets.Add after:=Sheets(Worksheets.Count)
            Sheets(Worksheets.Count).Name = "Cylindre" & i
            Range("A1").PasteSpecial xlPasteAll
        Next i
     
        Application.CutCopyMode = False
        'creation des colonne de cycles
       nbcycles = Sheets("donner traiter").Range("C12")
       For i = 0 To nbcycles - 1
       For x = 1 To nbfeuilles
       Sheets.Select ("cylindre" & x)
       LigneDepart = i * 722 + 17
       LigneFin = LigneDepart + 720
       Range(Cells(LigneDepart, 17), Cells(LigneFin, 737)).Copy
       Selection.Copy
       Sheets("Cylindre" & x).Select
       Cells(1, i).Select
       ActiveSheet.Paste
    Next
     
    End Sub

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Bonjour,

    Pour voir comment écrire dans des plages voir la faq VBA ou les cours VBA

    Pour les opérations que tu souhaites effectuer, je dirais de regarder du côté de :
    * Pour les recherches de zone de cellule contigüe ayant un contenu voir :
    - range("<plage de cellule>").end(xlDown).
    - range("<plage de cellule>").end(xlLeft).

    * Pour les écritures de titre en relatif à une plage :
    range("<plage de cellule>").Offset(<nombre de ligne>, <nombre de colonne>).

    * Pour faire un coller dans une feuille et cellule particulière :
    Worksheets("<nom de feuille>").Cells(<ligne>,<colonne>).PasteSpecial (xlPasteValues).

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 46
    Points : 14
    Points
    14
    Par défaut
    ça ma pas l'aire simple du tout , je suis debutant j'en fais que quelque fois en cours
    je vais lire les cours vba et si je comprend pas je revient

  4. #4
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, même si ici il s'agit de concaténer x feuilles dans une seule, le principe de base y est, à adapter à ton contexte.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 46
    Points : 14
    Points
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim LigneDepart as integer, LigneFin as Integer
     
    For i=0 to nbcycle-1
    LigneDepart = i * 720 + 17
     LigneFin = LigneDepart + 720
    '...
    sheets("donner traiter").Select
    range(cells(LigneDepart,17),Cells(LigneFin,736)).select
    selection.copy
    sheets("cylindre" & i).select
    cells(2,i).select
    activesheet.paste
    next
    j'ai deja ça , et j'aimerais qu'il y ai un titre avant chaque plage de 720points et que la colonne B se colle sur la feuille cylindre 1 et la C sur cylindre 2 et ainsi de suite

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    j'aimerais qu'il y ai un titre avant chaque plage de 720points
    Le code posté précédemment est incohérent avec cette demande,
    car il copie beaucoup plus que 720 points. (il copie 720 lignes x 720 colonnes)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range(cells(LigneDepart,17),Cells(LigneFin,736)).select
    Il n'est donc pas possible de déterminer précisément où insérer le titre.

    la colonne B se colle sur la feuille cylindre 1 et la C sur cylindre 2 et ainsi de suite
    Le code ci-dessous :
    - copie les colonnes B,C ... de la feuille "donner traiter", dans les feuilles "cylindres i" en colonne A.
    - ajoute un titre en feuille "cylindres i" cellule "A1"

    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
        Dim nbcycle  As Integer
        nbcycle = 2
     
        For i = 1 To nbcycle
     
            ' copie la colonne A pour i = 0, B pour cycle = 1 ...
            With Worksheets("donner traiter")
                .Cells(1, i+1).EntireColumn.Copy
            End With
     
            With Worksheets("cylindre " & (i))
                ' Colle la colonne copiée dans la feuille "Cylindre i" en colonne "A"
                .Cells(2, 1).EntireColumn.PasteSpecial (xlPasteValues)
                ' Ajoute un titre en "Cylindre i" en cellule"A1"
                .Cells(1, 1).Value = "Titre " & (i)
            End With
        Next

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 46
    Points : 14
    Points
    14
    Par défaut
    je veux copier la plage B17 jusqu'a la fin en B1 de la feuille cylindre 1 et la C17 jusqu'a la fin en B1 de la feuille cylindre 2, en gros

    j'ai modifier ton code pour avoir mes valeurs mais il ne colle pas les plage

  8. #8
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    je veux copier la plage B17 jusqu'a la fin en B1 de la feuille cylindre 1 et la C17 jusqu'a la fin en B1 de la feuille cylindre 2
    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
        Dim nbcycle  As Integer
        nbcycle = 2
     
        For i = 1 To nbcycle
     
            ' copie la colonne B pour i = 1, C pour cycle = 2 ...
            With Worksheets("donner traiter")
                .Range(.Cells(17, i + 1), .Cells(17, i + 1).End(xlDown)).Copy
            End With
     
            With Worksheets("cylindre " & (i))
                ' Colle la colonne copiée dans la feuille "Cylindre i" en place "B1"
                .Cells(1, 2).PasteSpecial (xlPasteValues)
            End With
        Next
     
        Application.CutCopyMode = False
    [...] en gros
    Le problème c'est que la fonction VBA "fait ça en gros", n'existe pas.
    Et le résultat d'un problème exposé de façon vaque, n'a que peu de chance de correspondre à tes attentes.
    Note que le code proposé précédemment répondait au problème tel qu'il était exposé.
    Mais visiblement ne répondait pas à tes attentes.

    Pour éviter de perdre du temps pense à être précis dans tes besoins.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 46
    Points : 14
    Points
    14
    Par défaut
    alors je m'explique
    il faut que j'arrive a faire une macro qui permet de copier la plage b17 juqu'a la fin sur la feuille cylindre 1 en B1 et la c17 jusqu'a la fin en B1 de la page cylindre 2 et ainsi de suite
    et apres il faut que la je puisse copier coller par 720points vers les colonne c d e f jusqu'a la fin sur chaque page
    je sais pas si je me suis bien exprimer
    mais j'aimerais beaucoup qu'on m'aprenne

  10. #10
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    l faut que j'arrive a faire une macro qui permet de copier la plage b17 juqu'a la fin sur la feuille cylindre 1 en B1 et la c17 jusqu'a la fin en B1 de la page cylindre 2 et ainsi de suite
    Si :
    - la feuille source de la copie est "donner traiter",
    - le terme "jusqu'à la fin" désigne une zone continue de donnée de la ligne 17 à la dernière ligne à copiée.
    => Le code posté précédemment devrait faire l'affaire.


    Mais si le terme "jusqu'à la fin" désigne une zone NON continue, il suffit de remplacer la ligne 8 par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range(.Cells(17, i + 1), .Cells(.Rows.Count, i + 1)).Copy

    Apres il faut que la je puisse copier coller par 720points vers les colonne c d e f jusqu'à la fin sur chaque page
    C'est pas assez précis pour pouvoir transformer ça en code.
    Il faudrait quelque chose comme :
    Cycle 1:
    Source : Feuille("donner traiter").Range("A17:A736")
    Destination : Feuille("cylindre 1").Range("C1")

    Cycle 2:
    Source : Feuille("donner traiter").Range("A736:A1456")
    Destination : Feuille("cylindre 2").Range("D1")
    ...

    j'aimerais beaucoup qu'on m'aprenne
    C'est pour ça que je t'ai donner 2 types de pistes :
    - un pour des cours : choisi un cours, et lit chapitre par chapitre en plusieurs fois pour comprendre comment manipuler les éléments d'Excel en VBA.
    - un avec les éléments qui peuvent répondre directement à tes besoins
    (en étudiant les Range(...).End, Cells(...).PasteSpecial(....)
    Sous l'éditeur VBA, tu sélectionne ces fonctions et en appuyant sur <F1> tu trouveras les explications sur ces fonctions.

    Mais je ne peux pas aller plus loin. Si tu veux apprendre, il n'y a pas 36 solutions : c'est à toi de lire les cours, et t'exercer au fur et à mesure.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 46
    Points : 14
    Points
    14
    Par défaut
    Cycle 1:
    Source : Feuille("donner traiter").Range("B17:A737)
    Destination : Feuille("cylindre 1").Range("C2:C721")
    Source : Feuille("donner traiter").Range("B737:A1453)
    range("D2721")
    ainsi de suite
    cycle 2:
    source: feuille("donner traiter").range("C17:C737")
    destination feuille("cylindre 2").range("C2:C721")
    source: feuille("donner traiter").range("C17:C1453")

    range("D2721")
    ainsi de suite

    alors j'ai fait cela mais je ne comprend toujours pas pourquoi il ne colle rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    nbcycle = Range("C12")
          For i = 1 To nbcycle
      Set Plage = Sheets("donner traiter").Cells([2+i], [17])
        Set Plage = Range(Plage, Plage.End(xlDown))
        Plage.Copy
     
      With Worksheets("cylindre " & (i))
        Cells([2+i], [1]).PasteSpecial (xlPasteValues)
        End With
        Next i

  12. #12
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Ce qui suit devrait fonctionner :

    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
        Dim nbcycle  As Integer
        nbcycle = 2
     
        Dim cyi As Integer
        Dim bloci As Integer
     
        For cyi = 1 To nbcycle 'Boucle sur les cylindres
            For bloci = 0 To 39 'Boucle sur les blocs de 720 pts pour cyclindre n° cyi
               With Worksheets("donner traiter")
                   .Range(.Cells(17 + bloci * 720, cyi + 1), .Cells(16 + (bloci + 1) * 720, cyi + 1)).Copy
               End With
     
               With Worksheets("cylindre " & (cyi))
                    .Cells(1, 3 + bloci).Value = "Cylindre(" & cyi & ") Bloc (" & (bloci + 1) & ")"
                   .Cells(2, 3 + bloci).PasteSpecial (xlPasteValues)
               End With
            Next bloci
        Next cyi
     
        Application.CutCopyMode = False
    Comme tu peux le voir, c'est toujours la même méthode qui est utilisée :
    Copy sur des Cells, et PasteSpecial sur d'autres Cells .

  13. #13
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 46
    Points : 14
    Points
    14
    Par défaut
    attend attend ,j'aimerais deja coller les plage que j'ai dans mon code avant de faire cela

  14. #14
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    2 questions sur la ligne 3 de ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("donner traiter").Cells([2+i], [17])
    - pourquoi tu utilise des crochets '[' ']' ? Ca ne fait pas du tout la même chose que des parenthèses.
    - l'ordre des paramètres de Cells(), c'est Cells(<ligne>, <colonne>)
    Tu veux vraiment copier la ligne 2, colonne 17 de la feuille "donner traiter"?

  15. #15
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 46
    Points : 14
    Points
    14
    Par défaut
    pour les crochet j'avais noter comme sa dans mon carnet je savait pas que ce n'etait pas la meme choses
    et pour cells je savais pas non plus

  16. #16
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    D'où l'intérêt de lire les cours pour apprendre la syntaxe.
    Et un simple appuie sur <F1> en surlignant Cells te permet d'avoir des infos sur la fonction pour retrouver ligne, colonne.

  17. #17
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 46
    Points : 14
    Points
    14
    Par défaut
    bon il colle toujour rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    nbcycle = Range("C12")
          For i = 1 To nbcycle
      Set Plage = Sheets("donner traiter").Cells(17 + i, 2)
     
        Set Plage = Range(Plage, Plage.End(xlDown))
        Plage.Copy
     
        Sheets("cylindre " & (i)).Select
        Cells(1, 2 + i).PasteSpecial (xlPasteValues)
        Next i

  18. #18
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Remplace la ligne 1 par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("<nom de feuille contenant le nombre de cycle>").Range("C12")
    Et les lignes 8 et 9 par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("cylindre " & (i)).Cells(1, 2 + i).PasteSpecial (xlPasteValues)

  19. #19
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 46
    Points : 14
    Points
    14
    Par défaut
    j'ai un probleme sur la ligne 7, elle n'appartient pas a la selection apparement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      nbcycle = Sheets("donner traiter").Range("C12")
          For i = 1 To nbcycle
      Set Plage = Sheets("donner traiter").Cells(17 + i, 2)
     
        Set Plage = Range(Plage, Plage.End(xlDown))
        Plage.Copy
         Sheets("cylindre " & (i)).Cells(1, 2 + i).PasteSpecial (xlPasteValues)
        Next i

  20. #20
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Vérifie que tu as bien toutes les feuilles nommées exactement "cylindre 1", "cylindre 2", "cylindre 3", ...

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

Discussions similaires

  1. [XL-2010] Copier coller données depuis plusieurs feuilles avec correspondance
    Par issmino dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/02/2015, 14h50
  2. Réponses: 1
    Dernier message: 10/09/2014, 20h39
  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 un tableaux dans plusieurs feuilles
    Par potenco dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/03/2011, 10h22
  5. Copier/coller dans plusieurs feuilles sous condition
    Par lilou86 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 16/11/2009, 12h18

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