Bonjour elsouba,
désolé, mais j'étais pas dispo pour continuer ce sujet avant maint'nant.
tu a écrit :
Cela fonctionne exactement comme je voulais
merci pour ton retour !
tu a écrit :
pourrais-tu me commenter ton code
Option Explicit
: pour forcer la déclaration des variables
Dim sh As Worksheet, lg2&
: sh est une variable de type feuille de calcul ; lg2 est une variable de type Long
Private Sub Job(col As Byte)
: la sub Job() fait le travail voulu pour une colonne donnée (une seule à la fois, celle dont le n° est transmis dans la variable col, qui est du type octet) ; le 1er appel envoie 13 : c'est la colonne M ; le 2ème appel envoie 14 : colonne N ; la sub est privée car elle a besoin d'être appelée uniquement par la sub CpyData(), du même module.
Dim lg1&
: lg1 est une variable de type Long (regarde l'aide VBA sur les caractères de déclaration de type. )
Cells(Rows.Count, col).End(xlUp).Row
: ligne de la dernière cellule utilisée, dans la colonne col ➯ n° ligne de la dernière Observation de la colonne M (1er appel) ; puis n° ligne de la dernière Intervention de la colonne N (2ème appel) ; d'où instruction complète :
For lg1 = 10 To Cells(Rows.Count, col).End(xlUp).Row
: boucle lg1, de la ligne 10 à la dernière ligne utilisée de la colonne.
If Rows(lg1).Hidden = 0 Then
.. End If
: seulement si la ligne n'est pas cachée ➯ seulement si elle est visible
With Cells(lg1, col)
.. End With
: avec la cellule qui est en ligne lg1, colonne col
If .Value <> "" And .Value <> "0"
: si la valeur de la cellule référencée par le With est ni une chaîne de caractères vide, ni 0
Then sh.Cells(lg2, 1) = .Value: lg2 = lg2 + 1
: alors on écrit cette valeur sur la feuille sh, cellule ligne lg2, colonne 1 ; puis lg2 est incrémenté de 1 ➯ la prochaine valeur écrite le sera une ligne en dessous.
Next lg1
: ligne suivante
je te laisse déjà voir tout ça ; la suite une prochaine fois.
dhany