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