Boucle VBA et incrementation

Résolu
Bonjour,

Voici un code que je voudrais répéter 96 fois pour réordonnées mes données. Merci d'avance pour la solution

Sub Macro5()
'
' Macro5 Macro
' Macro enregistrée le 7/07/2011 par Nicolas Vignier
'

'
Range("A3:A7").Select
Selection.Copy
Range("B2").Select
Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _
, Transpose:=True
Rows("3:7").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp

Range("A4:A8").Select
Selection.Copy
Range("B3").Select
Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _
, Transpose:=True
Rows("4:8").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
End Sub

6 réponses

  1. Que veux-tu exactement ?
    Juste répéter 96 fois la macro "macro5" ? Sans rien changer dans la macro ?
    1. J'ai en entré 576 valeurs en colonnes
      1
      2
      3
      4
      5
      6
      1
      2
      3
      4
      5
      6
      etc

      et je veux en sortie

      1 2 3 4 5 6
      1 2 3 4 5 6
      etc
      1. As-tu essayé une boucle :
        for i = 1 to (576-5)
        n1 = "A" & i
        n2 = "A" & (i+5)
        range(n1:n2).Select
        ...
        ...
        ...
        next i

        je pense que quelque chose dans le genre, ça devrait aller.
        Tiens moi au courant.

        Cdt,

        Thordek
    2. Slt Thordek

      sur
      range(n1:n2).Select
      le compilateur reponds
      attenduseparateur de liste ou) attendu

      J'ai essayé Range("n1:n2").Select
      Pas mieux.
      1. tu peux essayer :

        plage= n1 & ":" & n2
        range(plage).Select
      2. Super ca marche! je continu d'ecrire le reste du code avant de crier victoire.
        Merci beaucoup, je te tiens au courant de la suite
    3. Contributeur
      Bonjour

      tes nombres en colonne A, restitution à partir de B3

      Option Explicit 
      Option Base 1 
      Sub faire_matrice_6() 
      Dim Fin As Integer, Nbre As Integer, Max As Byte 
      Dim T_in(), T_out() 
      Dim Cptr_in As Integer, Cptr_out As Integer, col As Byte
      
       
      Fin = Columns("A").Find("*", Range("A1"), , , , xlPrevious).Row 
      T_in = Application.Transpose(Range("A1:A" & Fin).Value) 
      Nbre = UBound(T_in) 
      Max = Int(Nbre / 6) 
      ReDim T_out(Max, 6) 
      
      Cptr_out = 1 
      For Cptr_in = 1 To Nbre 
           For col = 1 To 6 
                T_out(Cptr_out, col) = T_in(Cptr_in) 
                 Cptr_in = Cptr_in + 1 
           Next 
      Cptr_out = Cptr_out + 1 
      Cptr_in = Cptr_in - 1 
      Next 
      Application.ScreenUpdating = False 
      Range("C2").Resize(Max, 6) = T_out 
      End Sub

      Michel
      1. Merci, je regarde ça un peu plus tard
      2. Contributeur
        fallait lire C2 au lieu de B3...
    4. Slt,

      Je m'en suis sorti avec ce code

      For i = 1 To 576
      n1 = "A" & (i + 1)
      n2 = "A" & (i + 5)
      n3 = "B" & i
      plage1 = n1 & ":" & n2
      Range(plage1).Select
      Selection.Copy
      Range(n3).Select
      Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _
      , Transpose:=True
      Range(plage1).Select
      Application.CutCopyMode = False
      Selection.Delete Shift:=xlUp
      Next i

      Merci à tous pour vos conseil et recette.
      1. Slt Thordek

        Je suis vraiment tout debutant dans VBA et dans la programmation aussi excuse d'avance mes questions naïves.

        Merci pour ton aide