XL 2019 Vérifier la position du rectangle et créer une action

bennp

XLDnaute Occasionnel
Bonjour,

je souhaiterais vérifier si le rectangle est bien placé entre D8 et I28 (ou on pourrait aussi vérifier si le bord haut gauche du rectangle est bien situé entre D10 et F15).

Si c'est le cas, mettre "OK" en A1, sinon mettre "PAS OK" en A1.

Merci d'avance pour votre aide.

ps: en VBA svp :)
 

Pièces jointes

  • position rectangle.xlsx
    9.9 KB · Affichages: 4
C

Compte Supprimé 979

Guest
Bonjour Bennp

On peut connaitre la cellule de gauche contenant la forme mais pas celle de droite 🤔

VB:
Sub Verif()
  Dim Shp As Shape
  For Each Shp In ActiveSheet.Shapes
    MsgBox "Cellule de gauche en haut de la forme " & Shp.TopLeftCell.Address(0, 0)
  Next Shp
End Sub

A moins de faire une moulinette avec un calcul tarabiscoté

@+
 

bennp

XLDnaute Occasionnel
Super Merci,
j'ai pu vérifier si la case trouvée était bien dans mon cadre recherché :
VB:
Sub Verif()
  Dim Shp As Shape
  For Each Shp In ActiveSheet.Shapes
    'MsgBox "Cellule de gauche en haut de la forme " & Shp.TopLeftCell.Address(0, 0)
    Range("A2") = Shp.TopLeftCell.Address(0, 0)
    
  
  Next Shp
If Range("A2").Value = "D8" Or Range("A2").Value = "D9" Or Range("A2").Value = "D10" Or Range("A2").Value = "D11" Or Range("A2").Value = "D12" Or Range("A2").Value = "E8" Or Range("A2").Value = "E9" Or Range("A2").Value = "E10" Or Range("A2").Value = "E11" Or Range("A2").Value = "D12" Then
Range("A1") = "ok"

Else

Range("A1") = "pas ok"

End If

End Sub


Est ce qu'on pourrait améliorer le code en demandant directement si la valeur de la cellulle est entre D8 et E12 sans ajouter tous les OR ?
 

Pièces jointes

  • position rectangle.xlsx
    10.3 KB · Affichages: 2

job75

XLDnaute Barbatruc
Voyez le fichier joint et cette macro :
VB:
Sub Test()
With ActiveSheet.Shapes("Rectangle 1")
    [A1] = IIf(Intersect([B8:E16], .TopLeftCell) Is Nothing Or Intersect([B8:E16], .BottomRightCell) Is Nothing, "pas OK", "OK")
End With
End Sub
 

Pièces jointes

  • position rectangle(1).xlsm
    17.6 KB · Affichages: 2
C

Compte Supprimé 979

Guest
Re,

Sinon on peut faire aussi
VB:
Sub Verif()
  Dim Shp As Shape, Plg As Range
  Set Shp =  ActiveSheet.Shapes("Rectangle 1")
  Set Plg = Range(Shp.TopLeftCell.Address & ":" & Shp.BottomRightCell.Address)
  Range("A" & Rows.Count).End(xlUp).Value = Not Intersect(Plg, Range("D8:E12")) Is Nothing
End Sub
😜

@+
 

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 243
Membres
103 497
dernier inscrit
JP9231