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 SubRe,
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