Bonjour lim01,
voici l'explication du code VBA :
Option Explicit
: oblige à déclarer toutes les variables utilisées
Private Sub Worksheet_Change(ByVal Target As Range)
: sub exécutée s'il y a un changement de donnée sur la feuille
Dim lg1&, lg2&, col%, ipr&
: déclaration de variables ; lg1& : idem que lg1 As Long ; col% : idem que col As Integer
With Target .. End With
: Target est la cellule active
If .CountLarge > 1 Then Exit Sub
: sortie s'il y a plus d'une cellule sélectionnée
lg1 = .Row: If lg1 < 8 Then Exit Sub
: lg1 = n° ligne de Target ; sortie si c'est au-dessus de la ligne 8
col = .Column: If col < 13 Or col > 15 Then Exit Sub
: col = n° colonne de Target ; sortie si c'est à gauche de la colonne M ou à droite de la colonne O ; rappel : c'est les colonnes de F ; G ; D ; on ne peut pas tester la colonne IPR car il y a une formule, donc on n'y fait pas de saisie : l'événement changement de donnée ne peut pas s'y produire ➯ ça oblige donc à tester F; G ; D
ipr = Cells(lg1, 13) * Cells(lg1, 14) * Cells(lg1, 15)
: calcul de IPR (avec la nouvelle donnée saisie, ou sans la donnée effacée)
If ipr <= 100 Then Exit Sub
: sortie si IPR <= 100 ; sinon : IPR > 100, et on continue pour copier tes 3 données
Application.ScreenUpdating = 0
: gel de l'affichage écran ➯ l'écran n'est plus mis à jour ➯ ça va plus vite
With Worksheets("PA") .. End With
: avec la feuille "PA"
lg2 = .Cells(Rows.Count, 1).End(3)(2).Row
: idem que lg2 = .Cells(Rows.Count, "A").End(xlUp).Row +1
lg2 = n° dernière ligne utilisée (selon la colonne A) + 1 ; c'est donc la ligne vide qui est sous la dernière ligne utilisée
.Cells(lg2, 1) = Cells(lg1, 11)
: copie en col A "ACTIONS" de "Mesures mises en place" (col K - fusion KL)
.Cells(lg2, 2) = Cells(lg1, 19)
: copie en col B "Personnes concernées" de "Resp" (col S)
.Cells(lg2, 6) = Cells(lg1, 20)
: copie en col F "Date réalisation" de "Délai" (col T)
les .Cells
(avec un point devant) sont les cellules qui dépendent du With, donc de la feuille "PA"
dhany