Ecriture macro avec incrémentation de ligne

Résolu
Bonjour,

Je vais essayer d'être le plus explicite possibel !

J'ai commencé une macro,

je me suis aidée de l'enregistreur,

Je voudrai que ma macro me permette de copier coller une parte de feuille sur une autre,

C'est à dire que quand j'appuie sur un bouton ou que je déclenche ma macro, elle me colle cette partie de feuille A à partir de la cellule A1 de la feuille B, et qu'ensuite si je redéclenche plus tard cette macro, qu'elle copie en A35..

J'avais commencé par définir quelques variables mais je fais des erreurs de "syntaxtes" et autre, comme je démarre vba.. Du coup j'essaie de m'aider du code suivant pour écrire mais je ne m'en sors pas;

Sub FeuillePalette2()



Dim LignFeuille As Long
Dim FeExtra As Worksheet
Dim FeType As Worksheet
Dim FePalette As Worksheet

Set FeExtra = ThisWorkbook.Sheets("Extraction cia flu")
Set FeType = ThisWorkbook.Sheets("Feuille Type")
Set FePalette = ThisWorkbook.Sheets("Palettes contrôlées")

    
    FeType.Range("A1:F39").Copy
    FePalette.Range("A1").Select
    ActiveSheet.Paste
    Sheets("Palettes contrôlées").Select
    ActiveWindow.ScrollRow = 10
    Range("A39").Select
    ActiveSheet.Paste
    ActiveWindow.ScrollRow = 11
    ActiveWindow.ScrollRow = 18
    ActiveWindow.ScrollRow = 21
    ActiveWindow.ScrollRow = 22
    ActiveWindow.ScrollRow = 23
    ActiveWindow.ScrollRow = 24
    ActiveWindow.ScrollRow = 23
    ActiveWindow.ScrollRow = 18
    ActiveWindow.ScrollRow = 17
    ActiveWindow.ScrollRow = 16
    ActiveWindow.ScrollRow = 15
    ActiveWindow.ScrollRow = 14
    ActiveWindow.ScrollRow = 13
    ActiveWindow.ScrollRow = 12
    ActiveWindow.ScrollRow = 11
    ActiveWindow.ScrollRow = 10
    ActiveWindow.ScrollRow = 9
    ActiveWindow.ScrollRow = 8
    ActiveWindow.ScrollRow = 7
    ActiveWindow.ScrollRow = 6
    ActiveWindow.ScrollRow = 5
    ActiveWindow.ScrollRow = 4
    ActiveWindow.ScrollRow = 3
    Sheets("Feuille Type").Select
    Range("B11:E29").Select
    
    Range("E29").Activate
    Application.CutCopyMode = False
    Selection.ClearContents
    ActiveWindow.ScrollRow = 9
    ActiveWindow.ScrollRow = 8
    ActiveWindow.ScrollRow = 7
    ActiveWindow.ScrollRow = 6
    ActiveWindow.ScrollRow = 5
    ActiveWindow.ScrollRow = 4
    ActiveWindow.ScrollRow = 3
    ActiveWindow.ScrollRow = 2
    ActiveWindow.ScrollRow = 1
    Range("D3").Select
    Selection.ClearContents
    Range("C6").Select
    Selection.ClearContents
    Range("E8").Select
    Selection.ClearContents
End Sub


Si vous aviez des conseils de rédaction ou autre, celà m'aiderai grandement !

Merci d'avance,

