OVH Cloud OVH Cloud

Renommer une feuille liée à une macro

4 réponses
Avatar
dicanivet
Bonsoir à Tous

J'ai un probleme avec le fonctionnement d'une macro qui fait appel
à une feuille qui est renommée par l'utilisateur.

Le classeur comporte 15 feuilles nommées FME à FME14 et une feuille
masquée nommée FIM qui est un masque.

L'utilisateur doit renseigner la feuille FME et ensuite avec un bouton à
bascule
lancer une copie de la FIM sur laquelle une partie des infos de la FME sera
mentionnée et ensuite enregistrée dans un nouveau classeur.
Pour des raisons de commodité l'utilisateur me renomme les feuilles FME et
donc
la macro ne trouve plus la feuille Worsheets("FME").
"Erreur d'execution 9"
"L'indice n'appartient pas à la selection."

Merci d'avance de votre aide.

Tres cordialement.
Didier.

Je vous joins mon code.

Private Sub tb_ValidationFim1_Change() ' Code dans la feuille FME pour
le bouton à bascule
If tb_ValidationFim1.Value = True Then
Range("D6").Interior.ColorIndex = 8
msg = "Voulez-vous créer la F.I.M ?"
Style = vbYesNo + vbDefaultButton1
Title = "Creation de la F.I.M"
Réponse = MsgBox(msg, Style, Title)
If Réponse = vbYes Then
ValidationFim1
Else
tb_ValidationFim1.Value = False
Range("D6").Interior.ColorIndex = none
End If
End If
End Sub
-------------------------------------------------------------------------------------------
Sub ValidationFim1() ' Macro pour copier le masque FIM et l'enregistrer
dans un nouveau classeur

ActiveWorkbook.Worksheets("FIM").Copy After:=Sheets(Sheets.Count)

If Worksheets("FME").Range("D6").Value = "" Then
Do
Nom = InputBox("Entrez un nom pour la nouvelle FIM")
If Nom = "" Then Exit Sub
On Error Resume Next
Set sht = Sheets(Nom)
If Err <> 0 Then
ActiveSheet.Name = Nom
Err.Clear: Exit Do
Else
MsgBox "Une feuille de ce nom existe déjà !"
End If
Loop
Else
ActiveSheet.Name = Worksheets("FME").Range("D6").Value
End If

Worksheets("FME").Range("A8:G24").CopyPicture xlScreen, xlBitmap
Worksheets("FME").Paste _
Destination:=ActiveSheet.Range("B7:J20")

ActiveSheet.Range("E1").Value = Worksheets("FME").Range("D1").Value
ActiveSheet.Range("C2").Value = Worksheets("FME").Range("D2").Value
ActiveSheet.Range("C3").Value = Worksheets("FME").Range("D3").Value
ActiveSheet.Range("E22").Value = Worksheets("FME").Range("D6").Value
ActiveSheet.Range("H22").Value = Worksheets("FME").Range("L9").Value
ActiveSheet.Range("G2").Value = Worksheets("FME").Range("A27").Value

ActiveSheet.Visible = True
ActiveSheet.Move
Réponse = MsgBox("Voulez-vous enregistrer ce classeur ?", vbYesNo)
If Réponse = vbYes Then
Application.Dialogs(xlDialogSaveAs).Show
ActiveWorkbook.Close SaveChanges:=False
End If
End Sub

4 réponses

Avatar
Frédo P
Il faut aller voir dans la macro, cliquer sur l'icône "jumelle" rechercher
l'ancienne dénomination de feuille et remplacer par la nouvelle, ne pas
oublier de cocher l'option a)module en cours ou b)procédure en cours ou c)
projet en cours.

--
Fred


"dicanivet" a écrit dans le message de
news:
Bonsoir à Tous

J'ai un probleme avec le fonctionnement d'une macro qui fait appel
à une feuille qui est renommée par l'utilisateur.

Le classeur comporte 15 feuilles nommées FME à FME14 et une feuille
masquée nommée FIM qui est un masque.

L'utilisateur doit renseigner la feuille FME et ensuite avec un bouton à
bascule
lancer une copie de la FIM sur laquelle une partie des infos de la FME
sera

