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 :

Macro création de classeurs multiples nommés [XL-2010]


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
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Par défaut Macro création de classeurs multiples nommés
    Bonjour à tous!

    J'ai un fichier contenant une liste de noms en colonne C et sur chaque ligne le nom est suivi de caractéristiques. Je veux créer une maccro qui pour chaque ligne va créer un nouveau classeur et entrer les caractéristiques dans ce classeur.
    La partie "copie des données d'un classeur à un autre" j'ai trouvé beaucoup d'infos dessus alors je pourrai peut-être m'en sortir. Mon problème actuellement c'est que je n'arrive pas à créer ces classeurs nommés.

    Mon code ressemble à ça:
    Code "vb : 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
     
    Sub creationCRApapier()
     
    Dim NoLign1 As Integer
    Dim NewBook As Workbook
     
     
    For NoLign1 = 8 To 48
        If Cells(NoLign1, 3).Value <> 0 Then
          Set NewBook = Workbooks.Add 'creation
          NewBook.SaveAs "C:\chemin\cells(nolign1,3).value.xlsm"
        End If
    Next
     
     
    End Sub

    Le problème c'est que évidemment cells(nolign1,3).value ne renvoie pas la valeur de la cellule ici, il essaie d'enregistrer un classeur qui s'appelle comme ça. J'ai essayé aussi d'écrire: NewBook.SaveAs "C:\chemin\"&cells(nolign1,3).value&".xlsm" mais sans succés

    Je ne sais pas s'il est possible d'enregistrer plusieurs classeurs successifs en fonction de la valeur d'une cellule, mais c'est ce que j'essaie de faire

    Merci d'avance!

  2. #2
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, à tester
    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
    31
    32
    33
    34
    35
    36
    37
    Option Explicit
     
    Private Declare Function SHCreateDirectoryEx Lib "Shell32.dll" Alias "SHCreateDirectoryExA" _
                                                 (ByVal hwnd As Long, _
                                                  ByVal pszPath As String, _
                                                  ByVal lngsec As Long) As Long
     
    Private Function CreationDossier(sDossier) As Long
    Dim Rep As Long
        Rep = SHCreateDirectoryEx(0&, sDossier, 0&)
    End Function
     
    Sub creationCRApapier()
    Dim NoLign1 As Long, NewBook As Workbook
    Dim sDossier As String, iCpt As Long
        iCpt = 0
        Application.StatusBar = ""
        sDossier = ThisWorkbook.Path & "\" & "Essais"
        CreationDossier sDossier
     
        Application.ScreenUpdating = False
        For NoLign1 = 8 To 48
            If Feuil1.Cells(NoLign1, 3).Value <> 0 Then
                Set NewBook = Workbooks.Add
                Application.DisplayAlerts = False
                With NewBook
                    .SaveAs sDossier & "\" & Feuil1.Cells(NoLign1, 3).Text & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
                    .Close
                End With
                iCpt = iCpt + 1
                Application.DisplayAlerts = True
                Set NewBook = Nothing
            End If
            Application.StatusBar = iCpt
        Next NoLign1
        Application.ScreenUpdating = True
    End Sub

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Tu dois recomposer la chaine du nom en concaténant tes portions de chaine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NewBook.SaveAs "C:\chemin\" & cells(nolign1,3).value & ".xlsm"
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Par défaut
    Bonjour,

    comme je l'ai dit dans mon premier message, c'est la première chose que j'ai essayé mais sans succés, j'ai réessayé en copiant ton code au cas où, j'obtiens une erreur 1004.

    Je vais essayer la solution de kiki29, il va juste me falloir un peu de temps pour la comprendre ^^'

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Si cela ne fonctionne pas, c'est que la valeur de la cellule (par exemple C8) ne contient pas une valeur qui, collée au reste, donne un nom de chemin valide, par exemple parce que c:\chemin\ n'est pas un chemin valide.

    Peut-être dois-tu aussi récupérer le chemin du fichier au travers d'une variable, mais dans ton code, ça ne transparait pas de façon limpide.

    Cela dit, tu aurais intérêt à sortir ton chemin de ton code et à le mettre dans une cellule, le hard-coding (Mettre une donnée en dur dans le code), ce n'est jamais la bonne solution.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Par défaut
    Effectivement Pierre Fauconnier le hard coding était sans doute ce qui posait problème, ça et le contenu des cellules.

    Cela-dit la solution de kiki29, après une ou deux modifications, est parfaite! Merci beaucoup tu viens de m'enlever une belle épine du pied je n'en demandais pas tant

    Bonne journée et merci pour votre aide!

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

Discussions similaires

  1. Macro création de classeur en fonction d'un nom + copie des bonnes données
    Par cheerleaders dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 02/06/2015, 14h06
  2. [AC-2007] Création de macro pour éxécution de multiples requêtes
    Par FXdeCadix dans le forum Access
    Réponses: 4
    Dernier message: 28/04/2010, 16h46
  3. [Test-Excel] récupération des macros dans un classeur corrompu
    Par SilkyRoad dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/08/2006, 23h22
  4. [VBA-Excel] Macro Création Case à cocher
    Par strifer dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 21/07/2006, 10h18
  5. [VBA Excel] macro création de feuille
    Par Viper7 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 29/06/2006, 11h13

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