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 Sub

tu 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 Sub

tu 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 Sub

la 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 Sub

Dans 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 Sub

si tu as bien mis ça :

Public nomfichier, nomfichier2

alors 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").Text

Est-ce que la propriété Text renvoie bien une valeur? ou bien un vide? peut-être faut-t-il utiliser la propriété .Value ?

Rechercher des sujets similaires à "nom classeur variable"