mentionnée et ensuite enregistrée dans un nouveau classeur.
Pour des raisons de commodité l'utilisateur me renomme les feuilles FME et
donc
la macro ne trouve plus la feuille Worsheets("FME").
"Erreur d'execution 9"
"L'indice n'appartient pas à la selection."

Merci d'avance de votre aide.

Tres cordialement.
Didier.

Je vous joins mon code.

Private Sub tb_ValidationFim1_Change() ' Code dans la feuille FME pour
le bouton à bascule
If tb_ValidationFim1.Value = True Then
Range("D6").Interior.ColorIndex = 8
msg = "Voulez-vous créer la F.I.M ?"
Style = vbYesNo + vbDefaultButton1
Title = "Creation de la F.I.M"
Réponse = MsgBox(msg, Style, Title)
If Réponse = vbYes Then
ValidationFim1
Else
tb_ValidationFim1.Value = False
Range("D6").Interior.ColorIndex = none
End If
End If
End Sub
--------------------------------------------------------------------------
-----------------

Sub ValidationFim1() ' Macro pour copier le masque FIM et l'enregistrer
dans un nouveau classeur

ActiveWorkbook.Worksheets("FIM").Copy After:=Sheets(Sheets.Count)

If Worksheets("FME").Range("D6").Value = "" Then
Do
Nom = InputBox("Entrez un nom pour la nouvelle FIM")
If Nom = "" Then Exit Sub
On Error Resume Next
Set sht = Sheets(Nom)
If Err <> 0 Then
ActiveSheet.Name = Nom
Err.Clear: Exit Do
Else
MsgBox "Une feuille de ce nom existe déjà !"
End If
Loop
Else
ActiveSheet.Name = Worksheets("FME").Range("D6").Value
End If

Worksheets("FME").Range("A8:G24").CopyPicture xlScreen, xlBitmap
Worksheets("FME").Paste _
Destination:¬tiveSheet.Range("B7:J20")

ActiveSheet.Range("E1").Value = Worksheets("FME").Range("D1").Value
ActiveSheet.Range("C2").Value = Worksheets("FME").Range("D2").Value
ActiveSheet.Range("C3").Value = Worksheets("FME").Range("D3").Value
ActiveSheet.Range("E22").Value = Worksheets("FME").Range("D6").Value
ActiveSheet.Range("H22").Value = Worksheets("FME").Range("L9").Value
ActiveSheet.Range("G2").Value = Worksheets("FME").Range("A27").Value

ActiveSheet.Visible = True
ActiveSheet.Move
Réponse = MsgBox("Voulez-vous enregistrer ce classeur ?", vbYesNo)
If Réponse = vbYes Then
Application.Dialogs(xlDialogSaveAs).Show
ActiveWorkbook.Close SaveChanges:úlse
End If
End Sub







Avatar
Didier
Bonsoir Fred

Merci pour ton aide, effectivement apres le remplacement dans la macro
tout fonctionne correctement, mais les utilisateurs ne seront pas en mesure
de faire cette modification.
Je cherche une solution avec laquelle; si un utilisateur renomme une FME la
macro continue de fonctionner correctement.
Je dois donc modifier le code peut-être même le mode de fonctionnement
de mon classeur mais je ne sais pas par ou commencer.

Tres cordialement.
Didier.

"Frédo P" a écrit dans le message de news:
%
Il faut aller voir dans la macro, cliquer sur l'icône "jumelle" rechercher
l'ancienne dénomination de feuille et remplacer par la nouvelle, ne pas
oublier de cocher l'option a)module en cours ou b)procédure en cours ou c)
projet en cours.

--
Fred


"dicanivet" a écrit dans le message de
news:
Bonsoir à Tous

J'ai un probleme avec le fonctionnement d'une macro qui fait appel
à une feuille qui est renommée par l'utilisateur.

Le classeur comporte 15 feuilles nommées FME à FME14 et une feuille
masquée nommée FIM qui est un masque.

L'utilisateur doit renseigner la feuille FME et ensuite avec un bouton à
bascule
lancer une copie de la FIM sur laquelle une partie des infos de la FME
sera

