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
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
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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
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
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" <dicanivet@wanadoo.fr> a écrit dans le message de
news:u9Q1aMh7FHA.4084@TK2MSFTNGP10.phx.gbl...
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
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
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
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
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
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
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
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
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
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" <nspfrdpst@9online.fr> a écrit dans le message de news:
%23UzIWUh7FHA.2676@TK2MSFTNGP15.phx.gbl...
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" <dicanivet@wanadoo.fr> a écrit dans le message de
news:u9Q1aMh7FHA.4084@TK2MSFTNGP10.phx.gbl...
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
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
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
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
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
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
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
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
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
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" <dicanivet@wanadoo.fr> a écrit dans le message de news: u9Q1aMh7FHA.4084@TK2MSFTNGP10.phx.gbl...
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
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
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
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
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
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
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.
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.
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.