"If Not Intersect" fonctionne mal !!!

Thekak

XLDnaute Nouveau
Bonjour,

J'utilise la fonction "If Not Intersect" pour effacer des formes (shapes) situées dans un range bien défini avec le code suivant :

Code:
Dim A As Integer
A = 7
Dim sh As Shape
For Each sh In ActiveSheet.Shapes
    If Not Intersect(sh.TopLeftCell, Range(Cells(A, 1), Cells(A + 25, 39))) Is Nothing Then sh.Delete
Next sh

De manière qui me parait aléatoire, ça marche très bien ou ma macro m'envoie en debug en me surlignant cette partie du code :

Code:
If Not Intersect(sh.TopLeftCell, Range(Cells(A, 1), Cells(A + 25, 39))) Is Nothing Then

Pouvez-vous m'aider SVP car ça fait un moment que je sèche là-dessus.
Avez-vous une idée de ce qui pourrait faire bugguer cette formule ou avez-vous une autre méthode à me proposer pour réaliser la même chose.
Merci d'avance !
 
Dernière édition:

klin89

XLDnaute Accro
Re : "If Not Intersect" fonctionne mal !!!

Re,

Dans ce cas, c'est l'événement SelectionChange de ta feuille de calcul qui se déclenche.
Lorsque tu sélectionnes un nouvel élément dans la liste déroulante c'est l'évènement Change qui se déclenche.

Le problème provient peut-être de là !

Klin89
 

Fo_rum

XLDnaute Accro
Re : "If Not Intersect" fonctionne mal !!!

Bonsoir,

la liste de validation est remplacée par une liste liste déroulante.
Voir les autres codes dans le fichier joint (x = Application.Caller pose problème chez moi).
 

Pièces jointes

  • ComBoImages.xlsm
    200.4 KB · Affichages: 63

Thekak

XLDnaute Nouveau
Re : "If Not Intersect" fonctionne mal !!!

Bonsoir,

Je rame pas mal pour comprendre ce que tu as fait, mais ça a l'air de bien marcher.
Ta solution permet en effet d'éviter la sélection de données et visiblement le bug ne se reproduit pas.
Pour les modifications que tu as faites dans les macros, n'étant pas un pro du VB, j'essaye de comprendre, mais j'ai un peu de mal.
Si ça te va, je reviendrai vers toi si je ne comprends pas certains points.
Merci en tout cas de ton aide,
 

Thekak

XLDnaute Nouveau
Re : "If Not Intersect" fonctionne mal !!!

Avec quelques modifs ça a l'air de pas mal marcher.
Je préfère tout de même dans son utilisation le menu déroulant en sélection de données, mais là au moins le bug ne se reproduit pas.
Merci beaucoup,
 

xou

XLDnaute Nouveau
Re : "If Not Intersect" fonctionne mal !!!

Bonjour,

Je suis avec attention votre discussion car j'ai le même problème.
J'avais fait part du fait que c'était lié à la sélection de cellules avec validation de données.
Dans mon cas, ces cellules là n'ont aucun lien avec la macro. Je n'ai pas besoin de les sélectionner pour faire fonctionner la macro. Par contre elles me servent à remplir le document d'informations récupérées ailleurs.
Je voudrais éviter de toutes les modifier en liste déroulante.
Que se passe t-il dans Excel au moment de la simple sélection d'une de ces cellules ?
Y a t-il un code à insérer au début de la macro pour annuler cet effet ?

Klin89 a dit :

"Dans ce cas, c'est l'événement SelectionChange de ta feuille de calcul qui se déclenche.
Lorsque tu sélectionnes un nouvel élément dans la liste déroulante c'est l'évènement Change qui se déclenche.

Le problème provient peut-être de là !"

Je ne comprends pas, pouvez-vous m'en dire un peu plus ?

Merci pour votre collaboration car je n'utilise plus ma feuille de calcul à cause de ce problème...

Cordialement,
Xou
 

xou

XLDnaute Nouveau
Re : "If Not Intersect" fonctionne mal !!!

Bonjour,
J'ai trouvé une parade pour mon cas.
Je me suis aperçu que dans le débogueur, la ligne jaune m'indiquait l'erreur sur "shape.TopLeftCell",
alors que je pensais qu'il s'agissait de "if not intersect". J'ai supposé qu'Excel ne trouvait donc pas cette valeur pour tous les types de shapes de ma feuille. J'ai limité la macro aux lignes et rectangles et ça marche.
Maintenant, quel rapport entre les cellules avec validation de données et les shapes, si quelqu'un trouve, je suis preneur de l'info.
Peut-être que cette solution peut convenir à Thekak.
Merci pour votre collaboration à mon problème.
Voici le code que j'ai rajouté (en deuxième ligne):

For Each s In ActiveSheet.Shapes
If s.Type = msoLine Or s.Type = msoShapeRectangle Then
If Not Intersect(s.TopLeftCell, Range("$B$1:$L$8")) Is Nothing Then
s.Delete
End If
End If
Next s

Encore merci, à bientot
Cordialement,
Xou
 

Dranreb

XLDnaute Barbatruc
Re : "If Not Intersect" fonctionne mal !!!

Bonsoir à tous.
C'est curieux, cette histoire me rappelle vaguement quelque chose qui m'était arrivé.
En tout cas vous auriez peut être intérêt à vérifier le Type de chaque Shape trouvé avant d'essayer de le supprimer. Ça ne m'étonnerait pas qu'il y en ait dans le tas certains utilisés temporairement par Excel qu'on ne peut pas supprimer :
Cette propriété renvoie ou définit le type de forme. Type de données MsoShapeType en lecture seule.
MsoShapeType peut être l'une de ces constantes MsoShapeType.
msoAutoShape
msoCallout
msoCanvas
msoChart
msoComment
msoDiagram
msoEmbeddedOLEObject
msoFormControl
msoFreeform
msoGroup
msoLine
msoLinkedOLEObject
msoLinkedPicture
msoMedia Ne peut pas être utilisée avec cette propriété. Cette constante est utilisée avec des formes dans d'autres applications Microsoft Office.
msoOLEControlObject
msoPicture
msoPlaceholder Ne peut pas être utilisée avec cette propriété. Cette constante est utilisée avec des formes dans d'autres applications Microsoft Office.
msoScriptAnchor
msoShapeTypeMixed
msoTable
msoTextBox
msoTextEffect

P.S Je n'avais même pas vu le dernier message de xou, qui confirme presque ce que j'ai dit.
Et pour répondre au sujet du rapport en question, j'ai bien peur que la liste de validation et sa flèche soient des shapes temporaires !

Cordialement.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz