XL 2013 Masquer un shape (forme) définit dans toutes les feuilles

CGU2022.

XLDnaute Junior
Bonjour, je vous souhaite un bon vendredi et agréable weekend à tous...

Mon problème du jour

j'ai une macro qui s'exécute et masque un shape (nomé Ok) dans une feuille après l'exécution d'une macro.

je souhaite que ce shape (forme qui sert de bouton) soit caché ou bien effacé de toutes les feuilles du classeur. car j'ai copié la feuille d'origine plusieurs fois.

Ci dessous le code qui me permet de masquer dans la feuille active.

VB:
ActiveSheet.Shapes.range(Array("Ok")).Visible = False

Avez vous une idée ?

Cdt. CGU2022.
 
Solution
Bonsoir CGU,
Sand fichier test, alors un peu au hasard :
VB:
Sub Masquer()
    For Each F In Worksheets
        If F.Name <> "Nom1" And F.Name <> "Nom2" Then  ' Mettre ici les feuilles à exclure
            On Error Resume Next
            Sheets(F.Name).Shapes.Range(Array("Ok")).Visible = False
        End If
    Next F
End Sub
On parcout toutes les feuilles à l'exception de celles listées dans le If F.Name<>....


Bonjour Merci Sylvanu
Ci joint le code que j'ai retenu, on peut bien sur l'optimiser.
Merci ...


VB:
Option Explicit

' Déprotéger toutes les feuilles de calcul
Sub DéprotégerToutesLesFeuilles()
    Dim fc As Worksheet

    For Each fc In Worksheets
        fc.Unprotect "123"
    Next fc

End Sub
' Protéger toutes...

patricktoulon

XLDnaute Barbatruc
bonjour
il te suffit avant de copier
de faire
Application.CopyObjectsWithCells = false
la copie n'aura pas les objects
et tu n'aura donc pas a aller chercher si la ou les shapes y sont dans la copie
VB:
Sub copierlafeuille()
    Dim NiewName$
    NewName = "toto"
    Application.CopyObjectsWithCells = False
     With Sheets("model")
        .Copy After:=Sheets(Sheets.Count)
        .Name = NewName
    End With
    Application.CopyObjectsWithCells = True
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir CGU,
Sand fichier test, alors un peu au hasard :
VB:
Sub Masquer()
    For Each F In Worksheets
        If F.Name <> "Nom1" And F.Name <> "Nom2" Then  ' Mettre ici les feuilles à exclure
            On Error Resume Next
            Sheets(F.Name).Shapes.Range(Array("Ok")).Visible = False
        End If
    Next F
End Sub
On parcout toutes les feuilles à l'exception de celles listées dans le If F.Name<>....
 

CGU2022.

XLDnaute Junior
bonjour
il te suffit avant de copier
de faire
Application.CopyObjectsWithCells = false
la copie n'aura pas les objects
et tu n'aura donc pas a aller chercher si la ou les shapes y sont dans la copie
VB:
Sub copierlafeuille()
    Dim NiewName$
    NewName = "toto"
    Application.CopyObjectsWithCells = False
     With Sheets("model")
        .Copy After:=Sheets(Sheets.Count)
        .Name = NewName
    End With
    Application.CopyObjectsWithCells = True
End Sub
Merci Patrick pour ta réponse (rapide).
Le principe de mon fichier est de faire plusieurs devis et différents fournisseurs et de lancer une macro qui efface les prix des autres fournisseurs (dans une base de données) non retenus afin de transmettre le fichier.
Mais je vais me servir plus tard de ton code 👍 c'est une bonne idée..
 

CGU2022.

XLDnaute Junior
Bonsoir CGU,
Sand fichier test, alors un peu au hasard :
VB:
Sub Masquer()
    For Each F In Worksheets
        If F.Name <> "Nom1" And F.Name <> "Nom2" Then  ' Mettre ici les feuilles à exclure
            On Error Resume Next
            Sheets(F.Name).Shapes.Range(Array("Ok")).Visible = False
        End If
    Next F
End Sub
On parcout toutes les feuilles à l'exception de celles listées dans le If F.Name<>....
Bonsoir sylvanu
Je vais essayer de mette un nom de feuille qui n'existe pas et je pense que cela effacera le shape "Ok" de tout le classeur
Si j'ai un autre fichier ouvert cela ne va pas les effacer également?

Je vais tester et poster ensuite le code entier: qui cache le bouton et efface la base de données des fournisseurs non retenus. cela servira surement à quelqu'un

Encore un grand Merci 👍
 

CGU2022.

XLDnaute Junior
Bonsoir sylvanu
Je vais essayer de mette un nom de feuille qui n'existe pas et je pense que cela effacera le shape "Ok" de tout le classeur
Si j'ai un autre fichier ouvert cela ne va pas les effacer également?

Je vais tester et poster ensuite le code entier: qui cache le bouton et efface la base de données des fournisseurs non retenus. cela servira surement à quelqu'un

