@Phil
[quote="dans ton post de 09:55, tu"]peux-tu me mettre des commentaires d'explication avant tes lignes de code afin que je l'adapte à mon classeur définitif stp ?[/quote]
j'ai préféré faire une description du code ici, car ça n'aurait pas été pratique de mettre dans le code VBA tout ce qui est ci-dessous.
Dim shd As Worksheet, sh%, lm&, lg1&, lg2&, n&
: déclaration des variables
Dim sh% : idem que Dim sh As Integer ; Dim lm& : idem que Dim lm As Long
Application.ScreenUpdating = 0
: évite la mise à jour de l'écran ➯ exécution plus rapide
lm = Rows.Count
: ligne maxi : 65536 avant Excel 2007, puis 1 048 576
lg2 = 9
: sur la feuille "Resultat", on écrira les résultats à partir de la ligne 9
Set shd = Worksheets("Resultat")
: shd référence la feuille "Resultat"
shd.Cells.Clear
: on efface toutes les cellules de la feuille "Resultat" : c'est cette instruction
qui t'évite de devoir effacer les anciens résultats avant de lancer la macro.
Worksheets.Count
: c'est le nombre de feuilles du classeur, ici 4
For sh = 1 To Worksheets.Count
.. Next sh
: pour toutes les feuilles du classeur,
car sh est le n° d'index de la feuille : de 1 à Worksheets.Count : de 1 à 4
With Worksheets(sh)
.. End With
: avec la feuille d'index sh
If .Name <> "Resultat" Then
: on lira les données de toutes les feuilles, SAUF la feuille "Resultat" ;
ça fait que ça marchera quelle que soit la position de la feuille "Resultat", même si tu la déplace vers
la gauche : en 1ère position ou au milieu ; et ça marchera aussi si tu ajoutes plus de feuilles "donnees".
lg1 = .Cells(lm, 3).End(3).Row
: idem que lg1 = .Cells(lm, "C").End(xlUp).Row
ça retourne donc le n° de la dernière ligne utilisée en colonne C, sur la feuille Worksheets(sh) ;
pour la 1ère feuille "donnees 1", lg1 = 11
If lg1 > 8 Then
.. End If
: faire la suite seulement si lg1 vaut au moins 9, sinon,
ça veut dire qu'il n'y a pas de données qui commence en ligne 9 du cadre C9:G20
n = lg1 - 8
: n contient le nombre de lignes utilisées de C9:G20 ;
pour la 1ère feuille "donnees 1", n = lg1 - 8 = 11 - 8 = 3
.[C9].Resize(n, 5).Copy
: sur la feuille de sh, car ça dépend toujours du With ; cellule C9 ;
redimensionné à 3 lignes et 5 colonnes ➯ on copie la plage C9:G11
shd.Cells(lg2, 5).PasteSpecial -4163
: on colle la plage en valeurs en feuille shd,
cellule de la ligne lg2, colonne E ; -4163 : idem que xlPasteValues
lg2 = lg2 + n
: lg2 = 9 + 3 = 12 ➯ le prochain coller se fera en ligne 12
dernières instructions, en sortie de boucle, car après Next sh :
Application.CutCopyMode = 0
: enlève le cadre de tirets défilants (celui d'une zone copiée)
shd.Select
: va sur la feuille "Resultat" ; [A1].Select
: va en A1
j'espère que cette explication de code te conviendra, même si elle est longue.
dhany