8 réponses

  1. Ces 3 lignes doivent suffire

    FeType.Range("A1:F39").Copy 'copie les cellule de A1 à F39 de la feuille Fetype  
    FePalette.Range("A1").Select 'selectionne la cellule A1 de la feuille Fepalette  
        ActiveSheet.Paste 'Colle la copie sur la feuille Fepalette (feuille active) 


    Avec ca tu devrai pouvoir arriver a tes fins.

    Le premier pas vers la solution est la recherche. Notre ami Google connaît sûrement la solution...
    0
    1. Nice,

      Je vais tenter :D

      Merci !
      0
      1. Bon j'ai essayé,

        Ca fonctionne bien, mais je n'arrive pas à intégrer mon incrémentation...

        J'ai essayé plein de trucs différents.

        J'ai tenté avec un If mais je ne sais pas trop comment faire.

        :s

        J'étais partie sur un truc du style :

        Si la cellule C3 n'est pas vide alors, il faut coller à LignFeuille + 39,

        J'ai essayé de différente façon, mais je n'ai toujours pas saisi la logique du vba ... Dès que je colle, ça colle à l'infini à partir de LignFeuille + 39 ...

        Comment faire pour dire " Coller une seule fois " ?
        0
        1. Explique précisement ce que tu veux faire. Parce que je ne comprend pas tout.

          J'essayerai de te filé le code après.
          0
          1. J'ai ma plage A1:A39 sur FeType qui est tjs la même et qu eje modifie a l'aide d'une autre macro, du coup j'aimerai coller cette plage sur FePalette, mais si j'ai déjà une plage coller sur cette FePalette, j'aimerai qu'il la colle juste en dessous .. :s

            Du coup j'ai tenté en mettant LignFeuille, pour pouvoir ensuite mettre LignFeuille = LignFeuille + 39.

            Voilà j'espère avoir été précise ..

            Merci beaucoup !
            0
            1. oui, c'est bon :).

              Je te regarde ca.
              0
          2. Worksheets("Fetype").Range("A1", "A39").Copy
            Worksheets("Fepalette").Select
            If Cells(39, 1).Value = "" Then
            Range("A1").Select
            ActiveSheet.Paste
            Else
            Range("A40").Select
            ActiveSheet.Paste
            End If
            0
            1. Ca fait un truc bizarre,

              Ca copie que ma colonne A même si je modifie la plage de donnée..

              Et je ne peux vraiment pas insérer une variable pour selectionner ma cellule de "collage" ? De façon à ce qu'il cherche lui même ou coller.
              0
            2. Oh j'ai vu xD pour la colonne A :p
              0
            3. J'en deviens stupide .. Désolée ;)
              0
          3. En faite j'étais partie sur un truc dans ce style là,

            FeType.Range("A1:F39").Copy
            FePalette.Select

            LignFeuille = 1

            If Cells(LignFeuille, 3).Value = "" Then

            Range("A1").Select
            ActiveSheet.Paste

            LignFeuille = LignFeuille + 39

            Else:

            Range("A" & LignFeuille).Select
            ActiveSheet.Paste

            End If

            Pour pouvoir coller autant de fois que je veux sans me soucier de la destination. Sauf qu'évidemment, mon code merdouille :p Et que je ne sais pas ce que je dois rajouter ^^'
            0
            1. voila avec cette maccro tu peux copier autant de fois que tu veux, cela se met a la suite avec un espace entre chaque.

              Worksheets("Fetype").Range("A1", "A39").Copy
              Worksheets("Fepalette").Select
              If Cells(39, 1).Value = "" Then
              Range("A1").Select
              ActiveSheet.Paste
              Else
              For i = 40 To 65500 Step 40
              If Cells(i, 1).Value = "" Then
              Range("A" & i).Select
              ActiveSheet.Paste
              Exit Sub
              End If
              Next i
              0
              1. Ca marche ! Merci beaucoup !

                Par contre est-ce que tu saurai me dire, pourquoi le logo que j'ai sur la FeType se copie de 4 à 6 fois au même endroit sur ma FePalette ? x_O

                C'est super bizarre :s

                Est-ce que tu aurais une diée ? ^^'
                0
              2. idée*
                0
              3. Il est situé dans quelle cellule ce logo?
                0
              4. Euh il est "étalé" de B2 à B3 en gros
                0
              5. Ben in doit dépasser sur les cases A2 et A3 donc il doit être copié avec.

                Déplace le plus vers la droite
                0