Report cellule toutes les 17 lignes

Bonjour

Comment simplifier le code suivant svp sachant que

* AE2 (dans l'exemple ci-dessous) est constant

* Le report se fait toutes les 17 lignes dans la feuille "Synt" (51, 68, etc jusqu'à ligne 304)

Sheets("Synt").[C51] = Sheets("Param").[AE2]
Sheets("Synt").[C68] = Sheets("Param").[AE2]
Sheets("Synt").[C85] = Sheets("Param").[AE2]
Sheets("Synt").[C102] = Sheets("Param").[AE2]
Sheets("Synt").[C119] = Sheets("Param").[AE2]
Sheets("Synt").[C136] = Sheets("Param").[AE2]
Sheets("Synt").[C153] = Sheets("Param").[AE2]
Sheets("Synt").[C170] = Sheets("Param").[AE2]
Sheets("Synt").[C187] = Sheets("Param").[AE2]
Sheets("Synt").[C204] = Sheets("Param").[AE2]
Sheets("Synt").[C221] = Sheets("Param").[AE2]
Sheets("Synt").[C238] = Sheets("Param").[AE2]
Sheets("Synt").[C255] = Sheets("Param").[AE2]
Sheets("Synt").[C272] = Sheets("Param").[AE2]
Sheets("Synt").[C289] = Sheets("Param").[AE2]

Mais c'est pas fini, il faut répéter cette opération 14 autres fois. Ce coup ci-c'est AE2 qui change et qui s'incrémente de 1 à chaque fois (jusqu'à AE16). La suite donne ça :

Sheets("Synt").[C52] = Sheets("Param").[AE3]
Sheets("Synt").[C69] = Sheets("Param").[AE3]
Sheets("Synt").[C86] = Sheets("Param").[AE3]
Sheets("Synt").[C103] = Sheets("Param").[AE3]
Sheets("Synt").[C120] = Sheets("Param").[AE3]
Sheets("Synt").[C137] = Sheets("Param").[AE3]
Sheets("Synt").[C154] = Sheets("Param").[AE3]
Sheets("Synt").[C171] = Sheets("Param").[AE3]
Sheets("Synt").[C188] = Sheets("Param").[AE3]
Sheets("Synt").[C205] = Sheets("Param").[AE3]
Sheets("Synt").[C222] = Sheets("Param").[AE3]
Sheets("Synt").[C239] = Sheets("Param").[AE3]
Sheets("Synt").[C256] = Sheets("Param").[AE3]
Sheets("Synt").[C273] = Sheets("Param").[AE3]
Sheets("Synt").[C290] = Sheets("Param").[AE3]

c'est pas beau hein ? Et puis c'est long surtout

Merci d'avance

Bonjour,

je débroussaille pour mes petits camarades de classe:

anonymisé au besoin

P.

Je comprends, désolé

J'ai mis des couleurs afin de compléter les explications ci-dessus (zones à traiter)

merci

Bonjour,

A-priori :

Sub Test()
    Dim Prm As Worksheet, i%, j%
    Set Prm = Worksheets("Param")
    With Worksheets("Synt")
        For i = 2 To 16
            For j = 51 To 304 Step 17
                .Cells(j + i - 2, 3) = Prm.Cells(i, 31)
            Next j
        Next i
    End With
End Sub

A vérifier, suis pas encore complètement réveillé .

Cordialement.

Bonjour,

Tu te compliques la vie. Quand on connait la plage à copier et coller, ça peut se faire, entre autres, par un copier/coller classique. Essaye ce code suivant :

Sub test()
    For i = 51 To 289 Step 17
        Sheets("Param").Range("AE2:AE16").Copy
        Sheets("Synt").Range("C" & i).PasteSpecial xlValues
    Next i
    Application.CutCopyMode = False
End Sub

Edit : zut trop tard

Merci, c'est parfait dans les 2 cas

Raja, je voulais surtout savoir le faire, maintenant je vais pouvoir, j'espère, adapter les 2 solutions selon les circonstances.

Merci à vous et bonne journée

bonjour

J'adapte cet exemple concret depuis quelques jours sur certains de mes fichiers (les 2 méthodes me sont très utiles - merci encore)

Mais je suis tombé sur un os et j'ai beau y tourner dans tous les sens, je n'arrive pas à écrire une boucle dans un autre type d'exercice

J'ai repris le fichier d'origine ci-joint et ce que je veux faire ce coup-ci c'est reporter les cellules AF2 à AT2 de la feuille "param" vers la feuille "synd" en D51 à D65 puis AF3 à AT3 vers D68 à D82, etc ...

J'espère que c'est suffisamment clair

Merci d'avance

Re,

Par rapport au conseil qu'on t'a donné, la donne n'est plus la même. La plage à copier n'est pas fixe. Il faut l'incrémenter d'une ligne à chaque itération de la boucle. De plus, la copie est effectuée transposée. Il faut tenir compte de tous ces paramètres. On te donne un conseil dans un cas précis. Si tu sais l'adapter, c'est bien. Sinon, tu as raison, il faudra revenir nous voir sans perdre trop de temps. Essaye comme ça :

Sub testTer()
j = 2
    For i = 51 To 289 Step 17
        Sheets("Param").Range("AF" & j & ":AT" & j).Copy
        Sheets("Synt").Range("D" & i).PasteSpecial Paste:=xlValues, Transpose:=True
        j = j + 1
    Next i
    Application.CutCopyMode = False
End Sub

Bonjour raja

Merci ça fonctionne très bien

Je n'en était pas loin, j'avais tout bon sauf que j'écrivais mal Sheets("Param").Range("AF" & j & ":AT" & j).Copy et c'est là que ça buggait.

Merci encore et bonne journée

bonjour

Si il n y a pas des calcules a faire entre les incrémentations (calcules des fonctions Excel) essayer ca :

La méthode copy/paste est relativement lente alors si vous copier que les valeurs par l’utilisation de paramètre xlValues, je pense l’utilisation de la méthode .Value = .Value serai rapide est optimisé :

Sub test1()
Dim i
For i = 51 To 304 Step 17
Sheets("Synt").Range("C" & i & ":C" & i + 14).Value = _
Sheets("Param").Range("AE2:AE16").Value
Next i
End Sub
Sub test2()
Dim i
j = 1
For i = 51 To 304 Step 17
j = j + 1
Sheets("Synt").Range("D" & i & ":D" & i + 14).Value = _
Application.Transpose(Sheets("Param").Range("AF2" & j & ":AT" & j).Value)
Next i
End Sub
Sub test3()
Dim i
j = 1
For i = 51 To 304 Step 17
j = j + 1
Sheets("Synt").Range("C" & i & ":C" & i + 14).Value = _
Sheets("Param").Range("AE2:AE16").Value
Sheets("Synt").Range("D" & i & ":D" & i + 14).Value = _
Application.Transpose(Sheets("Param").Range("AF2" & j & ":AT" & j).Value)
Next i
End Sub

Bonjour,

Décidemment, malgré tous vos bons conseils, je reste nul.

Je n'arrive pas à adapter vos codes dans le classeur joint pour un autre type d'exercice : Reporter les colonnes (lignes 2 à 16) O à AC de la feuille "Param" (j'ai commencé à mettre des couleurs pour une meilleure compréhension) dans la colonne D de la feuille "Synt", les unes sous les autres, toutes les 17 lignes.

Merci d'avance

8autre-report.xlsm (27.41 Ko)

Dans ta première version, la colonne de Prm ne variait pas... !

Sub test()
    Dim Prm As Worksheet, i%, j%, k%
    Set Prm = Worksheets("Param")
    With Worksheets("Synt")
        For j = 51 To 304 Step 17
            k = j / 17 + 12
            For i = 2 To 16
                .Cells(j + i - 2, 4) = Prm.Cells(i, k)
            Next i
        Next j
    End With
End Sub

NB- J'apprécierais que tu n'élimines pas les déclarations de variables (dans un code correctement écrit on déclare ses variables, les déclarations ont un rôle dans la vitesse d'exécution), et que tu respectes l'indentation.

Cordialement.

Bonjour MFerrand

Je n'ai pas la possibilité de tester immédiatement ton code mais je me doute qu'il fonctionne. Merci d'avance

Oui je sais que la colonne Prm varie ce coup-ci, d'où ma difficulté à écrire ce nouveau code

J'avais testé aussi en déclarant une autre variable mais je n'arrivais pas à rédiger la boucle (maintenant que je lis le k = j / 17 + 12, je me dis quel c.. je suis).

Concernant les déclarations de variables et l'indentation, je m'y emploies (ici ce n'étais qu'un test), mais merci de me le rappeler.

Bon aprèm'

Cordialement

Bonne continuation.

Rechercher des sujets similaires à "report toutes lignes"