Bonjour xaviier et le forum,
Voici les explications demandées :
Dim oRge As Range
> oRge est un objet de type "Range" auquel on assignera successivement chaque cellule de la plage A5:T51
Dim sRge As String
> sRge est une variable de type "String" qui contiendra, pour chaque ligne de la plage A5:T51, les valeurs des cellules sélectionnées,
> séparées par une virgule
For Each oRge In Worksheets("Calculs").Range("A5:T51")
> On parcourt la plage A5:T51, dans l'ordre suivant : A5, B5, C5, ..., T5, A6, B6, C6, ..., T6, etc. jusqu'à T51
> Pour chaque itération dans la boucle, on assigne à l'objet oRge la cellule active. Il faut bien comprendre qu'il s'agit ici
> de la cellule en tant qu'objet (donc y compris ses propriétés et méthodes).
If oRge.Column Mod 2 <> 0 Then
> Si la cellule active se trouve dans une colonne impaire, alors
>> L'opérateur Mod permet de diviser deux nombres en ne renvoyant que le reste. Dans notre cas, on divise le numéro de colonne
>> de la cellule active par 2. Si le reste de cette division est différent de 0, alors il s'agit d'une colonne impaire :
>> 1 Mod 2 = 0 reste 1
>> 2 Mod 2 = 1 reste 0
>> 3 Mod 2 = 1 reste 1
>> 4 Mod 2 = 2 reste 0
If sRge = "" Then
> Si sRge est vide (=> on se trouve en colonne 1), alors
sRge = oRge.Value
> sRge prend la valeur de la cellule active
Else
> sRge n'est pas vide (=> on se trouve en colonne 3 ou 5 ou 7 ou ... ou 19), donc
sRge = sRge & "," & oRge.Value
> On ajoute, à la suite de sRge, une virgule, puis la valeur de la cellule active
End If
> Fin du test (If sRge = "")
>> Si par exemple une ligne contient uniquement des "1", sRge prendra donc successivement les valeurs suivantes :
>> 1
>> 1,1
>> 1,1,1
>> 1,1,1,1
>> etc. jusqu'à 1,1,1,1,1,1,1,1,1,1
If oRge.Column = 19 Then
> Si la cellule active se trouve en colonne 19 (la dernière qui nous intéresse), alors
MsgBox "Ligne traitée : " & oRge.Row & " -> Valeurs sélectionnées : " & sRge
> On affiche un message d'information, comprenant le numéro de la ligne traitée et le contenu de sRge
sRge = ""
> On remet sRge à blanc (on vide la variable)
End If
> Fin du test (If oRge.Column = 19)
End If
> Fin du test (If oRge.Column Mod 2 <> 0)
Next oRge
> On passe à la cellule suivante
Slts
wally