Explication d'une procédure

Bonsoir !

Je refais appel à votre aide

J'ai cherché à créer une procédure pour rendre une cellule cochable par double-clics et j'ai trouvé un code permettant de le faire.

J'ai essayé de le comprendre mas il y a deux ligne que je ne comprend et c'est là que j'ai besoin de votre aide

Le code est le suivant :

Private Sub Worksheet_BeforeDoubleClick(ByVal Cell_a_coch As Range, Cancel As Boolean)
  Dim DerLigTab As Integer
  If Cell_a_coch.Count > 1 Then Exit Sub  ' Vérifie que le nombre de cellule est supérieur à 1, si oui la procédure s'arrête pour éviter les erreurs et problèmes, si non elle continue
  DerLigTab = Range("A_REALISER").Row
  If Intersect(Range("F3:F17" & DerLigTab - 1), Cell_a_coch) Is Nothing Then Exit Sub
  If Cell_a_coch.Value = "" Then  ' Vérifie si la cellule est vide
    Cell_a_coch.Value = "X"  ' Si oui, un "X" apparaît pour représenter la coche
  Else
    Cell_a_coch.ClearContents  ' Si non, la cellule est nettoyée (permet de décocher la cellule)
  End If
End Sub

Les annotations déjà inscrites sont celles que j'ai fait. Les lignes qui n'ont pas d'annotations sont celle que je ne comprend pas

Merci d'avance

Bonsoir,

DerLigTab = Range("A_REALISER").Row 'affecte à la variable DerLigTab le numéro de ligne de la plage nommée "A_REALISER"

  If Intersect(Range("F3:F17" & DerLigTab - 1), Cell_a_coch) Is Nothing Then Exit Sub 

La deuxième teste si la cible se trouve dans la plage F3:F17, mais il y a ambiguïté, DerLigTab - 1 devrait définir la fin de la plage à la place de 17 ? La ligne devrait plus logiquement s'écrire :

If Intersect(Range("F3:F" & DerLigTab - 1), Cell_a_coch) Is Nothing Then Exit Sub

A toi de vérifier.

Cordialement.


Du coup j'ai zappé l'explication !

La méthode Intersect renvoie un objet Range, la plage constituée par l'intersection des deux plages précitées. Si cette intersection est vide rien n'est renvoyé, et s'agissant d'un objet la valeur de ce "rien" est Nothing, d'où la forme de ce test : on teste si l'intersection renvoyée est "vide", auquel cas on interrompt.

Si on voulait tester l'inverse, on testerait si l'intersection n'est pas rien, soit le même test avec Not ( If Not Intersect...... Is Nothing...) car on n'a pas de moyen comparable pour tester si "est quelque chose"...

bonsoir

Private Sub Worksheet_BeforeDoubleClick(ByVal Cell_a_coch As Range, Cancel As Boolean)  'ce événement  se produit lorsqu'un utilisateur
'double-clique sur une feuille de calcul, avant l'action de double-clic
 Dim DerLigTab As Integer ' déclaration des variables  Emplacement de stockage nommé " DerLigTab "  vous avez le choix de le nommer comme vous voulez
  If Cell_a_coch.Count > 1 Then Exit Sub  ' Vérifie que le nombre de cellule est supérieur à 1, si oui la procédure s'arrête pour éviter les erreurs et problèmes, si non elle continue
 DerLigTab = Range("A_REALISER").Row ' donne la derniere ligne non vide
'"A_REALISER")  un nom de range sur la feuille par exemple     vous pouver nommer " a1 :b12 "  avec   " Rshirudo" donc
' DerLigTab = Range(" Rshirudo").Row ' donne la derniere ligne non vide
 ' mais je pense pas que c est la bonne methode  d avoir la derniere ligne non vide
If Intersect(Range("F3:F17" & DerLigTab - 1), Cell_a_coch) Is Nothing Then
Exit Sub

'Range("F3:F17" & DerLigTab - 1… si  donne la derniere ligne non vide  >> DerLigTab =20    donc  DerLigTab - 1 =19
'Alors nous aurons   If Intersect(Range("F3:F1719), Cell_a_coch) Is Nothing Then

'Je pense que la personne qui ecrit le code a voulu :
' Par addition de : DerLigTab - 1  >>> If Intersect(Range("F3:F" & 17 + DerLigTab - 1), Cell_a_coch) Is Nothing Then
' Ou bien a oublie de supprimer le 17  mais tous ces façons correcte selon les besoin
 ' If Intersect(Range("F3:F17" & DerLigTab - 1), Cell_a_coch) Is Nothing Then  veut  si  DoubleClick a été sur une cellule limite
'Par cette plage  ("F3:F17" & DerLigTab - 1) >>>>> (Range("F3:F1719), Cell_a_coch)

  If Cell_a_coch.Value = "" Then  ' Vérifie si la cellule est vide
   Cell_a_coch.Value = "X"  ' Si oui, un "X" apparaît pour représenter la coche
 Else
    Cell_a_coch.ClearContents  ' Si non, la cellule est nettoyée (permet de décocher la cellule)
 End If
End Sub

Je vous remercie de vos réponses

Rechercher des sujets similaires à "explication procedure"