Comment masquer plusieurs objets

dent_de_sabre

XLDnaute Nouveau
Bonjour,
Nouveau sur ce forum, j'ai une question à tous les spécialistes excel et vba:

Je voudrais pouvoir créer une macro masquant automatiquement plusieurs objets dans une feuille excel spécifiée. J'ai apparement trouvé le bon code vba, ça doit être quelque chose du genre : activesheet.shapes("nombojet").visible=false/true mais voila le "nomobjet" me pose un problème !!!!!!

L'un d'entre-vous aurai-t'il une réponse, un exemple de code pour réaliser cette opération ????? Un pas à pas détaillé ????

S'il manque des infos, n'hésitez pas, j'essayerai d'être plus clair !!!! :p

Merci d'avance
 

Celeborn61

XLDnaute Occasionnel
Re : Comment masquer plusieurs objets

Salut,

Attention, chaque objet porte un nom et un index. Tout comme tout ce qui est dans une collection, selon les termes Excellien.

Si tu fais:
For x = 1 To 5
ActiveSheet.Shapes(x).Visible = false
Next

Tu va voir disparaitre les objets d'index 1 à 5, mais pas ceux que tu aura nommé "1", "2", "3", "4" et "5". Ou alors, coup de chance.

Si tu veux masquer tout les objets, c'est la meilleure solution, à ma connaissance.

Mais si tu veux n'en masquer que certain, je pense qu'il vaux mieux passer par un tableau de nom d'objet.

