IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Nom d'un classeur = inputbox (une variable ) [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 35
    Par défaut Nom d'un classeur = inputbox (une 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. (ERREUR, l'indice n'appartient pas à la selection en soulignant la ligne suivante )
    Pourtant au sein de la procédure qui crée ce classeur, ce code fonctionne, voici un exemple fonctionnel qui reprend ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Workbooks(nomfichier).Activate
    Sheets.Add.Name = "synthese"
    Workbooks("classeur1").Worksheets("feuille1").Copy After:=Workbooks(nomfichier).Sheets(Workbooks(nomfichier).Sheets.Count)
    NOTES :
    Premièrement nomfichier était declarer avec dim, au sein de la procédure de creation de classeur, je l'ai donc declarer en public dans un autre module pour pouvoir l'utiliser partout.
    Malheureusement ça ne fonctionne pas.


    Merci de m'aider

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour.

    Cela peut venir de différent endroits.

    1. L'utilisateur a tapé en plus du nom le chemin d'accès.
      Un truc du genre : X:\UnChemin\UnFichier.xlsx.
    2. Le fichier n'est pas ouvert par cette instance de Excel à ce moment.
      Pour avoir la liste des fichiers ouverts dans une instance donnée, tu peux mettre le code suivant avant ton appel :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      dim wb as workbook
       
      for each wb inn application.workbooks
          debug.print wb.name
      next wb
    3. Le fichier est bien ouvert mais Excel pense qu'il a un autre nom.
      Il m'est arrivé que Excel ne garde que le nom sans l'extension.
      Ex : MonFichier au lieu de MonFichier.xlsx.
      Voir le point 2 pour obtenir la liste des noms.


    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 579
    Par défaut
    Bonsoir,
    Ce que tu dis est incompréhensible, de plus le code est sorti de son contexte on ne voit pas la création du classeur la récupération du input.

    Le module c'est un module standard que tu as créé ?
    Banni de ton vocabulaires les sélect , sélection et autres activate mais utilises des variables objet comme WB!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dim   fichier as string, WB as workbook
    fichier="c:\MyRep\MyFicher.xlsx"
    Set WB=Worbooks.add
    WB.saveas fichier
    Set Sht=WB.sheets.add
    Sht.name="toto"

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 35
    Par défaut
    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)

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 35
    Par défaut
    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 )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    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 :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    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
    la procédure collEt renvoie une erreur, l'indice n'appartient pas à la selection

  6. #6
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 579
    Par défaut
    Citation Envoyé par Gioge Voir le message
    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)
    ou as tu créé cette variable?

    Nom : Sans titre.png
Affichages : 413
Taille : 7,9 Ko

    au regard de ta réponse je me demande si tu as lu nos postes!

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 35
    Par défaut
    Tu peux eviter d'être agressif s'il te plait

    Au debut la variable était crée dans sub nom fichier : dim nomfichier as string
    Mais j'ai cru que cette variable serrait disponible que localement, donc je l'ai declaré maintenant dans un autre module en public ! ( public nomfichier as string )

  8. #8
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 579
    Par défaut
    je ne suis pas agressif, mais si c'est ce que tu ressent désolé!

    Code Module1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Sub Main()
    Dim wb As Workbook
    Set wb = Nom_fichier
    copygamme Workbooks("CLASSEUR1").Worksheets("Calcul")
    collEt wb.Sheets("synthese")
    wb.Close False
    End Sub
    Function Nom_fichier() As Workbook
        Dim extension As String, Chemin As String
        extension = ".xls"
        Chemin = "C:\MyRep\"
        With Workbooks("CLASSEUR1")
            With .Worksheets("Calcul")
                .Range("N2").Value = InputBox("Quel est le nom donné à ton fichier ?", "FICHIER", "")
                Set Nom_fichier = Workbooks.Add
                Nom_fichier.SaveAs Chemin & .Range("N2").Text, FileFormat:=xlExcel8
                Nom_fichier.Sheets.Add.Name = "synthese"
            End With
            .Worksheets("Critères").Copy After:=Nom_fichier.Sheets(Nom_fichier.Sheets.Count)
        End With
        Nom_fichier.Save
    End Function
    Sub copygamme(ByRef wksclc As Worksheet)
        wksclc.Range("a1:d29").Copy
    End Sub
     
    Sub collEt(ByRef synthese As Worksheet)
            synthese.Range("a1:d29").PasteSpecial Paste:=xlValues, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
    End Sub
    Nom : Sans titre.png
Affichages : 376
Taille : 53,9 Ko

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 35
    Par défaut
    Merci de la réponse,

    Petite question, car pas encore tout fait fonctionnelle, comment je fais pour appeler le nouveau classeur crée (wb) dans d'autres modules, car comme tu l'as mis dans sub main, c'est local.
    Et je ne peux pas reecrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim wb As Workbook
    Set wb = Nom_fichier
    car ça me relance la fonction avec l'inputbox...
    Merci

  10. #10
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 579
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Public wb As Workbook
    Sub Main()
    Set wb = Nom_fichier
    copygamme Workbooks("CLASSEUR1").Worksheets("Calcul")
    collEt wb.Sheets("synthese")
    wb.Close False
    End Sub
    Function Nom_fichier() As Workbook
        Dim extension As String, Chemin As String
        extension = ".xls"
        Chemin = "C:\MyRep\"
        With Workbooks("CLASSEUR1")
            With .Worksheets("Calcul")
                .Range("N2").Value = InputBox("Quel est le nom donné à ton fichier ?", "FICHIER", "")
                Set Nom_fichier = Workbooks.Add
                Nom_fichier.SaveAs Chemin & .Range("N2").Text, FileFormat:=xlExcel8
                Nom_fichier.Sheets.Add.Name = "synthese"
            End With
            .Worksheets("Critères").Copy After:=Nom_fichier.Sheets(Nom_fichier.Sheets.Count)
        End With
        Nom_fichier.Save
    End Function
    Sub copygamme(ByRef wksclc As Worksheet)
        wksclc.Range("a1:d29").Copy
    End Sub
     
    Sub collEt(ByRef synthese As Worksheet)
            synthese.Range("a1:d29").PasteSpecial Paste:=xlValues, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
    End Sub

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 35
    Par défaut
    Tu as juste changer wb en public ? si oui, j'ai pensé et essayer la même chose, mais j'ai une erreur d'execution/ erreur automation et ça me souligne la première ligne de ma procédure dans un autre module :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sub moindetour2()
        If wb.Worksheets("synthese").Range("d23").Value > wb.Worksheets("Critères").Range("e4") And wb.Worksheets("synthese").Range("d26").Value > wb.Worksheets("Critères").Range("e8") Then

    Merci

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 35
    Par défaut
    C'est bon normalement, j'ai enlevé les ( dont je sais pas ils servent à quoi )

  13. #13
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 579
    Par défaut
    Nom : Test.gif
Affichages : 338
Taille : 987,5 Ko

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Nom de feuille à partir d'une variable
    Par Iokanaan dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/09/2008, 16h44
  2. Problème nom de fichier généré avec une variable
    Par matlabeginer dans le forum MATLAB
    Réponses: 3
    Dernier message: 09/04/2008, 12h03
  3. Réponses: 0
    Dernier message: 05/02/2008, 15h41
  4. récupérer un nom de bouton radio ds une variable
    Par dmalik dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/06/2007, 17h22
  5. Remplacer nom d'un forulaire par une variable
    Par kevain_09 dans le forum VBA Access
    Réponses: 2
    Dernier message: 19/06/2007, 14h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo