Compréhension d'une macro
Bonjour, j'ai du mal à saisir exactement ce que fait les Resize pour moi le premier copie 2 ligne mais le 2ème j'ai du mal à comprendre exactement ce qu'il fait
wsc.Cells(ligne, "C").Resize(dl, 2).Value = ws.Cells(22, 3).Resize(dl, 2).Value
Voici la macro complète :
Sub Consolidation()
Dim wsp As Worksheet, wsc As Worksheet, ws As Worksheet
Dim wb As Workbook
Dim dl As Long, ligne As Long, i As Long
Application.ScreenUpdating = False
Set wsp = Sheets("parametres") 'feuille contenant les fichiers à consolider et le nom à leur associer
Set wsc = Sheets("sheet1") 'feuille de consolidation
wsc.UsedRange.Offset(1, 1).Clear 'on efface le contenu de la feuille consolidation en gardant la ligne 1 et la colonne A
dl = wsp.Cells(Rows.Count, 1).End(xlUp).Row 'nombre de fichiers à consolider
ligne = 2 'ligne où placer la consolidation
For i = 1 To dl 'on traite les fichiers à consolider
Set wb = Workbooks.Open(wsp.Cells(i, 2)) 'ouverture du fichier
Set ws = wb.Sheets(1) ' feuille à consolider
dl = wb.Sheets(1).Cells(Rows.Count, "D").End(xlUp).Row - 21 'nombre de données à consolider
If dl > 0 Then 'si données
wsc.Cells(ligne, "B").Resize(dl, 1) = wsp.Cells(i, 1) 'nom de société associé au fichier
wsc.Cells(ligne, "C").Resize(dl, 2).Value = ws.Cells(22, 3).Resize(dl, 2).Value 'copie colonnes C et D
wsc.Cells(ligne, "I").Resize(dl, 4).Value = ws.Cells(22, 24).Resize(dl, 4).Value 'copie colonnes 22 à 24
With wsc.Cells(ligne, "G").Resize(dl, 1)
.Formula = "=sum('[" & ws.Parent.Name & "]" & ws.Name & "'!s22:v22)" 'Rajoute non échu
.Value = .Value
End With
With wsc.Cells(ligne, "E").Resize(dl, 1)
.Formula = "=('[" & ws.Parent.Name & "]" & ws.Name & "'!ac22)" 'Rajoute group (direction commerciale)
.Value = .Value
End With
With wsc.Cells(ligne, "H").Resize(dl, 1)
.Formula = "=sum('[" & ws.Parent.Name & "]" & ws.Name & "'!x22:aa22)" 'Rajoute Tot échu
.Value = .Value
End With
With wsc.Cells(ligne, "F").Resize(dl, 1) 'Calcule le Tot encours
.FormulaR1C1 = "=rc[1]+rc[2]"
.Value = .Value
End With
With wsc.Cells(ligne, "M").Resize(dl, 1) 'Calcule %Echu
.FormulaR1C1 = "=rc[-5]/rc[-7]"
.Value = .Value
.NumberFormat = "0.00%"
End With
ligne = ligne + dl 'ligne où placer la consolidation suivante
End If
wb.Close 'fermer fichier à consolider
Next i 'fichier suivant
MsgBox "traitement terminé"
End Sub
Merci pour votre aide,
Cordialement;
Parrish
P.S : Sur cette ligne que signifie le -21 pourquoi ce chiffre ?
dl = wb.Sheets(1).Cells(Rows.Count, "D").End(xlUp).Row - 21
Corriger moi j'ai tord
Le 1er est l'endroit ou va se copier mes donnes donc ici Cellule C sur 2 colonne
Le 2ème est la donnée copié de l'autre fichier sur la cellule 22, colonne 3 et copie 2 colonne
bonjour,
l'instruction resize permet de définir une plage de cellules à partir d'une cellule qui sert de référence (celle en haut à gauche de la plage).
resize(nombre de lignes, nombre de colonnes)
range("B1").resize(3,4) définit une plage B1:F3 on définit une plage de 3 lignes et 4 colonnes à partir de B1.
Pourquoi dl-21 ? Pour avoir le nombre de données qui t'intéresse, on prend le numéro de la dernière ligne utilisée dans la colonne de référence et on enlève le nombre de lignes d'entêtes qui ne contiennent pas de données. Dans ton classeur, tes données commencent en ligne 22, le numéro de la dernière ligne utile est 100, le nombre de lignes avec des données est 100-21.
C'est noté merci beaucoup ^^
La commande Resize est donc top à utiliser et à adapter