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.
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...
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
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
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..
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
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
Re,
Si vos feuilles sont protégées, évidemment ça bloque.
Il vous faut déprotéger, faire l'action et reprotéger juste après. Avec Protect et Unprotect.
Re,
Si vos feuilles sont protégées, évidemment ça bloque.
Il vous faut déprotéger, faire l'action et reprotéger juste après. Avec Protect et Unprotect.
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
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