Répeter une macro pour chacune de mes lignes

Fermé
marion25460 Messages postés 2 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 20 février 2015 - Modifié par marion25460 le 19/02/2015 à 18:52
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 - 21 févr. 2015 à 15:21
Bonjour,

Alors je suis débute en excel et le VBA est pour moi l'inconnu !
je vous explique mon problème je dois creéer un nouveau tableau regroupant mes données. J'ai réussi a créer une macro pour la première ligne cepedant je ne sais pas comment faire pour l'appliquer à toutes les lignes, sachant que dans le dossier finial il y a environ 2000 lignes.

Les lignes auqel il faudrait l'appliquer vas de I12 à I2000

Voici le code :
Sub Macro1()
'
' Macro1 Macro
'    
    Range("K12:M12").Select
    Selection.Copy
    Range("F15:F17").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Range("E15:E17").Select
    Application.CutCopyMode = False
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Merge
    Range("I12").Select
    Selection.Copy
    Range("E15:E17").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = True
      
   End With
 End Sub


exemple de ce que je souhaite :


Pourriez vous m'expliquer comment faire svp, je souhaite comprendre afin de pouvoir m'initier au VBA

Par avance, merci


EDIT : Ajout des balises de code.

Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

A voir également:

2 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
19 févr. 2015 à 23:50
Bonsoir Marion, bonsoir le forum,

Peut-être comme ça :

Sub Macro1()
Dim I As Integer
For I = 12 To 2000
    Range(Cells(I, 11), Cells(I, 13)).Copy
    Range(Cells(I + 3, 6), Cells(I + 5, 6)).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True
    Application.CutCopyMode = False
    Range(Cells(I + 3, 5), Cells(I + 5, 5)).Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Merge
    Cells(I, 9).Copy Range(Cells(I + 3, 5), Cells(I + 5, 5))
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = True
    End With
Next I
End Sub

0
marion25460 Messages postés 2 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 20 février 2015
Modifié par marion25460 le 20/02/2015 à 09:26
Bonjour,
merci pour votre réponse aussi rapide !
Je n'arrive pas à faire fonctionner votre code !

je me réexplique car je me rend compte que ma demande n'etait pas clair !
J'ai un tableau avec en première colonne " un repère" dans les colonnes suivant il y à les fils qui sont associés à ce repère ( le tabbleau se lis donc en ligne)
exemple :
A B C D
repère 1 fils 1 fils 2 fils 3
repère 2 fils 56 fils 9
et cela sur environ 2000 lignes , car 2000 repères de fils
Note : il se peut qu'il y est 10 fils pour un repère comme 1 seul fils

Ce que je souhaiterais :
avoir en colonne A , toujours, les repères de fils et en colonne B tous les fils correspondant au repère. (le tableau doit se lire de bas en haut)
exemple :
A B
1 repère 1 fils 1
2 fils 2
3 fils 3
4 repère 2 fils 56
5 fils9
j'aimerais que les cellules A1,A2 et A3 soit fusionnées et que ce modèle s'applique pour chaque repère.


Je ne sais pas si j'ai réussis a etre clair, n'hésitez pas a me demander plus d'infos.

et me donner des conseils pour débuter le VBA. SVP
Merci
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
Modifié par ThauTheme le 21/02/2015 à 13:30
Bonjour Marion, bonjour le forum,

En effet c'est plus clair mais un petit fichier exemple aurait été encore mieux...

Je te propose de passer par un second onglet pour renvoyer le trableau transposé :

Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim TL As Variant 'déclare la variable TL (Tableau de Ligne)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Set OS = Sheets("Feuil1") 'définit l'onglet OS (à adapter)
DL = OS.Cells(Application.Rows.Count, 9).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 9 (=I) de l'onglet OS
Set OD = Sheets("Feuil2") 'définit l'onglet OD (à adapter)
OD.Range("A1").Value = "Repère" 'écrit "Repère" en A1 de l'onglet OD
OD.Range("B1").Value = "Fils" 'écrit "Fils" en B1 de l'onglet OD
For I = 12 To DL 'boucle sur toutes les lignes I de 12 à DL
    'définit le tableau de ligne TL (les Fils à partir de la colonne 10 (=J))
    TL = OS.Range(OS.Cells(I, 10), OS.Cells(I, Application.Columns.Count).End(xlToLeft))
    'définit la cellule de destination DEST
    Set DEST = OD.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0)
    On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
    'revoie dans DEST redimentsionnée et décalée d'une colonne à droite le tableau TL transposé
    'si le tableau ne contient qu'un seul élément cela génère une erreur
    DEST.Offset(0, 1).Resize(UBound(TL, 2), 1).Value = Application.Transpose(TL)
    If Err <> 0 Then 'condition : si une erreur a été générée
        'renvoie dans dest décalée d'une colonne à droite la valeur de la cellule ligne I colonne 10 (=J)
        DEST.Offset(0, 1).Value = OS.Cells(I, 10).Value
        GoTo suite 'va à l'étiquette "suite"
    End If 'fin de la condition
    DEST.Resize(UBound(TL, 2), 1).Merge 'fusionne la cellue DEST
suite: 'étiquette
    On Error GoTo 0 'annule la gestion des erreurs
    DEST.Value = OS.Cells(I, 9) 'renvoie dans dest la valeur de la cellule ligne I colonne 9 (=I)
Next I 'prochaine ligne de la boucle
End Sub



À plus,
ThauTheme
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
21 févr. 2015 à 15:21
Je me suis basé sur ton premier post cellule I12 (ligne 12, colonne 9)
0