Shapes & Erreur d'éxécution 91

Bonjour à tous,

D'habitude, je parviens à me débrouiller seul, mais là je coince depuis quelques temps.

Voici mon soucis : Case "CRENEAU1" WbPause.Worksheets("App").Shapes("CRENEAU1").Visible = False Nom = InputBox("Nom ?") Set CellsA = WbDonne.Worksheets("Feuil1").Cells(2, 2)

Or quand j'exécute mon code via un bouton, cela me met une erreur d'exécution 91 "Variable objet ou variable de bloc with non définie"
Bien que ce message soit clair, je ne vois pas le soucis.

Merci d'avance de m'avoir lu et peut-être même de m'avoir aidé.

Cordialement,

Bonjour,

Pour poster du code, n'hésitez pas à vous aider des balises </> du ruban de commentaire.

Ce n'est pas très clair car il n'y a pas de contexte et on ne sait pas sur quelle ligne a lieu l'erreur :

select case ???
    Case "CRENEAU1"
        WbPause.Worksheets("App").Shapes("CRENEAU1").Visible = False
        Nom = InputBox("Nom ?")
        Set CellsA = WbDonne.Worksheets("Feuil1").Cells(2, 2)
    case else
end select

Il fait regarder tous les objets : WbPause, sa feuille "App", sa forme "CRENEAU1",
WbDonne, sa feuille "Feuil1".

Je pense que l'erreur porte sur la ligne de WbPause et que la forme n'existe pas sous ce nom.

Cdlt,

Bonjour,

Tout d'abord merci ! et désolé pour la mise en forme de la partie "Code".

Le contexte est le suivant :
- J'ai une feuille Excel avec plusieurs boutons que je veux masquer quand on appuie dessus afin de laisser apparaître une donnée.

L'erreur apparaît sur la ligne :

WbPause.Worksheets("App").Shapes("CRENEAU1").Visible = False

Or les noms ont été vérifiés et tout est bon.
C'est une des premières fois que j'utilise l'objet "Shapes", mais dans Excel il apparaît bien sous ce nom CRENEAU1

WbPause est mon Workbooks que j'utilise.
WbDonne est mon Workbooks de données externe au fichier.

Merci

Bonjour,

peux-tu mettre ton fichier avec ton code (anonymisé si nécessaire) ?

Bonjour,

Autrement, ça devrait marcher avec :

WbPause.Worksheets("App").Shapes(array("CRENEAU1")).Visible = False

?

Je ne sais pas l'expliquer, mais l'enregistreur de macro met toujours le array. Et il me semble avoir remarqué que ça plantait régulièrement sans (mais je ne l'affirmerais pas).

Le fichier est composé de beaucoup de donnée sensible.
Je vais essayer la réponse de JoyeuxNoel et si cela ne fonctionne pas, j'essaierais de faire une version sans lien.

Je vous tiens au courant

Bonjour JoyeuxNoel, h2so4,

@SanGroku, je vous propose un petit essai si j'ai compris (en faisant fi du reste qui parait sans lien avec le problème), avec ce code à affecter à la forme en question :

Sub MasquerForme()

set WbPause = activeworkbook
WbPause.Worksheets("App").Shapes(application.caller).Visible = False

end sub

Edit : @JoyeuxNoel, en général, quand je définis bien le nom de la forme, ça ne plante pas mais ça ne coûte rien de le rajouter.

Et cas où, pour avoir des infos :

Sub InfosForme()

with activesheet.Shapes(application.caller)
    msgbox "[" & .name & "]" 'les crochets pour voir s'il y a des espaces
    '.Visible = False
    msgbox "appartient à feuille " & .parent.name & " du classeur " & .parent.parent.name
end with

end sub

Cdlt,

Merci pour votre aide.
En effet, au vu de vos différentes remarques, je pense que mon problème vient alors du nom de ma forme.

image

Voici la première forme qui se nomme CRENEAU1.
Est-ce bien ici que l'on nomme sa forme ?

Je suis en train de refaire le fichier afin de vous le publier, mais ça va prendre un peu de temps.

Cordialement,

PS : L'écriture

WbPause.Worksheets("App").Shapes(array("CRENEAU1")).Visible = False

Me met "que le nom de l'objet est introuvable

Je viens d'éditer mon code pour que vous fassiez un essai...

Oui, normalement, c'est dans la petite barre de références qu'on nomme la forme.

Il faut donc faire clic droit sur la forme, affecter la macro InfosForme puis clic gauche sur la forme.

Cdlt,

La thèse de l'espace involontaire prend de l'ampleur.

Oui, les 3 quarts du temps, les noms se retrouvent avec un espace à la fin ! Attention à l'espace de fin !

Mais comme on ne sait pas ce qu'est WbPause, on est pas sûr que cette forme appartienne bien aux parents désignés.

EDIT : J'ai réédité mon code InfosForme sur lequel j'avais oublié la propriété .Name

En effet, c'est la thèse qui semble la plus probable malgré mes différentes vérifications.

Mais avec le code donné par 3GB, j'ai bien [CRENEAU1].
Et le reste correspond également.

Après avoir fait quelques tests, cela fonctionne sur toutes les versions de Windows inférieur à la 1903.

Ca correspond à ce que vous pensez avoir défini mais pas à ce qu'il y a dans votre code, qu'il serait intéressant maintenant de voir pour comprendre.

J'ai mis une macro MasquerForme. Si vous l'essayez, vous verrez que la forme sera masquée. Donc, la raison la plus plausible est que vos 2 classeurs contiennent chacun une feuille "App" et que WbPause soit mal affecté et soit en fait celui dont la feuille "App" ne contient pas l'image "CRENEAU1".

Cdlt,

Bonjour à tous,

Encore merci pour votre aide précieuse.

Je suis parvenu après plusieurs tentatives à résoudre mon soucis.
J'utilisais pour WbPause :

Set WbPause = Workbooks.Open("...")

Et en utilisant :

WbPause = ThisWorkbook

Cela fonctionne correctement.

Merci de m'avoir mis sur la piste !

Sujet résolu :D

Rechercher des sujets similaires à "shapes erreur execution"