Rebonjour,
Dans la suite du post de ce matin (https://www.excel-downloads.com/threads/probleme-macro-extraction-de-donnees-excel.208698/), j'ai de nouveau un problème dont la résolurtion me permettra de finaliser la macro.
Le fichier source alimente les colonnes A à W de la feuille cible si les conditions sont remplies.
Maintenant, je souhaite qu'après avoir rempi les colonnes A à W, la macro copie les colonnes AD à AJ de la ligne du dessus.
En plus clair (ce n'est pas évident à expliquer !) avec un exemple :
- les cellules A2023 à W2023 sont remplies préalablement (c'est le sens de l'exécution de la macro) à partir du fichier source ;
- alors, les cellules AD2023 à AJ2023 doivent être remplies à partir des cellules AD2022 à AJ2022 (c'est un copier-coller tout bête d'une ligne sur la ligne du dessous).
Voici mon code :
Le problème est qu'avec ma syntaxe, la macro remonte à la ligne 2 et exécute sur les 2.000 lignes suivantes !
En fait, ce qu'il faudrait, c'est, je pense, remplacer dans :
Ceci :
par
J'espère que j'ai été clair.
Merci d'avance pour votre aide.
Bien cordialement.
Dans la suite du post de ce matin (https://www.excel-downloads.com/threads/probleme-macro-extraction-de-donnees-excel.208698/), j'ai de nouveau un problème dont la résolurtion me permettra de finaliser la macro.
Le fichier source alimente les colonnes A à W de la feuille cible si les conditions sont remplies.
Maintenant, je souhaite qu'après avoir rempi les colonnes A à W, la macro copie les colonnes AD à AJ de la ligne du dessus.
En plus clair (ce n'est pas évident à expliquer !) avec un exemple :
- les cellules A2023 à W2023 sont remplies préalablement (c'est le sens de l'exécution de la macro) à partir du fichier source ;
- alors, les cellules AD2023 à AJ2023 doivent être remplies à partir des cellules AD2022 à AJ2022 (c'est un copier-coller tout bête d'une ligne sur la ligne du dessous).
Voici mon code :
Code:
Sub ExtraireDonnees()
' Définition des constantes et des variables
Const FolderSource As String = "G:\CPT\...\Suivi des notifications d'indus\Journées\"
Const FolderCible As String = "G:\CPT\...\Suivi des notifications d'indus\"
Const FileNameCible As String = "Liste des indus créés à compter de 052013.xlsm"
Const SheetSource As String = "A"
Const SheetCible As String = "Total des indus non soldés"
Dim wkbSource, wkbCible As Workbook, shSource, shCible As Worksheet
Dim Lig As Long, nbrLig As Long, NumLig As Long
Dim Col As String, Ext As String, Nom As String
Nom = ThisWorkbook.Sheets(1).Range("G6").Value
Ext = ".xls"
Set wkbSource = Workbooks.Open(FolderSource & Nom & Ext)
' Renommer la 1ère feuille du fichier wkbSource en "A"
wkbSource.Sheets(1).Name = "A"
' Changement du format de la colonne R du fichier wbkSource
Columns("R:R").Select
Selection.NumberFormat = "0.00"
Range("R1").Select
Selection.NumberFormat = "General"
' Ouverture du fichier et de la feuille cibles : Total des indus non soldés de Liste des indus créés à compter de 052013.xlsm
Set wkbCible = Workbooks.Open(FolderCible & FileNameCible)
Set shCible = wkbCible.Worksheets("Total des indus non soldés")
Set shSource = wkbSource.Worksheets("A")
NumLig = 1
With shSource
nbrLig = .Range("R" & .Rows.Count).End(xlUp).row
nbrLig = .Range("W" & .Rows.Count).End(xlUp).row
For Lig = 2 To nbrLig
If .Cells(Lig, "R").Value <> 0 And .Cells(Lig, "V").Value <> "RLC" Then
.Range("A" & Lig & ":W" & Lig).Copy
Range("A65000").End(xlUp).Offset(1).Select
shCible.Paste
End If
Next
End With
With shCible
nbrLig = .Range("AD" & .Rows.Count).End(xlUp).row
nbrLig = .Range("AJ" & .Rows.Count).End(xlUp).row
For Lig = 2 To nbrLig
.Range("AD" & Lig & ":AJ" & Lig).Select
Selection.Copy
ActiveSheet.Paste
Next
End With
End Sub
Le problème est qu'avec ma syntaxe, la macro remonte à la ligne 2 et exécute sur les 2.000 lignes suivantes !
En fait, ce qu'il faudrait, c'est, je pense, remplacer dans :
Code:
With shCible
nbrLig = .Range("AD" & .Rows.Count).End(xlUp).row
nbrLig = .Range("AJ" & .Rows.Count).End(xlUp).row
For Lig = 2 To nbrLig
.Range("AD" & Lig & ":AJ" & Lig).Select
Selection.Copy
ActiveSheet.Paste
Next
End With
Ceci :
Code:
For Lig = 2 To nbrLig
par
Code:
For Lig = dernière ligne remplie To nbrLig
J'espère que j'ai été clair.
Merci d'avance pour votre aide.
Bien cordialement.