Macro pour débutant.

Résolu
Bonjour à tous,

Je suis actuellement en stage et on me demande de réaliser quelque chose mais j'ai beaucoup de mal.
Sur une feuille 1 de Excel 2013, les cellules sont complétent de A à W de A1 à A67. On me demande de trouver un moyen automatique pour ne copier seulement les colonnes A, E, G, H, I, L et O dans une feuille 2. Malheureusement je n'ai jamais utiliser de Macro et j'ai beaucoup de mal.
Quelqu'un aurait'il la possiblité de me transmettre le code source ou VBA ( je ne sais pas comment on dit) que je dois taper pour créer cette macro ?
Merci beaucoup.

Cordialement.

7 réponses

  1. Contributeur
    Bonjour,

    autre proposition :
    Sub copierCol()
        Dim co As Variant, col As Long
        co = Array("A", "E", "G", "H", "I", "L", "O")
        For col = 0 To UBound(co)
            Worksheets("Feuil2").Cells(1, co(col)).Resize(67, 1).Copy Worksheets("Feuil1").Cells(1, col + 1).Resize(67, 1)
        Next col
        [Feuil1!A1].AutoFilter
    End Sub


    @philou :
    Si tu pouvais limiter tes horreurs aux formules stp.
    Soit raisonnable, prend le temps d'apprendre un peu vba avant...

    eric
    1
    1. Bonjour,
      Merci beaucoup. Peux tu me dire comment je dois faire pour que si une feuille 2 est déjà ouverte, elle s'ouvre en feuille 3 et ainsi de suite ?
      0
    2. Contributeur
      Si j'ai inversé le noms de feuilles mets les noms qui t'intéressent.
      Ici les données de Feuil2 sont collées sur Feuil1

      Une feuille ne s'ouvre pas, à la limite elle s'active.
      comment je dois faire pour que si une feuille 2 est déjà ouverte, elle s'ouvre en feuille 3 et ainsi de suite ? ne veut rien dire...

      eric
      0
    3. He bien si j'ai déja une feuille1 et une feuille2 d'activé comment faire pour qu'elle s'active en feuille3 ? Idem si j'ai 3 feuilles déjà active
      0
    4. Contributeur
      Une seule feuille peut être active (car ça m'étonnerait que tu parles de sélection 3D), utilises le bon vocabulaire si tu veux qu'on comprenne qcq chose.
      Si ta question de départ est résolue met ce fil en résolu (en haut vers ton titre), et démarre une nouvelle question en t'expliquant mieux.

      eric
      0
  2. Contributeur
    Bonjour

    Voici le code avec le filtre

    Sub COPIE_AEGHILO()
    '
    ' COPIE_AEGHILO Macro
    '

    '
    Range("A1:A67").Select
    Selection.Copy
    Sheets("Feuil2").Select
    ActiveSheet.Paste
    Sheets("Feuil1").Select
    Range("E1:E67").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Feuil2").Select
    Range("B1").Select
    ActiveSheet.Paste
    Sheets("Feuil1").Select
    Range("G1:I67").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Feuil2").Select
    Range("C1").Select
    ActiveSheet.Paste
    Sheets("Feuil1").Select
    Range("L1:L67").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Feuil2").Select
    Range("F1").Select
    ActiveSheet.Paste
    Sheets("Feuil1").Select
    Range("O1:O67").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Feuil2").Select
    Range("G1").Select
    ActiveSheet.Paste
    Range("A1:G1").Select
    Application.CutCopyMode = False
    Selection.AutoFilter
    End Sub

    -2
    1. Bonjour Scelera,

      Tu demandes le code VBA.

      Ok, mais sais tu au moins où saisir ce code ?

      Il ne sa'agit pas d'une formule classique.
      0
      1. Bonjour,
        Oui je sais où il faut saisir ce code. Le seul probléme c'est que je ne suis pas un adepte de celà !
        0
      2. Bonjour Scelera,

        Désolé pour ma réponse tardive.
        je vois que t'as déjà eu 2 propositions :
        J'ai testé celle d'éric mais il y a l'air d'y avoir un problème (elle bug)
        celle de Philou10120 est tiré de l'enregistreur de macro mais le seul problème c'est que le code est long et polué de plein de chose inutile.

        Je te propose donc ce code plus clair avec explication de chaque ligne de code :

        Sub AEGHILO()
        'Sélection de la feuille en première position (à partir de la gauche)
        Sheet(1).Select
        'Sélection des ligne 1 à 67 pour les colonnes A,E,G,H,I,L,O
        Range("A1:A67,E1:E67,G1:G67,H1:H67,I1:I67,L1:L67,O1:O67").Select
        'Copie des Données
        Selection.Copy
        'Sélection de la feuille en deuxième position (à partir de la gauche)
        Sheets(2).Select
        'Collage des Données
        ActiveSheet.Paste
        'Sélection de ligne 1 de la deuxième feuille
        Rows("1:1").Select
        'Activation du filtre
        Selection.AutoFilter
        End Sub

        Une fois le code maitrisé tu pourras supprimer toutes les lignes en vert sur la macro (elle seront verte sur Excel, pas dans ce message)
        0
      3. Bonjour WeaponEDGe,

        Merci pour ton aide. Voici ma macro mais ça ne fonctionne car ça bloque sur ActiveSheet.paste et je ne sais pas pourquoi !

        Sub Macro2()
        '
        ' Macro2 Macro
        '
        ' Touche de raccourci du clavier: Ctrl+a
        '
        Range("G:G,H:H,I:I,J:J,K:K,O:O,Q:Q,AG:AG,AH:AH,AI:AI,AK:AK,AL:AL,AR:AR,AS:AS"). _
        Select
        Range("AS1").Activate
        Selection.Copy
        Sheets("Feuil2").Select
        Columns("A:A").Select
        ActiveSheet.Paste
        Columns("A:N").EntireColumn.AutoFit
        Range("A1:N1").Select
        Range("N1").Activate
        Application.CutCopyMode = False
        Selection.AutoFilter
        End Sub
        0
      4. Contributeur
        Re,

        J'ai testé celle d'éric mais il y a l'air d'y avoir un problème (elle bug)
        Tu peux être plus précis ?
        J'ai testé avant de poster : https://www.cjoint.com/?CFlko5EW5g9
        Ceci dit ta proposition est bien, sans doute plus simple à comprendre pour débuter.

        eric
        0
      5. Bonjour Eric,

        Ne le prend pas mal, c'est pas un reproche,
        En fait je travaille sur une version anglaise d'Excel.
        Du coup j'ai remplacé les Feuil par Sheet mais j'ai eu quand même un débug
        Mais le problème venait de moi j''avais pas tilté que la copie se faisait de la feuille 2 vers la 1 du coup il effaçait les donnée au lieu de les coller et lors de l'activation du filtre débug puisqu'il n'y a plus de donné.

        En effet ta Macro fonctionne bien mais pour un débutant elle est trop technique.
        Je tâcherais de pas faire de conclusion active la prochaine fois ;-p

        Scelera,

        J'ai testé ta macro, sur Excel 2010 ça passe bien.
        Essayes de remplacer Columns("A:A").Select par [A1].select
        Le fait de sélectionner une colonne pour copier des données de plusieurs colonne peut parfois poser problème.
        0
    2. Salam scelera. :)

      Je pense qu'il n'y a pas besoin de code pour cela, il suffit de se rendre sur la feuille 2 et de procéder comme suit :

      - dans la cellule A1, saisir =Feuil1!A1
      - dans la cellule B1, saisir =Feuil1!E1
      - dans la cellule C1, saisir =Feuil1!G1
      - dans la cellule D1, saisir =Feuil1!H1
      - dans la cellule E1, saisir =Feuil1!I1
      - dans la cellule F1, saisir =Feuil1!L1
      - dans la cellule G1, saisir =Feuil1!O1
      - sélectionner la plage (A1:G1) et tirer la poignée de recopie vers le bas jusqu'à la ligne 67.

      Cela répond-t-il à ta question?
      0
      1. Bonjour,
        Ce n'est pas tout à fait ça parceque en fait l'opération devra se répéter souvent et donc on voudrait un moyen automatique pour procéder à cela.
        0
    3. Contributeur
      Bonjour

      Voici une macro toute bête enregistrée directement
      Menu Développeur
      Code
      Enregistrer une macro
      Dés que vous appuyez sur ce bouton toutes vos actions sont enregistrées,
      les manipulations faites à la souris et les touches clavier
      le résultat à incorporer dans un module Visual basic

      Sub Copie_AEGHILO()
      '
      ' Copie_AEGHILO Macro
      '

      '
      Sheets("Feuil1").Select
      Range("A1:A67").Select
      Selection.Copy
      Sheets("Feuil2").Select
      Range("A1").Select
      ActiveSheet.Paste
      Sheets("Feuil1").Select
      Range("E1:E67").Select
      Application.CutCopyMode = False
      Selection.Copy
      Sheets("Feuil2").Select
      Range("B1").Select
      ActiveSheet.Paste
      Sheets("Feuil1").Select
      Range("G1:I67").Select
      Application.CutCopyMode = False
      Selection.Copy
      Sheets("Feuil2").Select
      Range("C1").Select
      ActiveSheet.Paste
      Sheets("Feuil1").Select
      Range("L1:L67").Select
      Application.CutCopyMode = False
      Selection.Copy
      Sheets("Feuil2").Select
      Range("F1").Select
      ActiveSheet.Paste
      Sheets("Feuil1").Select
      ActiveWindow.SmallScroll ToRight:=2
      Range("O1:O67").Select
      Application.CutCopyMode = False
      Selection.Copy
      Sheets("Feuil2").Select
      Range("G1").Select
      ActiveSheet.Paste
      Range("A1").Select
      End Sub

      J'espère vous avoir aidé
      -3
      1. Bonjour,
        La formule que vous m'avez donné correspond à ce que je recherchais !
        Savez - vous le code pour y ajouter un filtre automatique pour chaque colonne en feuille 2 ?
        Merci pour votre aide !
        0
    4. Contributeur
      Bonjour,

      Et on les colle comment: Jointives et à partir d'où ou les colle en A,E,G..... ?

      Michel
      0
      1. On les colle côte à côte en feuille 2 c'est à dire que les colonnes AEG... de la feuille 1 doivent apparaître en ABC... de la feuille 2 et il faudrait y faire figurer en feuille 2 le filtre pour chaque colonne.
        Merci de votre aide.
        0
    5. Bonjour,

      trouver un moyen automatique avec quel critere(s), chaque modif de cellules ou ...... ?????
      copier AEGHIL vers les memes colonnes ou l'une a cote de l'autres sur la feuille2 ??

      A+
      0
      1. Bonjour,
        Oui je voudrai copier l'emsemble du contenu de chaque colonne AEGHIL l'une à côté de l'autre sur la feuille 2 en y ajoutant le filtre.
        Merci pour votre aide.
        0