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