OVH Cloud OVH Cloud

Compter croix

7 réponses
Avatar
nicolas65
Bonjour à tous,

Je sais faire des croix dans des cases par un double clic dans une feuille
entière. Y-a-t-il moyen de réduire la zone à certaines cellules ?
T16 ; W16; Z16; AC16; AF16 ou AI16
T19 ; W19; Z19; AC19; AF19 ou AI19
T21 ; W21; Z21; AC21; AF21 ou AI21
...
T55 ; W55; Z55; AC55; AF55 ou AI55
J'aimerais également qu'un nouveau clic dans une cellule contenant dèja une
croix fasse disparaitre cette croix
J'aimerais enfin qu'il ne puisse pas y avoir deux croix dans la même ligne.

Merci

PS: Par croix il faut entendre en fait une bordure en forme de croix
(diagonales d'une case)

7 réponses

Avatar
AV
En ayant d'abord nommé ta plage (appui sur la touche Ctrl puis sélection des
cellules puis insertion Nom > définir > "laZone")
Dans le module de la feuille :

Private Sub Worksheet_BeforeDoubleClick(ByVal zz As Range, Cancel As Boolean)
If Intersect(zz, [laZone]) Is Nothing Then Exit Sub
colMax = Cells.Find("*", , , , xlByColumns, xlPrevious).Column
If zz.Borders(xlDiagonalDown).LineStyle + _
zz.Borders(xlDiagonalDown).LineStyle = 2 Then
zz.Borders(xlDiagonalDown).LineStyle = xlNone
zz.Borders(xlDiagonalUp).LineStyle = xlNone
Else
For i = 1 To colMax
If Cells(zz.Row, i).Borders(xlDiagonalDown).LineStyle _
+ Cells(zz.Row, i).Borders(xlDiagonalDown).LineStyle = 2 _
Then x = x + 1
Next
If x = 0 Then
zz.Borders(xlDiagonalDown).LineStyle = xlContinuous
zz.Borders(xlDiagonalUp).LineStyle = xlContinuous
End If
End If
Cancel = True
End Sub

AV
Avatar
nicolas65
Merci pour votre réponse rapide. J'ai cependant un problème dans la sélection
de mes cellules. Mes cellules à sélectionner ne sont pas contigues et lorsque
j'essaye de faire plus d'une vingtaine de sélections, la sélection revient à
zéro. Hors j'ai 78 cellules à sélectionner minimum mais j'aurais aimé si
possible 156
Merci


En ayant d'abord nommé ta plage (appui sur la touche Ctrl puis sélection des
cellules puis insertion Nom > définir > "laZone")
Dans le module de la feuille :

Private Sub Worksheet_BeforeDoubleClick(ByVal zz As Range, Cancel As Boolean)
If Intersect(zz, [laZone]) Is Nothing Then Exit Sub
colMax = Cells.Find("*", , , , xlByColumns, xlPrevious).Column
If zz.Borders(xlDiagonalDown).LineStyle + _
zz.Borders(xlDiagonalDown).LineStyle = 2 Then
zz.Borders(xlDiagonalDown).LineStyle = xlNone
zz.Borders(xlDiagonalUp).LineStyle = xlNone
Else
For i = 1 To colMax
If Cells(zz.Row, i).Borders(xlDiagonalDown).LineStyle _
+ Cells(zz.Row, i).Borders(xlDiagonalDown).LineStyle = 2 _
Then x = x + 1
Next
If x = 0 Then
zz.Borders(xlDiagonalDown).LineStyle = xlContinuous
zz.Borders(xlDiagonalUp).LineStyle = xlContinuous
End If
End If
Cancel = True
End Sub

AV





Avatar
nicolas65
Bonjour,

J'ai toujours le même problème pour définir le nom de ma zone. J'ai essayé
de contourner le problème en tentant de nommer la zone directement dans la
macro mais je n'ai pas réussi


En ayant d'abord nommé ta plage (appui sur la touche Ctrl puis sélection des
cellules puis insertion Nom > définir > "laZone")
Dans le module de la feuille :

Private Sub Worksheet_BeforeDoubleClick(ByVal zz As Range, Cancel As Boolean)
If Intersect(zz, [laZone]) Is Nothing Then Exit Sub
colMax = Cells.Find("*", , , , xlByColumns, xlPrevious).Column
If zz.Borders(xlDiagonalDown).LineStyle + _
zz.Borders(xlDiagonalDown).LineStyle = 2 Then
zz.Borders(xlDiagonalDown).LineStyle = xlNone
zz.Borders(xlDiagonalUp).LineStyle = xlNone
Else
For i = 1 To colMax
If Cells(zz.Row, i).Borders(xlDiagonalDown).LineStyle _
+ Cells(zz.Row, i).Borders(xlDiagonalDown).LineStyle = 2 _
Then x = x + 1
Next
If x = 0 Then
zz.Borders(xlDiagonalDown).LineStyle = xlContinuous
zz.Borders(xlDiagonalUp).LineStyle = xlContinuous
End If
End If
Cancel = True
End Sub

AV





Avatar
AV
J'ai toujours le même problème pour définir le nom de ma zone. J'ai essayé
de contourner le problème en tentant de nommer la zone directement dans la
macro mais je n'ai pas réussi


Suggestions :
* Utiliser la méthode Union
* Comme les cellules contenant des "croix" ne me semble pas destinées à recevoir
autre chose, tu pourrais les formater d'une façon bizarroïdes (type de police,
couleur...etc) et dans la proc évènementielle faire, avant exécution de la série
d'instructions, un test sur "zz"

AV

Avatar
nicolas65
Bonjour,
Tout ceci semble très intéressant mais je ne sais pas faire ni l'une ni
l'autre des solutions
Merci

J'ai toujours le même problème pour définir le nom de ma zone. J'ai essayé
de contourner le problème en tentant de nommer la zone directement dans la
macro mais je n'ai pas réussi


Suggestions :
* Utiliser la méthode Union
* Comme les cellules contenant des "croix" ne me semble pas destinées à recevoir
autre chose, tu pourrais les formater d'une façon bizarroïdes (type de police,
couleur...etc) et dans la proc évènementielle faire, avant exécution de la série
d'instructions, un test sur "zz"

AV






Avatar
AV
Un exemple là :
http://cjoint.com/?mwpJTaq0fC

AV
Avatar
nicolas65
MERCI je touche presque au but. Il ne me reste que plus que quelques petites
adaptations que je devrais réussir à faire tout seul. Ce sera surement plus
simple que d'adapter l'exemple sur les Doublons, Comparaisons, MAJ ...


Un exemple là :
http://cjoint.com/?mwpJTaq0fC

AV