Encore un grand Merci 👍
Cela bloque quand j'ai un Mdp (qui est le même sur toutes les feuilles).
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Faire une action simultanée sur toutes les feuilles ? Non, pas à ma connaissance.
Vous l'incluez dans la boucle existante . Par ex :
VB:
Sub Masquer()
    For Each F In Worksheets
        If F.Name <> "Nom1" And F.Name <> "Nom2" Then  ' Mettre ici les feuilles à exclure
            With Sheets(F.Name)
                .Unprotect "Pswrd"
                On Error Resume Next
                .Shapes.Range(Array("Ok")).Visible = False
                .Protect "Pswrd"
            End With
        End If
    Next F
End Sub
 

CGU2022.

XLDnaute Junior
Bonjour @CGU2022, Patrick et Sylvain



Code non testé car pas de fichier.... ;)

VB:
Sub SupprimeShape()
Dim Shp As Shape

For Each Shp In Worksheets
    If Shp.Name = "OK" Then Shp.Delete
Next Shp

End Sub

Merci de ton retour

@Phil69970
Merci Phil69970
je pense que je vais avoir le même problème que j'ai avec sylvanu
y a t il un code pour sélectionner toutes les feuilles (même mdp).
 

CGU2022.

XLDnaute Junior
Désole je me recentre et je m'aperçois que c'est compliquer d'exposer un problème sans support... en tout cas merci a tous pour vos précédentes réponses.


Ci dessous le code que j'utilisais et que souhaite modifier.
le bouton shape, form "Ok" disparait a la copie de la feuille est reste sur la première (feuille de départ)
Sub CopieFeuille()


Je souhaite que ce bouton soit copié sur toutes les feuilles ( c'est simple remplacer false par true).
Si c'est le cas, la validation du fournisseur (bouton OK) devra se faire de n'importe quelle feuille (aucun nom prédéfini) et disparaisse sur toutes les feuilles si la macro
Sub ValidationFournisseur() est activée....



Code:
Option Explicit

Sub ValidationFournisseur()
Application.ScreenUpdating = False                                                                                  'désactive le rafraîchissement de la fenêtre excel.

Worksheets("Prix Fournisseur").Unprotect "pswrd"                       'déprotege la feuille "Prix Fournisseur"

'If MsgBox("Valide Fournisseur: " & Chr(10) & Chr(10) & "Annule les prix des autres Fournisseur", , "      ATTENTION: Action Irréversible") Then '= vbYes

        Select Case [B1]   'en fonction de la sélection change les prix des autres fournisseurs.
          
                Case "Prix Fournisseur1": Feuil2.[H10:H20] = 1        'met "1" dans les plages selectionnées base de donnees les plages sont fictives
                Case "Prix Fournisseur2": Feuil2.[E16:E1375] = 1          'met "1" dans les plages selectionnées base de donnees les plages sont fictives
                Case "Prix Fournisseur3": Feuil2.[E16:E1375] = 1         'met "1" dans les plages selectionnées base de donnees les plages sont fictives
            
        End Select
      
        'End If
Worksheets("Prix Fournisseur").Protect "pswrd"                        'protege la feuille "Prix Fournisseur"
        ActiveSheet.Select
ActiveSheet.Unprotect "pswrd"
        ActiveSheet.range("A11").Select
        range("A11").Value = "Validé"
                                    'ActiveSheet.range("B1").Select    'selectionne B1 liste validation de données
                                    'range("B1").Locked = True    'verouille B1 liste validation de données



ActiveSheet.Shapes.range(Array("Ok")).Visible = False                  'Masque image "Ok" bouton qui declanche la macro

ActiveSheet.Protect "pswrd"


End Sub


ci dessous la macro qui copie une feuille
Code:
Option Explicit

Sub CopieFeuille()
Application.ScreenUpdating = False                                                      'désactive le rafraîchissement de la fenêtre excel.
    ActiveWorkbook.Unprotect Password:="pswrd"
   
           
            Dim s As String
            Dim i As Integer
              s = _
            InputBox("" & vbCrLf & "Nommer la nouvelle Feuille" & vbCrLf & vbCrLf & "Valide le Marché sélectionné" & vbCrLf & vbCrLf & "Fige les Prix" & vbCrLf & "", "Copie et Création d'une nouvelle Feuille!", "Feuil1")
           
            If s = "" Then Exit Sub
            ActiveSheet.Shapes.range(Array("Ok")).Visible = True          'garde affiché l'image dans la feuille de reference
              i = Sheets.Count
              On Error Resume Next
              ActiveSheet.Copy After:=Sheets(i)
              ActiveSheet.Name = s
              ActiveSheet.Shapes.range(Array("Ok")).Visible = False        'Masque image dans la feuille copiée
             
   
    ActiveWorkbook.Protect Password:="pswrd", Structure:=True, Windows:=False

End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 194
Messages
2 086 066
Membres
103 110
dernier inscrit
Privé