XL 2010 Copier dernière ligne / mise en forme spécifique + optimisation de macro

NathalieQSE

XLDnaute Nouveau
Bonjour à tous,

Je travaille sur un tableau de suivi qui récupère des données sur une base sharepoint.
Mon objectif : copier dans l'onglet "données" des lignes issues de l'onglet "extraction" à condition que le site (en colonne C) soit "Cinq Mars La Pile" pour l'exemple mais ça peut être autre chose, je le modifierai pour les autres sites.

J'ai déjà une moulinette qui marche. Mais je rencontre deux problèmes :
1- Je souhaiterai que les lignes que j'ai copiées apparaissent en une couleur spécifique (toute la ligne, pas uniquement le texte copié puisque mes informations copiées sont en fait masquées et ne servent qu'à alimenter les colonnes suivantes)
2- Eventuellement optimiser mon code pour diminuer le temps de traitement.
Je m'explique, ma base sharepoint contient actuellement environ 30 lignes donc l'exécution est immédiate. Cependant, elle contiendra rapidement des milliers de lignes et j'ai peur que ma macro prenne bcp de temps à s'exécuter. Dans ce but, j'ai intégré un numéro de ligne en colonne A. Je souhaiterai récupérer ce numéro en colonne A de mon onglet données (qui correspondra au dernier numéro de ligne collé) et dire à ma macro de ne chercher les dernières lignes dans l'onglet "extraction" qu'à partir de ce numéro et pas avant (puisque le avant a déjà été traité). Je ne sais pas si je suis très claire dans mes explications.

Merci à tous pour votre aide précieuse

Voilà mon code actuel :

Sub For_X_to_Next_Ligne()

Dim FL1 As Worksheet, NoCol As Integer
Dim NoLig As Long, Var As Variant
Dim FL2 As Worksheet
Dim derligne As Long
Dim obj As Object
Set FL1 = Worksheets("Extraction") 'a adapter
Set FL2 = Worksheets("Données") 'a adapter
NoCol = 3 'lecture de la colonne C
Application.ScreenUpdating = False
For NoLig = 1 To Split(FL1.UsedRange.Address, "$")(4)
Var = FL1.Cells(NoLig, NoCol)
If Var = "Cinq Mars La Pile" Then 'a adapter
derligne = FL2.Range("A" & Rows.Count).End(xlUp).Row + 1
Set obj = FL2.Columns("A").Find(FL1.Cells(NoLig, NoCol - 2), , , xlWhole)
If Not obj Is Nothing Then

Else
FL1.Range("A" & NoLig & ":L" & NoLig).Copy _
Destination:=FL2.Range("A" & derligne)
End If
End If
Next
Set FL1 = Nothing
Application.ScreenUpdating = True
End Sub
 

NathalieQSE

XLDnaute Nouveau
En fait, cela ne résout pas vraiment ma problématique puisque ce tableau est destiné à être mis à jour de manière quotidienne pour y intégrer les nouvelles données. Je ne dois donc coller que les cellules qui ne sont pas déjà intégrées d'où ce que j'ai écrit.

Ma question concernait surtout :
- la mise en forme des lignes que je viens de coller
- le tri dans ma base pour ne chercher que dans les lignes qui n'ont pas déjà fait l'objet d'un tri
 

patricktoulon

XLDnaute Barbatruc
re
pourquoi veux tu t'ennuyer a trier ,tu recopie a chaque fois TOUTES!!! les lignes concernées (c'est rapide)
ce que tu veux faire ;plus il y aura de ligne plus ça va être long
maintenant si l'argument de recherche("Cinq Mars La Pile") est amené a changer c'est une autre histoire
 

NathalieQSE

XLDnaute Nouveau
L'argument de recherche sera en fait différent selon les sites mais chaque site a son propre tableau donc il ne changera pas.

Je veux trier pour deux raisons :

1- justement réduire le temps de traitement de ma macro. Il va y avoir des milliers de lignes par site, si je recolle TOUTES mes lignes à chaque fois, ça va prendre un temps fou. Si je trie et que je ne commence à chercher qu'à partir de la dernière ligne que j'ai collée, je vais gagner du temps.
Est-ce que je peux faire un autofilter à partir d'un certain numéro de ligne?

2- il me faut absolument changer de format les lignes que je viens de coller (donc des nouvellement intégrées dans mon onglet données) pour que le responsable du site puisse visualiser les nouveaux éléments rapidement et ne modifier le format qu'une fois qu'il aura traité la ligne
 

patricktoulon

XLDnaute Barbatruc
heu c'est quoi cette feuille "Données" sa structure ne correspond pas a ce qu'elle doit recevoir tout du moins dans son etat actuelle
les colonne "A" et plus sont vides alors que celle qui sont plus loins sont pleines tu risque d'avoir un problème là
en tout cas comme tel si je copie les lignes concernées on va perdre les données de la ligne 7 à 20
 

NathalieQSE

XLDnaute Nouveau
C'était bien l'objet de mon code.
A partir de la colonne G de mémoire, les opérateurs complètent les colonnes pour assurer leur suivi. Les colonnes H et plus ne doivent donc pas être affectées par la copie de nouvelles lignes. C'est pour ça que mon code cherche la dernière ligne vide en colonne A et ne colle que les colonne A à H
 

Discussions similaires