mentionnée et ensuite enregistrée dans un nouveau classeur.
Pour des raisons de commodité l'utilisateur me renomme les feuilles FME
et
donc
la macro ne trouve plus la feuille Worsheets("FME").
"Erreur d'execution 9"
"L'indice n'appartient pas à la selection."

Merci d'avance de votre aide.

Tres cordialement.
Didier.

Je vous joins mon code.

Private Sub tb_ValidationFim1_Change() ' Code dans la feuille FME
pour
le bouton à bascule
If tb_ValidationFim1.Value = True Then
Range("D6").Interior.ColorIndex = 8
msg = "Voulez-vous créer la F.I.M ?"
Style = vbYesNo + vbDefaultButton1
Title = "Creation de la F.I.M"
Réponse = MsgBox(msg, Style, Title)
If Réponse = vbYes Then
ValidationFim1
Else
tb_ValidationFim1.Value = False
Range("D6").Interior.ColorIndex = none
End If
End If
End Sub
--------------------------------------------------------------------------
-----------------

Sub ValidationFim1() ' Macro pour copier le masque FIM et
l'enregistrer
dans un nouveau classeur

ActiveWorkbook.Worksheets("FIM").Copy After:=Sheets(Sheets.Count)

If Worksheets("FME").Range("D6").Value = "" Then
Do
Nom = InputBox("Entrez un nom pour la nouvelle FIM")
If Nom = "" Then Exit Sub
On Error Resume Next
Set sht = Sheets(Nom)
If Err <> 0 Then
ActiveSheet.Name = Nom
Err.Clear: Exit Do
Else
MsgBox "Une feuille de ce nom existe déjà !"
End If
Loop
Else
ActiveSheet.Name = Worksheets("FME").Range("D6").Value
End If

Worksheets("FME").Range("A8:G24").CopyPicture xlScreen, xlBitmap
Worksheets("FME").Paste _
Destination:¬tiveSheet.Range("B7:J20")

ActiveSheet.Range("E1").Value = Worksheets("FME").Range("D1").Value
ActiveSheet.Range("C2").Value = Worksheets("FME").Range("D2").Value
ActiveSheet.Range("C3").Value = Worksheets("FME").Range("D3").Value
ActiveSheet.Range("E22").Value = Worksheets("FME").Range("D6").Value
ActiveSheet.Range("H22").Value = Worksheets("FME").Range("L9").Value
ActiveSheet.Range("G2").Value = Worksheets("FME").Range("A27").Value

ActiveSheet.Visible = True
ActiveSheet.Move
Réponse = MsgBox("Voulez-vous enregistrer ce classeur ?", vbYesNo)
If Réponse = vbYes Then
Application.Dialogs(xlDialogSaveAs).Show
ActiveWorkbook.Close SaveChanges:úlse
End If
End Sub











Avatar
michdenis
Bonjour Dicanivet,

Dans le code d'une procédure, on peut utiliser l'objet "Worksheet" de deux manières différentes.

A) Utiliser le nom de l'onglet de la feuille, de cette manìère on obtient du code de ce genre
worksheets("NomDeLongletDeLaFeuille").range(.....)...

B ) Tu peux aussi utiliser directement le nom de l'objet Worksheet. Pour le connaitre, dans la
fenêtre de l'éditeur de code, dans la section de gauche de la fenêtre, sous la sélection de
ton projet, les feuilles sont référencées de cette manière :
Feuil1(Feuil1)
Feuil1 = Propriété Name de l'objet en vba
(Feuil1) = Nom de l'onglet de la feuille de calcul.

En conséquence, au lieu d'écrire ceci
worksheets("Feuil1").range(.....)...

Tu remplaces par ceci :
Feuil1.Range(".......")....
Feuil1 étant le nom de l'objet Worksheet.

