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 :

[Débutant] Créer un nouveau classeur à partir d'une ligne d'un tableau [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 24
    Points : 10
    Points
    10
    Par défaut [Débutant] Créer un nouveau classeur à partir d'une ligne d'un tableau
    Bonjour,

    Je cherche à automatiser la création de classeurs sur la base d'une matrice. Celui-ci reprendrait des informations du tableau source (donc d'un autre classeur) ( ex: nom du client, n° client, adresse ).

    Le nouveau classeur devra avoir pour nom le nom du client.

    Je voudrais par ailleurs que les données soient liées afin que d'éventuels changements soient répercutés.

    Comment puis-je faire cela ? Je joins un exemple du type de liste clients et la matrice en question.

    Toute aide sera appréciée

    DerJul
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 922
    Points : 28 908
    Points
    28 908
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Imaginons que les noms des clients se trouve cellules A2:A4 de la feuille dbCli du classeur où se trouve le code VBA
    Création des classeurs avec le nom des clients dans le répertoire où se trouve le classeur (ThisWorkbook) et fermeture du classeur après création.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     Dim r As Range
     Dim plage As Range
     Set plage = ThisWorkbook.Worksheets("dbCli").Range("A2:A4")
     For Each r In plage
        Workbooks.Add
        ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & r & ".XLS"
        Workbooks(r & ".xls").Close
     Next

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    Par rapport aux fichiers envoyés, je voudrais que cela fasse ceci :

    1er client : liste client -> nouveau classeur avec le nom du client (ici en A2)
    A2 -> B2
    C2 -> B3
    X2 -> B5
    G2 -> B6

    2è client : liste client -> nouveau classeur avec le nom du client (ici en A3)
    A3 -> B2
    C3 -> B3
    X3 -> B5
    G3 -> B6

    etc..

    Comment peut-on adapter votre macro en ce sens ?

    Cordialement,

    DerJul

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 53
    Points : 84
    Points
    84
    Par défaut
    Bonjour DerJul, Corona

    Un exemple avec le tableau de base situé dans une feuille nommée "Index", les noms en colonne A (avec ligne de titre). La variable Ch est à adapter (chemin du dossier ou les classeurs seront créés). Cordialement

    R

    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
    Option Explicit
     
    Sub test()
    Dim w As Worksheet, Ch$, i&, j%
        Ch = "C:\Documents and Settings\Clients\"
        Set w = Worksheets("Index")
        For i = 2 To w.Cells(Rows.Count, 1).End(xlUp).Row
            If Dir(Ch & w.Cells(i, 1) & ".xls") <> "" = False Then
                Workbooks.Add
                Cells(2, 2) = w.Cells(i, 1)
                Cells(3, 2) = w.Cells(i, 3)
                Cells(5, 2) = w.Cells(i, 24)
                Cells(6, 2) = w.Cells(i, 8)
                ActiveWorkbook.SaveAs Ch & w.Cells(i, 1) & ".xls", FileFormat:=56
                ActiveWorkbook.Close
            End If
        Next i
    End Sub

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    Je ne comprends pas ce qu'il faut changer ensuite et comment faire pour que cela se fasse en automatique.

    Pouvez-vous m'expliquer ?

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 922
    Points : 28 908
    Points
    28 908
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Analyse ce que chacun t'apporte comme réponse et essaye d'écrire déjà un bout de code et reviens ensuite si tu as un problème.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    Bien sûr j’essaie

    Je comprends que ce qui est en rouge est à compléter mais je ne comprends pas par quoi pour le ".xls"

    Pour ce qui concerne le code j'essaie, je comprends en partie les codes que vous m'envoyez mais je n'ai jamais fais de programmation et je dois essayer de trouver comment faire pour aider l'entreprise où je fais mon boulot d'été.

    Merci de votre temps

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 922
    Points : 28 908
    Points
    28 908
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    xls est le suffixe des fichiers et xlt pour les modèles Excel et pour la version 97-2003.
    Depuis la version 2007, c'est xlsX (fichier), xlsM (fichier contenant des macros), xltX (modèle) et xltM (modèle contenant des macros) entre-autres.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    Je me suis mal exprimé :s je sais que c'est l'extension pour les fichiers excel mais comme c'est en rouge dans le code je suppose que je dois le compléter, donc par le nom d'un fichier mais je ne sais pas lequel.

    Je ne comprends pas cette partie du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Dir(Ch & w.Cells(i, 1) & ".xls") <> "" = False Then...
    En fait si vous pouviez m'expliquer le code ligne par ligne ça serait génial
    ça sera plus simple si j'ai autre chose de similaire à faire par la suite

    Merci

  10. #10
    Membre habitué
    Homme Profil pro
    Consultant comptable
    Inscrit en
    Mai 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant comptable

    Informations forums :
    Inscription : Mai 2011
    Messages : 137
    Points : 160
    Points
    160
    Par défaut
    ce qui est en rouge c'est ce qui est en texte soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "séparé par des guillemets comme la"
    sinon un conseil copie le code et fais le défilé avec F8 (cela le fais défiler ligne par ligne) en pointant bien sur les variables pour comprendre

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    D'accord ^^

    Je dois partir prendre mon train je reviens voir si vous m'avez répondu ce soir.
    Est-ce que quelqu'un peut compléter le code avec mes 2 noms de fichiers - qui seront donc "liste clients" avec sa première feuille du même nom, et l'autre créé portera le nom du client (colonne A de la liste clients ) - pour que je me repère ?

    Merci à tous pour votre aide

  12. #12
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 922
    Points : 28 908
    Points
    28 908
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme conseillé par Amnorian utilise le débogage du VBE (F8, F9 etc ...) tu peux aussi afficher les valeurs d'une variable en plaçant ta souris au dessus du nom de la variable pendant l'exécution ou bien tu as la commande ajouté un espion du menu Debogage.
    Test ce petit programme pour comprendre ce que fait DIR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     Dim Ch As String, fi As String
     Ch = "C:\repertoire\Sous-Repertoire\" ' <<<< placer un répertoire
     fi = "toto" ' <<<<< Nom d'un fichier
     If Dir(Ch & fi & ".xls") <> "" = False Then
       MsgBox "Je crée le fichier [" & fi & "] dans le répertoire " & Ch
      Else
       MsgBox "Le fichier [" & fi & "] existe déjà dans le répertoire " & Ch
     End If
    Rempli les valeurs de CH par le nom d'un répertoire de ton PC et fi par le nom d'un fichier existant dans ce répertoire et ensuite par le nom d'un fichier n'éxistant pas dans ce répertoire.

    La fonction DIR renvoie le premier fichier d'un répertoire
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fichier = DIR("mesdocuments\*.xls")
    Renvoie le premier fichier dont le suffixe est xls du répertoire mesdocuments

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 53
    Points : 84
    Points
    84
    Par défaut
    Bonjour à tous,

    Le code commenté, et modifié d'après les classeurs fournis que j'ai vu après.
    les xls sont devenus des xlsm puisque Matrice prévisions clients internet.xls contient des macros.

    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
     
    Option Explicit
     
    Sub test()
    Dim w As Worksheet, Ch1$, Ch2$, i&, j%
        'chemin vers le doossier client à adapter
        Ch1 = "C:\Documents and Settings\Clients\"
        'nom complet classeur matrice à adapter
        Ch2 = "C:\Documents and Settings\Matrice prévisions clients internet.xls"
        'déclaration feuille données client
        Set w = Worksheets("Feuil1")
        'pour chaque ligne de la feuille données client
        For i = 2 To w.Cells(Rows.Count, 1).End(xlUp).Row
            'si le classeur portant le nom du client n'existe pas à l'endroit spécifié
            If Dir(Ch1 & w.Cells(i, 1) & ".xlsm") <> "" = False Then
                Workbooks.Open Ch2 'ouvrir le classeur matrice
                'remplir les informations dans le classeur matrice
                Cells(2, 2) = w.Cells(i, 1)
                Cells(3, 2) = w.Cells(i, 3)
                Cells(5, 2) = w.Cells(i, 24)
                Cells(6, 3) = w.Cells(i, 7)
                'sauvegarder le classeur matrice sous le nom du client
                ActiveWorkbook.SaveAs Ch1 & w.Cells(i, 1) & ".xlsm", FileFormat:=52
                'pour xls ActiveWorkbook.SaveAs Ch1 & w.Cells(i, 1) & ".xls", FileFormat:=56
                'pour xlsx : ActiveWorkbook.SaveAs Ch1 & w.Cells(i, 1) & ".xlsx", FileFormat:=51
                'fermer le classeur créé
                ActiveWorkbook.Close
            End If
        Next i
    End Sub
    Citation Envoyé par DerJul
    Est-ce que quelqu'un peut compléter le code avec mes 2 noms de fichiers - qui seront donc "liste clients" avec sa première feuille du même nom, et l'autre créé portera le nom du client (colonne A de la liste clients ) - pour que je me repère ?
    Les noms dans le code sont selon les classeurs fournis. Si tu fais l'effort de comprendre le code tu n'auras aucun mal à les adapter.

    Cordialement

    R

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    Bonjour à tous

    Corona : j'essaye de faire tourner ton programme pour comprendre mais il me met un message d'erreur (je joins la capture d'écran).

    GuyXL : je vais essayer de suite ton code

    Merci à tous de votre aide

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    GuyXL : ton code fonctionne presque ^^en fait cela crée bien un dossier à l'endroit de mon choix avec le nom du client, mais les données que je veux copier vers ce nouveau dossier sont en fait écrites dans le dossier source i.e. dans ma liste client. Pourtant quand je vois ton code et avec tes explications je pensais que c'était bon je ne comprends pas?

    Quelqu'un peut m'aider ?

  16. #16
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 922
    Points : 28 908
    Points
    28 908
    Billets dans le blog
    53
    Par défaut
    Citation Envoyé par DerJul Voir le message
    Bonjour à tous
    Corona : j'essaye de faire tourner ton programme pour comprendre mais il me met un message d'erreur (je joins la capture d'écran).
    GuyXL : je vais essayer de suite ton code
    Merci à tous de votre aide
    Le code que tu essayes de faire tourner ne fonctionne pas d'après ce que je vois tout simplement parce-que tu ne l'as pas placer à l'intérieur d'une procédure.
    Pour qu'un code VBA/macro puisse tourner, il doit être placé dans une procédure SUB ou FUNCTION
    Je te conseille vivement avant de continuer de lire un tuto que tu trouveras ici t'expliquant comment programmer en VBA. Un minimum de connaissance est requis pour continuer. Sinon, tu vas te contenter de copier/Coller ce que l'on t'envoie sans trop comprendre ce que tu fais.

    Donc le code que je t'ai envoyé doit être précédé de SUB nomdelaprocédure() et doit être terminé par End Sub

  17. #17
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    Ok j'avais essayé de rajouter Sub ...() et end sub à la fin ça n'avait pas fonctionné et là ça m'a refait la même chose, puis je me suis rendu compte qu'en écrivant sub...() avant le code ça m'avait rajouté end sub juste après alors que j'avais écrit end sub à la fin. Donc ça c'est bon j'ai compris .

    Je suis en train de lire le tuto que tu m'as conseillé.

    J'ai survolé le tuto mais je ne vois à aucun endroit une explication sur le lien entre plusieurs classeurs excel ni pourquoi le code que m'a envoyé GuyXL m'a renvoyé les données à copier dans le nouveau classeur dans le classeur source. J'ai fais quelques changements pas concluants. Je ne sais toujours pas comment faire

  18. #18
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 922
    Points : 28 908
    Points
    28 908
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Lire le tuto, c'était surtout pour que tu comprennes comment fonctionne VBA, structure Projet, Module, Procédure - Portabilité des variables etc .
    Tu devrais aussi apprendre comment te servir de l'éditeur VBA et en particulier le débogage avec ces touches de raccourcis F8, F8, F9 tout cela est très utile pour savoir où cela coince et ainsi poser les bonnes questions afin d'obtenir les réponses les plus adéquates.

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 53
    Points : 84
    Points
    84
    Par défaut
    Bonjour,

    Je ne comprends pas non plus, le code ayant été testé avant envoi. A moins que le code ait été copié dans le module d'une feuille plutôt que dans un module standard... ? Cordialement

    R

  20. #20
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    "A moins que le code ait été copié dans le module d'une feuille plutôt que dans un module standard... ?"
    En fait j'ouvre mon fichier excel où je veux placer la macro (donc ici la liste clients), dans l'onglet développeur -> Visual Basic -> Module et ensuite je rentre le code.

    Est-ce que c'est de là que viens le problème ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If Dir(Ch1 & w.Cells(i, 1) & ".xlsm") <> "" = False Then
                Workbooks.Open Ch2 'ouvrir le classeur matrice
                'remplir les informations dans le classeur matrice
                Cells(2, 2) = w.Cells(i, 1)
                Cells(3, 2) = w.Cells(i, 3)
                Cells(5, 2) = w.Cells(i, 24)
                Cells(6, 3) = w.Cells(i, 7)
    En fait cela ouvre bien un classeur qui est ensuite nommé avec le nom du client mais celui-ci reste identique à la matrice et les Cells(2, 2) Cells(3,2) Cells(5, 2) Cells(6, 3) qui sont remplies sont celles de la liste clients du Ch1.

    Dois-je préciser quelque chose avant devant ces lignes de code ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. créer un nouveau classeur a partir d'un userform
    Par sebastien-16600 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/03/2013, 22h48
  2. Réponses: 4
    Dernier message: 15/12/2012, 11h31
  3. Créer de nouvelles colonnes à partir d'une ligne
    Par julien4 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 10/10/2007, 12h33
  4. [DOM]Créer dynamiquement du HTML à partir d'une chaîne
    Par jothi35 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/08/2006, 20h01
  5. [débutant]Créer arborescence javascript (a partir d'XML)
    Par gabychon dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/04/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