A voir également:
- [VBA] Interdire changer nom feuille excel
- [VBA] Interdire changer nom feuille excel ✓ - Forum - VB / VBA
- VBA : garder même macro en changeant nom feuille ✓ - Forum - Excel
- Changer nom colonne excel ✓ - Forum - Excel
- Code vba pour enregistrer une feuille excel en pdf ✓ - Forum - Excel
- Récupérer nom feuille excel ✓ - Forum - Excel
7 réponses
Info
Bonsoir,
Dans votre code VBA, plutôt que d'utiliser la propriété [ Name ],
utiliser la propriété [ CodeName ].
Ainsi même si le nom de la feuille est modifier par l'utilisateur,
le [ CodeName ] reste inchangé.
Vous pouvez ainsi toujours trouver la bonne feuille.
Exemple Type :
Lancer cette procédure, changer le nom d'une feuille et relancer
la procédure.
Pour la suppression, je n'ai pas encore d'idée.
Une bonne nuit de sommeil pourra peut-être m'inspirer :-)
Cdt
Info
Dans votre code VBA, plutôt que d'utiliser la propriété [ Name ],
utiliser la propriété [ CodeName ].
Ainsi même si le nom de la feuille est modifier par l'utilisateur,
le [ CodeName ] reste inchangé.
Vous pouvez ainsi toujours trouver la bonne feuille.
Exemple Type :
Sub Recherche() Dim ws As Worksheet Dim strTexte As String For Each ws In Worksheets strTexte = strTexte & ws.Name & vbLf strTexte = strTexte & ws.CodeName & vbLf strTexte = strTexte & ws.Index & vbLf & vbLf Next ws MsgBox strTexte End Sub '
Lancer cette procédure, changer le nom d'une feuille et relancer
la procédure.
Pour la suppression, je n'ai pas encore d'idée.
Une bonne nuit de sommeil pourra peut-être m'inspirer :-)
Cdt
Info
PPA
Je vais essayer d'étayer ma requête.
J'ai plusieurs macro ajoutant des feuilles dans mon classeur.
Ces macros dépendent de données qui sont présentes dans 4 autres feuilles du classeur.
1- Si le nom d'une de ces 4 feuille change, la macro ne pourra s'éxécuter car elle ne trouvera pas la feuille.
2- Si une de ces 4 feuille est supprimée, la macro ne pourra s'éxécuter car elle ne trouvera pas la feuille.
1- La réponse serait surement dans les index. Comment la propriété index d'une feuille fonctionne ? En changeant une feuille de place, l'index de cette feuille ne va-t-il pas changer ?
2- Comment empécher la suppression de ces 4 feuilles ?
De plus, toutes modifications, suppressions sur les autres feuilles nouvellement créées (autre que les 4 indispensables) par les macros devra être possible.
Cordialement,
PPA
J'ai plusieurs macro ajoutant des feuilles dans mon classeur.
Ces macros dépendent de données qui sont présentes dans 4 autres feuilles du classeur.
1- Si le nom d'une de ces 4 feuille change, la macro ne pourra s'éxécuter car elle ne trouvera pas la feuille.
2- Si une de ces 4 feuille est supprimée, la macro ne pourra s'éxécuter car elle ne trouvera pas la feuille.
1- La réponse serait surement dans les index. Comment la propriété index d'une feuille fonctionne ? En changeant une feuille de place, l'index de cette feuille ne va-t-il pas changer ?
2- Comment empécher la suppression de ces 4 feuilles ?
De plus, toutes modifications, suppressions sur les autres feuilles nouvellement créées (autre que les 4 indispensables) par les macros devra être possible.
Cordialement,
PPA
Iama
- Messages postés
- 319
- Date d'inscription
- mercredi 13 janvier 2010
- Statut
- Membre
- Dernière intervention
- 27 mars 2020
Bonsoir
Dommage, je le suivai de loin pour connaitre les solution ou les infos
cordialement
Iama
Dommage, je le suivai de loin pour connaitre les solution ou les infos
cordialement
Iama
Info
re:
Une partie de la solution pour la suppression :
Placer ce code derrière chaque feuille qui ne doit pas être supprimer.
Ces procédures "active/désactive" l'option
du menu principal [ Supprimer une feuille ].
Reste a trouver l'option de suppression quand on clic/droit
sur le nom de la feuille dans le menu contextuel.
Cdt
Info
Une partie de la solution pour la suppression :
Placer ce code derrière chaque feuille qui ne doit pas être supprimer.
Option Explicit Private Sub Worksheet_Activate() Dim OptionMenu As Object Dim ctrlMenu As Object Dim MenuItem As Object Set OptionMenu = CommandBars(1).Controls Set ctrlMenu = OptionMenu("Edition") For Each MenuItem In ctrlMenu.Controls If (MenuItem.ID = 847) Then MenuItem.Enabled = False Exit For End If Next MenuItem End Sub ' Private Sub Worksheet_Deactivate() Dim OptionMenu As Object Dim ctrlMenu As Object Dim MenuItem As Object Set OptionMenu = CommandBars(1).Controls Set ctrlMenu = OptionMenu("Edition") For Each MenuItem In ctrlMenu.Controls If (MenuItem.ID = 847) Then MenuItem.Enabled = True Exit For End If Next MenuItem End Sub '
Ces procédures "active/désactive" l'option
du menu principal [ Supprimer une feuille ].
Reste a trouver l'option de suppression quand on clic/droit
sur le nom de la feuille dans le menu contextuel.
Cdt
Info
PPA
C'est bon j'ai trouvé.
A METTRE DANS THISWORKBOOK
Private Sub Workbook_Open()
call ActionSuppression
End Sub
A METTRE DANS UN MODULE
Sub ActionSuppression()
Dim c As CommandBarControl
For Each c In Application.CommandBars.FindControls(ID:=847)
c.OnAction = "Suppression"
Next c
End Sub
Sub Suppression()
'UNE CONDITION
MsgBox "Vous ne pouvez pas supprimer cette feuille", vbOKOnly, "INFORMATION"
'Affiche un message au lieu de supprimer
'AUTRE CONDITION
ActiveSheet.Delete 'supprime si possible
End Sub
Cordialement,
PPA
Lien https://support.microsoft.com/en-us pour connaitre la liste des ID de microsoft sur les controles.
A METTRE DANS THISWORKBOOK
Private Sub Workbook_Open()
call ActionSuppression
End Sub
A METTRE DANS UN MODULE
Sub ActionSuppression()
Dim c As CommandBarControl
For Each c In Application.CommandBars.FindControls(ID:=847)
c.OnAction = "Suppression"
Next c
End Sub
Sub Suppression()
'UNE CONDITION
MsgBox "Vous ne pouvez pas supprimer cette feuille", vbOKOnly, "INFORMATION"
'Affiche un message au lieu de supprimer
'AUTRE CONDITION
ActiveSheet.Delete 'supprime si possible
End Sub
Cordialement,
PPA
Lien https://support.microsoft.com/en-us pour connaitre la liste des ID de microsoft sur les controles.
Info
re:
J'ai été trop vite dans la réécriture de la procédure !
Désolé.
Cdt
Info
J'ai été trop vite dans la réécriture de la procédure !
Désolé.
Sub Suppression() Dim ws As Worksheet For Each ws In Worksheets 'UNE CONDITION If ((ws.CodeName <> "Feuil1") And (ws.CodeName <> "Feuil3")) Then ActiveSheet.Delete Exit For Else 'Affiche un message au lieu de supprimer MsgBox "Vous ne pouvez pas supprimer cette feuille", vbOKOnly, "INFORMATION" Exit For End If Next ws End Sub '
Cdt
Info
Info
re :
J'ai testé votre code et il ne fonctionne pas en Excel2003.
j'ai du transformé la procédure de supression ainsi :
Cdt
Info
J'ai testé votre code et il ne fonctionne pas en Excel2003.
j'ai du transformé la procédure de supression ainsi :
Sub Suppression() Dim ws As Worksheet 'UNE CONDITION MsgBox "Vous ne pouvez pas supprimer cette feuille", vbOKOnly, "INFORMATION" 'Affiche un message au lieu de supprimer For Each ws In Worksheets If ((ws.CodeName <> "Feuil1") And (ws.CodeName <> "Feuil3")) Then ActiveSheet.Delete End If Next ws End Sub '
Cdt
Info