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 :

créer fichiers excel avec données différentes nommées selon liste [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Mai 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 3
    Par défaut créer fichiers excel avec données différentes nommées selon liste
    Bonjour,
    Ma première discussion sur un forum, il vaut mieux tard que jamais
    J'ai fait deux macros VBA excel mais je n'arrive pas au résultat souhaité: Je voudrais créer 150 fichiers contenant des données différentes au nom de 150 étudiants.
    Ce que j'ai fait:
    1) Macro Vba nommée Formules qui implémente des données sur une feuille, nommée Data, de mon classeur Sujet_CC, qui fonctionne :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    Option Explicit
    Sub Formules()
         With Feuil1
            .Activate
    'DONNEES EXPLOITATION EN PROPRE
         'données volume d'activité
           ' Volume ventes menu base
          Range("B4") = WorksheetFunction.RandBetween(10, 12) * 1000
          ' Volume ventes menu complet
          Range("C4") = WorksheetFunction.RandBetween(20, 25) * 100
     'données taux de marge
           ' Taux de marge menu base
          Range("B5") = WorksheetFunction.RandBetween(5, 20) / 100
          ' Taux de marge menu complet
          Range("C5") = WorksheetFunction.RandBetween(8, 30) / 100
    'données charges indirectes TOTALES
        'amortissements
           Range("B7") = WorksheetFunction.RandBetween(10, 20) * 1000
        'assurance
           Range("B8") = WorksheetFunction.RandBetween(20, 25) * 100
        'Frais de personnel
           Range("B9") = WorksheetFunction.RandBetween(20, 25) * 100
           'part fixe Frais de personnel
           Range("C9") = Range("B9") * (WorksheetFunction.RandBetween(40, 60)) / 100
           'part variable Frais de personnel
           Range("D9") = Range("B9") - Range("C9")
        'Honoraire comptable
           Range("B10") = WorksheetFunction.RandBetween(30, 40) * 100
           'part fixe honoraire comptable
           Range("C10") = Range("B10") * (WorksheetFunction.RandBetween(50, 80)) / 100
           'part variable honoraire comptable
           Range("D10") = Range("B10") - Range("C10")
    'données approvisionnement
    'stoks matières
      'Volume stocks initiaux
           Range("B14") = WorksheetFunction.RandBetween(5, 10) * 100
       'Coef par rapport période en cours
           Range("C14") = WorksheetFunction.RandBetween(50, 120) / 100
      'Part alimentaire menu base
           Range("B15") = WorksheetFunction.RandBetween(2, 4)
      'Part alimentaire supplément dessert
           Range("F15") = WorksheetFunction.RandBetween(10, 18) / 10
      'Prix kit emballage
           Range("B16") = WorksheetFunction.RandBetween(1, 2)
      'Prix boite patissière
           Range("F16") = WorksheetFunction.RandBetween(10, 50) / 100
        'Volume achats approv
           Range("B17") = WorksheetFunction.RandBetween(15, 17) * 1000
    'Frais personnel
           'Nbr heures/semaine
           Range("B19") = WorksheetFunction.RandBetween(1, 2) * 10
           '% temps travail hebdomadaire dédié à la vente
            Range("E19") = (WorksheetFunction.RandBetween(15, 60)) / 100
            'Taux charges patronales
           Range("C20") = WorksheetFunction.RandBetween(10, 20) / 100
           'Prime pour 100 menus
           Range("B21") = WorksheetFunction.RandBetween(1, 2)
            'Nombre total menus à vendre pour toucher la prime
           Range("G21") = WorksheetFunction.RandBetween(10, 17) * 1000
           'DONNEES EXPLOITATION FRANCHISE
         'données volume d'activité
           ' Volume ventes menu base
          Range("G4") = WorksheetFunction.RandBetween(11, 15) * 1000
          ' Volume ventes menu complet
          Range("H4") = WorksheetFunction.RandBetween(20, 40) * 100
           ' Taux de marge menu base
          Range("G5") = WorksheetFunction.RandBetween(90, 150) / 100
          ' Taux de marge menu complet
          Range("H5") = WorksheetFunction.RandBetween(200, 250) / 100
    'données charges indirectes TOTALES
     'Location food truck
           Range("G7") = WorksheetFunction.RandBetween(8, 15) * 1000
        'part fixe Location food truck
           Range("H7") = Range("G7") * (WorksheetFunction.RandBetween(30, 60)) / 100
         'part variable Location food truck
           Range("I7") = Range("G7") - Range("H7")
     'assurance
           Range("G8") = WorksheetFunction.RandBetween(20, 25) * 100
        'Redevance franchise
           Range("G9") = WorksheetFunction.RandBetween(45, 55) * 100
           'données approvisionnement
      'stoks matières
          'Volume stocks initiaux
           Range("B25") = WorksheetFunction.RandBetween(10, 30) * 100
           'Prix stocks initiaux
           Range("C25") = WorksheetFunction.RandBetween(50, 120) / 100
      'Part alimentaire menu base
           Range("B26") = WorksheetFunction.RandBetween(1, 3)
      'Part alimentaire supplément dessert
           Range("F26") = WorksheetFunction.RandBetween(5, 15) / 100
      'Prix kit emballage
           Range("B27") = WorksheetFunction.RandBetween(50, 100) / 100
           'Prix boite patissière
           Range("F27") = WorksheetFunction.RandBetween(5, 30) / 100
       'Volume achats approv
           Range("B28") = WorksheetFunction.RandBetween(20, 25) * 1000
      'Frais personnel
           'Nbr heures/semaine
           Range("B30") = WorksheetFunction.RandBetween(2, 4) * 10
           '% temps travail hebdomadaire dédié à la vente
            Range("E30") = (WorksheetFunction.RandBetween(45, 75)) / 100
            'Taux charges patronales
           Range("C31") = WorksheetFunction.RandBetween(10, 15) / 100
      'revenu attendu par entrepreneur
           'Résultat net global attendu
           Range("B33") = WorksheetFunction.RandBetween(100, 180) * 1000
           End With
    End Sub
    Ces données sont dans une feuille nommée Data
    2) Macro Vba nommée fichier_etudiants crée autant de fichier que de nom d'une liste, qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub fichiers_etudiants()
    Dim chemin As String, fichier As String
    chemin = ThisWorkbook.Path
    Dim nom, c
    For Each c In Range("Liste")
    nom = c.Value
    fichier = chemin & "\" & nom & ".xls"
    ActiveWorkbook.SaveAs Filename:=fichier
    Next c
    End Sub
    3) Ce que je n'arrive pas à faire:
    Je souhaite créer autant de fichiers que d'étudiants de la "liste" contenant chacun des données différentes (chaque étudiant ayant des données différentes).
    Merci d'avance à tout contributeur bienveillant pour une solution.
    Bonne journée à tous

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Premièrement, quand tu mets du code, sélectionne-le et utilise le bouton # en haut du message pour formater celui-ci.

    Si je comprends bien, à partir de ta 2e macro légèrement modifiée, tu pourrais démarrer ta 1ere macro, copier la feuille et la sauvegarder.
    Quelque chose comme
    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
    Sub fichiers_etudiants()
        Dim chemin As String, fichier As String
        chemin = ThisWorkbook.Path
        Dim nom, c
        For Each c In Range("Liste")
           nom = c.Value
           fichier = chemin & "\" & nom & ".xls"
     
           Formules  'ici tu crées tes valeurs aléatoires
           Feuil1.Copy   'ici tu copies cette feuille dans un nouveau classeur
     
           ActiveWorkbook.SaveAs Filename:=fichier
           ActiveWorkbook.Close False
        Next c
     End Sub
    Je n'ai pas testé, mais ça devrait aller.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Mai 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 3
    Par défaut Réponse Parmi résout plbm mais besoin petit prolongement...
    Bonjour Parmi,
    Je tiens à te remercier pour la rapidité / efficacité de la réponse.
    Le code marche très bien !
    J'ai bien noté le # pour formater le code copié, merci.

    J'ai besoin que dans ce code la macro VBA copie deux feuilles liées à la feuille Data qui se trouve dans le fichier de départ Sujet_CC dans le fichier nouvellement crée au nom de chaque étudiant.

    J'ai donc le fichier Sujet_CC dans lequel la macro VBA est codée qui comporte 3 feuilles: Data (données incrémentées selon code Formule), une feuille "propre" qui utilise une partie des données de Data et une feuille "franchise" qui utilise les autres données de Data.

    Je souhaite que chaque fichier étudiant (nominatif avec son nom) comporte la feuille Data mais aussi la feuille "propre" et la feuille "franchise" ...
    Après une matinée de recherche, tentatives multiples je ne m'en sors pas ...

    En plus de ma demande précédente et si c'est pas exagéré la feuille Data doit être cachée pour que les étudiants ne voient que les deux feuilles sur lesquels ils doivent travailler.

    J'espère avoir été suffisamment claire!
    merci pour votre aide
    bonne journée

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Alors, si le classeur contient 3 feuilles et que tu veuilles sauvegarder les 3, aussi bien y aller avec avec un SaveCopyAs qui te permet de conserver l'original plutôt que SaveAs (ou Copy)
    Donc, lorsque tu démarres la macro, tu commences par masquer la feuille Data
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Data").Visible = xlSheetVeryHidden
    Ce qui donnerait
    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
    Sub fichiers_etudiants()
        Dim chemin As String, fichier As String
        Dim nom as string, c as Range
     
        chemin = ThisWorkbook.Path
        Sheets("Data").Visible = xlSheetVeryHidden
        For Each c In Range("Liste")
           nom = c.Value
           fichier = chemin & "\" & nom & ".xls"
     
           Formules  'ici tu crées tes valeurs aléatoires
     
           ThisWorkbook.SaveCopyAs Filename:=fichier  'à noter que ThisWorkbook est toujours celui qui contient la macro
        Next c
     End Sub
    À tester...

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Mai 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 3
    Par défaut Excellente réponse très pédagogique
    Bonjour Parmi,
    Encore tous mes remerciements pour l'aide précieuse qui m'a permis de progresser en VBA, de comprendre un certain nombre de mode de codage (comment travailler sur un objet notamment).
    Bonne journée

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/08/2011, 15h08
  2. Réponses: 1
    Dernier message: 08/10/2008, 15h30
  3. Réponses: 3
    Dernier message: 23/09/2006, 15h19
  4. créer un fichier excell avec VBA(access)
    Par JCH dans le forum Access
    Réponses: 1
    Dernier message: 19/09/2006, 19h07
  5. [Excel] Générer des fichiers Excel avec PHP et des données SQL
    Par MaTHieU_ dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 29/03/2006, 15h46

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