VBA - Copier une partie d'un tableau selon une condition

Bonjour,

Novice en la matière, je bloque sur VBA...

A la suite d'une longue recherche sur ce blog j'ai réussi à trouver une macro qui me convient. Je souhaiterais seulement ajouter une modification. Voici le code :

Sub pv()

Dim C As Range

Dim LigneAjout As Long

Dim i As Integer

With Worksheets("Feuil1")

For Each C In .Range("A2:A" & .Range("A" & Rows.Count).End(xlUp).Row)

If Not IsEmpty(C) Then

LigneAjout = Worksheets("Feuil2").Range("A" & Rows.Count).End(xlUp).Offset(1).Row

C.EntireRow.Copy Worksheets("Feuil2").Range("A" & LigneAjout)

End If

Next C

End With

End Sub

Cette macro me copie bien les lignes ou dans la ligne A un texte a été ajoute sur une autre feuille. Le problème c'est qu'il me copie toute la ligne et je souhaiterais qu'il ne copie que de la colonne A à E. En sachant que mon tableau va de la colonne A à la colonne M.

Si jamais quelqu'un comprend mon problème, je serais ravi d'avoir la solution.

Dans l'attente de vos retours

Bonne soirée

Arnaud

Bonjour Arnaud, bonjour le forum,

Essaie comme ça :

Sub pv()
Dim C As Range
Dim LigneAjout As Long
Dim i As Integer
With Worksheets("Feuil1")
For Each C In .Range("A2:A" & .Range("A" & Rows.Count).End(xlUp).Row)
If Not IsEmpty(C) Then
LigneAjout = Worksheets("Feuil2").Range("A" & Rows.Count).End(xlUp).Offset(1).Row
C.Resize(1, 5).Copy Worksheets("Feuil2").Range("A" & LigneAjout)
End If
Next C
End With

End Sub

Re,

Autre méthode beaucoup plus rapide sur de gros tableaux :

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 TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Long 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
Dim K As Long 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Set OS = Worksheets("Feuil1") 'définit l'onglet source OS
Set OD = Worksheets("Feuil2") 'définit l'onglet destination OD
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
K = 1 'initialise la variable K
For I = 2 To UBound(TV, 1) 'boucles 1 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    If TV(I, 1) <> "" Then 'condition : si la donnée en ligne I colonne 1 de TV n'est pas vide
        ReDim Preserve TL(1 To 5, 1 To K) 'redimensionne le tableau des lignes TV (5 lignes, K colonnes)
        For J = 1 To 5 'boucle 2 : sur les 5 premières colonnes du tableau des valeurs TV (colonnes A à E)
            TL(J, K) = TV(I, J) 'récupère dans la ligne J de TL la donnée en colonne J de TV (= Transposition)
        Next L 'prochaine colonne de la boucle 2
        K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL)
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle 1
If K > 1 Then 'condition : si K est supérieure à 1
    'définit la cellule de destination DEST (A1 si A1 est vide, sinon la première cellule vide de la colonne A de l'onglet OD)
    Set DEST = IIf(OD.Range("A1") = "", OD.Range("A1"), OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0))
    'renvoie dans DEST redimensionnée le tableau TL transposé
    DEST.Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL)
End If 'fin de la condition
End Sub
Rechercher des sujets similaires à "vba copier partie tableau condition"