P.S. Ton code va être plus performant et plus rapide... Tu as quelque chose contre ça ? Et le fait que l'usager renomme la feuille
(nom de l'onglet) n'affectera plus le fonctionnement de ton code !


Salutations!



"dicanivet" a écrit dans le message de news:
Bonsoir à Tous

J'ai un probleme avec le fonctionnement d'une macro qui fait appel
à une feuille qui est renommée par l'utilisateur.

Le classeur comporte 15 feuilles nommées FME à FME14 et une feuille
masquée nommée FIM qui est un masque.

L'utilisateur doit renseigner la feuille FME et ensuite avec un bouton à
bascule
lancer une copie de la FIM sur laquelle une partie des infos de la FME sera
mentionnée et ensuite enregistrée dans un nouveau classeur.
Pour des raisons de commodité l'utilisateur me renomme les feuilles FME et
donc
la macro ne trouve plus la feuille Worsheets("FME").
"Erreur d'execution 9"
"L'indice n'appartient pas à la selection."

Merci d'avance de votre aide.

Tres cordialement.
Didier.

Je vous joins mon code.

Private Sub tb_ValidationFim1_Change() ' Code dans la feuille FME pour
le bouton à bascule
If tb_ValidationFim1.Value = True Then
Range("D6").Interior.ColorIndex = 8
msg = "Voulez-vous créer la F.I.M ?"
Style = vbYesNo + vbDefaultButton1
Title = "Creation de la F.I.M"
Réponse = MsgBox(msg, Style, Title)
If Réponse = vbYes Then
ValidationFim1
Else
tb_ValidationFim1.Value = False
Range("D6").Interior.ColorIndex = none
End If
End If
End Sub
-------------------------------------------------------------------------------------------
Sub ValidationFim1() ' Macro pour copier le masque FIM et l'enregistrer
dans un nouveau classeur

ActiveWorkbook.Worksheets("FIM").Copy After:=Sheets(Sheets.Count)

If Worksheets("FME").Range("D6").Value = "" Then
Do
Nom = InputBox("Entrez un nom pour la nouvelle FIM")
If Nom = "" Then Exit Sub
On Error Resume Next
Set sht = Sheets(Nom)
If Err <> 0 Then
ActiveSheet.Name = Nom
Err.Clear: Exit Do
Else
MsgBox "Une feuille de ce nom existe déjà !"
End If
Loop
Else
ActiveSheet.Name = Worksheets("FME").Range("D6").Value
End If

Worksheets("FME").Range("A8:G24").CopyPicture xlScreen, xlBitmap
Worksheets("FME").Paste _
Destination:¬tiveSheet.Range("B7:J20")

ActiveSheet.Range("E1").Value = Worksheets("FME").Range("D1").Value
ActiveSheet.Range("C2").Value = Worksheets("FME").Range("D2").Value
ActiveSheet.Range("C3").Value = Worksheets("FME").Range("D3").Value
ActiveSheet.Range("E22").Value = Worksheets("FME").Range("D6").Value
ActiveSheet.Range("H22").Value = Worksheets("FME").Range("L9").Value
ActiveSheet.Range("G2").Value = Worksheets("FME").Range("A27").Value

ActiveSheet.Visible = True
ActiveSheet.Move
Réponse = MsgBox("Voulez-vous enregistrer ce classeur ?", vbYesNo)
If Réponse = vbYes Then
Application.Dialogs(xlDialogSaveAs).Show
ActiveWorkbook.Close SaveChanges:úlse
End If
End Sub
Avatar
Frédo P
B ) Tu peux aussi utiliser directement le nom de l'objet Worksheet. Pour
le connaitre, dans la

fenêtre de l'éditeur de code, dans la section de gauche de la
fenêtre, sous la sélection de

ton projet, les feuilles sont référencées de cette manière :
Feuil1(Feuil1)
Feuil1 = Propriété Name de l'objet en vba
(Feuil1) = Nom de l'onglet de la feuille de calcul.

En conséquence, au lieu d'écrire ceci
worksheets("Feuil1").range(.....)...

Tu remplaces par ceci :
Feuil1.Range(".......")....
Feuil1 étant le nom de l'objet Worksheet.

P.S. Ton code va être plus performant et plus rapide... Tu as quelque
chose contre ça ? Et le fait que l'usager renomme la feuille

Merci Denis pour ce point qui ne m'était pas inconu mais jugé peu fiable
pour moi, vu que je ne l'employais pas correctement.