Dim Tab(Nombre d'objet) as String
Tab(1)="Nom1"
Tab(2)="Nom2"
Tab(3)="Nom3"
...
For x = 1 To Nombre d'objet
ActiveSheet.Shapes(Tab(x)).Visible = false
Next
 

dent_de_sabre

XLDnaute Nouveau
Re : Comment masquer plusieurs objets

Merci pour ces conseils.

J'essaye ce soir et vous dis si ça marche.

Etant novice dans vba et sans formation spéciale, j'espère ne pas avoir fait d'erreurs dans les termes informatiques. Dans mon cas, j'ai créé via excel plusieurs zones de texte, mais je n'arrive pas à les retrouver dans vba (pas de nom, ni d'index). D'ou mon pb pour les nommer dans ma macro !!!!!

Bref, j'essaye avec un tableau de noms d'objet
 

dent_de_sabre

XLDnaute Nouveau
Re : Comment masquer plusieurs objets

Re-bonsoir,

Alors je viens d'essayer ces formules.

1. J'arrive à masquer et faire réapparaitre les objets via la même macro à l'aide de la formule suivante:
Sub Masquer_Apparaitre()
For x = 13 To 15
If ActiveSheet.Shapes(x).Visible = True Then
ActiveSheet.Shapes(x).Visible = False
Else: ActiveSheet.Shapes(x).Visible = True
End If
Next
End Sub

Toutefois, cette formule n'est pas très pratique car je n'arrive pas à identifier un objet indépendamment des autres.

J'ai essayé avec la seconde formule: la liste de noms mais ça ne fonctionne pas. Lorsque je tape
Dim Tab(Nombre d'objet) as String
Tab(1)="Nom1"
Tab(2)="Nom2"
Tab(3)="Nom3"

Il me met un message d'erreur : "attendu identificateur" !!!!!!!!

Quelqu'un comprend t'il pourquoi ???? Il me manque un élément dans la formule ??? Existe-t'il une autre méthode pour identifier chaque objet pour ensuite les inclures dans ma formule ????

Merci de vos réponses
 

dent_de_sabre

XLDnaute Nouveau
Re : Comment masquer plusieurs objets

Merci pour ta réponde rapide. Je débute donc sorry si je parait un peu lent à la compréhension !!!!! En fait grâce à vos conseils j'ai écris 3 formules différentes. Comme indiqué dans mon premier post, la première fonctionne mais est peu maniable car elle ne me permet pas de choisir les objets que je veux masquer. Les deux autres formules ne fonctionnent pas en l'état. Si je te met les deux peux-tu m'indiquer si je commet une erreur ?????


1ère formule:
Sub Masquer_Apparaitre()
For x = 13 To 15
If ActiveSheet.Shapes(x).Visible = True Then
ActiveSheet.Shapes(x).Visible = False
Else: ActiveSheet.Shapes(x).Visible = True
End If
Next
End Sub
Celle-ci fontionne


2ème formule:
Dim TabName As String
TabName(1) = "bouchons moulés"
TabName(2) = "bouchons réutilisables"
TabName(3) = "bouchons à usage unique"
TabName(4) = "Arceaux"

For x = 1 To 4
If ActiveSheet.Shapes(TabName(x)).Visible = True Then
ActiveSheet.Shapes(TabName(x)).Visible = False
Else: ActiveSheet.Shapes(TabName(x)).Visible = True
End If
Next
Lors de l'execution, le message suivant apparait :"tableau attendu"


3ème formule (sur tes conseils):
For x = 1 To 4
If ActiveSheet.Shapes(x).Name = True Then
ActiveSheet.Shapes(x).Name = False
Else: ActiveSheet.Shapes(x).Name = True
End If
Next
Quand je l'écrie comme ceci, ça ne fonctionne pas, il me met une erreur: "erreur d'execution '70' permission refusée". Jamais eu ce type d'erreur!!!


Désolé pour la longueur du post mais j'essaye d'être le plus clair possible.
Encore merci de votre aide
 

skoobi

XLDnaute Barbatruc
Re : Comment masquer plusieurs objets

Re bonjour,

"Name" est explicite je pense non?:

If ActiveSheet.Shapes(x).Name = "bouchons moulés" Then

La 1ere formule peut être plus courte:

For x = 13 To 15
ActiveSheet.Shapes(x).Visible = Not ActiveSheet.Shapes(x).Visible
Next
 

dent_de_sabre

XLDnaute Nouveau
Re : Comment masquer plusieurs objets

Bonjour,

Merci skoobi pour ces préçisions.

Effectivement ma 1ère formule pouvait être nettement plus courte. Merci pour cette aide préçieuse.

Pour en revenir avec la fonction "Name". Oui c'est explicite dans le sens ou je comprend bien qu'elle renvoi à un nom définit après. Dans mon exemple "bouchons moulés" ou "bouchons réutilisables". Par contre comment faire pour grouper plusieurs noms et pour les masquer ou non. Il faut que je la compile avec la fonction "Visible" ???
Et puis après essai, dès que j'ai introduit le .Name dans ma formule (à la place du .Visible), j'obtient tjr le même message d'erreur : permission refusée !!!!

C'est décourageant. Et puis surtout j'ai l'impression de passer pour un gros nul !!! Très frustrante comme situation.

Mais puisque la 1ère formule fonctionne, n'existe-t'il pas un moyen (en gardant les numéros) de ne sélectionner que certains numéros d'objet. Pour résumer au lieu d'écrire For x = 13 To 15, écrire un truc du genre For x = 13, 14, 15, 17, 20... Je dis peut être une bêtise là !!!! lol
 

skoobi

XLDnaute Barbatruc
Re : Comment masquer plusieurs objets

Re,

n'existe-t'il pas un moyen (en gardant les numéros) de ne sélectionner que certains numéros d'objet. Pour résumer au lieu d'écrire For x = 13 To 15, écrire un truc du genre For x = 13, 14, 15, 17, 20... Je dis peut être une bêtise là !!!! lol

Non, tu ne dis pas de bêtise:

Tu peux faire ceci:

Code:
For x = 13 To 20
   Select Case x
   Case 13, 14, 15, 17, 20
      ActiveSheet.Shapes(x).Visible = False
   End Select
Next
 

dent_de_sabre

XLDnaute Nouveau
Re : Comment masquer plusieurs objets

Thank's skoobi,

Ca fonctionne parfaitement avec cette nouvelle formule !!!!!!!!! Merci beaucoup pour ton aide.
Le plus difficile maintenant c'est de repérer le numéro de chaque objet, mais franchement c'est top.

J'essayerai plus tard de comprendre la fonction "Name". Quand j'aurai progressé dans vba.

Encore merci et à bientot
 

Statistiques des forums

Discussions
312 754
Messages
2 091 685
Membres
105 048
dernier inscrit
Nicoeum