Nom du classeur = variable
Bonjour,
Je demande à l'utilisateur d'entrer un nom, et j'utilise ce nom pour enregistrer un nouveau classeur.
J'appelle ce nouveau classeur ensuite dans mon code pour de nombreuses opérations, mais apparemment il n'est pas reconnu.
J'appelle le nouveau classeur comme ceci :
Workbooks(nomfichier)car la procédure qui crée ce classeur, j'ai appelé la variable utiliser pour stocker le nom du classeur : nomfichier ( en realité nomfichier = inputbox & ".xls" )
Le code fonctionne au sein de cette procédure, exemple :
Workbooks(nomfichier).Activate
Sheets.Add.Name = "synthese"
Workbooks("classeur1").Worksheets("feuille1").Copy After:=Workbooks(nomfichier).Sheets(Workbooks(nomfichier).Sheets.Count)ce code fonctionne au sein de la procédure mais pas ailleurs, donc je me suis dit que la variable nomfichier est local au module, et ne peu pas être appeler dans d'autres modules.
J'ai donc declaré cette variable (nomfichier) en public, mais apparament rien ne change.
Workbooks(nomfichier)Lorsque ce code n'est pas dans ma procédure de création du classeur, ça me met une erreur "l'indice n'appartient pas à la selection".
Du coup mon problème c'est que j'aimerais utiliser le nouveau classeur ailleurs dans le code, mais je ne peux pas pour l'instant,
Merci de m'aider.
bonjour
si tu veux un code pour créer des nouveaux classeurs, c'est qu'il va s'en créer plusieurs chaque jour, tous pareils (au départ)
c'est une mauvaise idée
il vaut mieux créer maintenant un unique classeur dans lequel on va saisir des données sans fin, durant des années
ton avis ?
amitiés
Bonjour,
je suis d'accord pour l'idée de jmd, je propose quand même quelque chose pour la culture:
Public fichierVariable As Workbook
Sub test()
Set fichierVariable = Workbooks("monFichierVariable")
End Subtu enregistres le classeur dans un objet pour directement pouvoir l'appeler par la suite sans passer par Workbooks()
Bonjour,
je suis d'accord pour l'idée de jmd, je propose quand même quelque chose pour la culture:
Public fichierVariable As Workbook Sub test() Set fichierVariable = Workbooks("monFichierVariable") End Subtu enregistres le classeur dans un objet pour directement pouvoir l'appeler par la suite sans passer par Workbooks()
Mais le nom du classeur est une variable, "monFichierVariable" est un nom fixe vu qu'il est entre guillements.
Je pourrais utiliser ce code qu'une fois mon problème reglé,
En effet je viens de le tester, ça plante en me disant que l'indice n'appartient pas à la selection
Set fichierVariable = Workbooks(nomfichier)Dans ma situation, j'ai besoin de créer des classeur séparé,
Merci
Bonjour,
ton problème est étrange, ton fichier est ouvert mais Excel ne le retrouve pas? tu as essayé de faire appel au fichier sans l'extension .xls? ou encore d'affecter le classeur à fichier variable sur la procédure d'enregistrement?
Bonjour,
En analysant, je remarque que le variable nomfichier est vide au moment où j'appelle ce classeur excel de nom nomfichier.
Pourtant le classeur s'est bien crée, et il porte bien le nom nomfichier.
J'ai aussi crée une variable nomfichier2 = nomfichier sans l'extension, le problème ne change pas vu que ces variables sont toujours vide quand j'appelle workbooks(nomfichier)
Voici ma procèdure qui crée le classeur ( cette procédure est fonctionnelle, elle crée le nouveau classeur et l'enregistre bien sous le bon nom, sous le bon dossier, et avec les bon onglets )
Sub Nom_fichier()
Dim extension As String
Dim Chemin As String
Workbooks("CLASSEUR1").Activate
' Définir un nom de fichier
Worksheets("Calcul").Select
Worksheets("Calcul").Range("N2").Value = InputBox("Quel est le nom donné à ton fichier ?", "FICHIER", "")
' Enregistrer un nouveau fichier avec ses macros au format .xls
extension = ".xls"
Chemin = "C:\MesGammes\"
nomfichier = Worksheets("Calcul").Range("N2").Text & extension
nomfichier2 = Worksheets("Calcul").Range("N2").Text
Workbooks.Add
With ActiveWorkbook
.SaveAs Filename:=Chemin & nomfichier, CreateBackup:=False
End With
Workbooks(nomfichier).Activate
Sheets.Add.Name = "synthese"
Workbooks("CLASSEUR1").Worksheets("Critères").Copy After:=Workbooks(nomfichier).Sheets(Workbooks(nomfichier).Sheets.Count)
End Subla où ça ne fonctionne plus c'est lorsque j'appelle workbooks(nomfichier) dans d'autre modules
Exemple :
Sub copygamme()
wksclc.Range("a1:d29").Select
Selection.Copy
End Sub
Sub collEt()
Workbooks(nomfichier).Worksheets("synthese").Range("a1:d29").PasteSpecial Paste:=xlValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End SubDans ma situation, j'ai besoin de créer des classeur séparé,
Merci
re
je travaille dans plusieurs entreprises, j'impose de travailler sur des classeurs fixes (s'il le faut, par exemple, chaque commercial a le sien propre, mais ce classeur ne se dédouble jamais)
pourquoi as-tu besoin de créer des classeurs à tour de bras ?
amitiés
Bonjour,
donc ta variable est vide au moment de l'appel de la procédure... Pourtant si tu déclares ta variable en Public elle devrait garder sa valeur... comme dans l'exemple:
Public nom
Sub test()
nom = "coucou"
End Sub
Sub afficher()
MsgBox nom
End Subsi tu as bien mis ça :
Public nomfichier, nomfichier2alors je ne vois plus qu'un problème possible concernant la valeur, son attribution, donc sur les lignes:
nomfichier = Worksheets("Calcul").Range("N2").Text & extension
nomfichier2 = Worksheets("Calcul").Range("N2").TextEst-ce que la propriété Text renvoie bien une valeur? ou bien un vide? peut-être faut-t-il utiliser la propriété .Value ?