Compréhension code: Instruction avec 2 opérateurs

Bonsoir à tous,

Je suis trèèèès loin d'être un dieu en VBA et j'aimerais bien quelques explications sur le code suivant qui n'est pas de moi.

J'ai un tableau avec 82 colonnes (toutes avec un en-tête différent) et j'ai créé un userform avec autant de cases à cocher qu'il y a de colonnes.
Le but est de masquer ou démasquer la colonne voulue en cliquant sur la checkbox dont la caption correspond bien évidemment à l'en-tête de la dite colonne.

Le code n'est pas complet puisqu'il y a le userform, un module de classe qui permet d'instancier les checkbox créées dynamiquement si je comprends bien puisque toutes les checkBox du UserForm n'ont aucun code dans le userform.

Dim NbCol As Integer

Private Sub UserForm_Activate()

NbCol = WsD.UsedRange.Columns.Count
ChkBtn

End Sub

Private Sub ChkBtn()

Dim i As Integer
Dim SCap As String

For i = 1 To NbCol
   With Me.Controls("CheckBox" & i)
         SCap = .Caption
         .Value = Not Range("k" & SCap).Width = 0  ---> Je ne comprends pas cette instruction !
   End With
Next

End Sub

Je ne comprends pas l'instruction:

.Value = Not Range("k" & SCap).Width = 0

Déjà, comment c'est possible d'avoir 2 opérateurs "=" dans la même "ligne" ?
Ensuite, je suppose que si on définit une range à width = 0, cela signifie que toute la colonne passe en width = 0.
Ce qui correspond donc à la méthode "hidden".
Du coup, c'est quoi l'avantage d'utiliser le width = 0 plutôt que le hidden ?

Après, et c'est là où j'ai le plus de mal, comment et pourquoi "Not" Range ?
Ça veut dire quoi ?
Si j'écris:

If Not A>B then ...

On comprend bien l'idée mais pour Not Range...
J'attribue la valeur "Not Range("k" & SCap).Width = 0" à la checkbox ?

Les values des checkBox ce n'est pas censé être True ou False ?

Enfin, la range, à chaque tour de boucle, est la concaténation de "k" et du compteur de boucle.
Cela signifie que si la caption de ma checkBox est "toto", ma range devient donc "ktoto": c'est une plage nommée ?

Bref 3 lignes de code et je suis déjà grave paumé.
En tout cas, celui qui a écrit ce code est vraiment trop fort...

Merci d'avance pour vos lumières.

Cordialement.

Bonjour pipout64

On peut écrire la ligne autrement

.Value = Not (Range("k" & SCap).Width = 0)

2 opérateur sur une ligne, permet de tester et de renvoyer la valeur de la propriété et non de lui attribuer
Ici le code teste si la largeur de la colonne = 0

Si c'est vrai, on inverse la valeur avec Not, ça devient Faux
Et on attribue ce vrai/faux au CheckBox

Ce qui fait que le CheckBox est décoché si la colonne est masquée

En ce qui concerne le Range, ce n'est pas la concaténation avec le compteur de boucle, mais avec le nom qui identifie le CheckBox

SCap = .Caption

A+

Bonjour Bruno.
Je suis ravi que vous ayez pris la peine de m'expliquer un peu ces bouts de code et vous en remercie.

J'ai compris pour les 2 opérateurs "=".

Par contre quand vous écrivez "On peut écrire la ligne autrement": le code en dessous de votre phrase est identique à celui que j'ai renseigné dans mon 1er post ?

Enfin, vous me confirmez qu'on pourrait tout aussi bien utiliser la méthode "hidden" en alternative à Width = 0 dans l'instruction ".Value = Not (Range("k" & SCap).Width = 0)" ?
Il n'y a pas d'avantage particulier ?

Bonne matinée.

Rechercher des sujets similaires à "comprehension code instruction operateurs"